形式语言与自动机 Part.6 图灵机

课程名:形式语言与自动机

作者:Lupinus_Linn

许可证:CC-BY-NC-SA 3.0 创作共用-署名-非商业性-相同方式共享

  • 署名(英语:Attribution,BY):您(用户)可以复制、发行、展览、表演、放映、广播或通过信息网络传播本作品;您必须按照作者或者许可人指定的方式对作品进行署名。
  • 非商业性使用(英语:Noncommercial,NC):您可以自由复制、散布、展示及演出本作品;您不得为商业目的而使用本作品。
  • 相同方式共享(英语:Sharealike,SA):您可以自由复制、散布、展示及演出本作品;若您改变、转变或更改本作品,仅在遵守与本作品相同的许可条款下,您才能散布由本作品产生的派生作品。(参见copyleft。)

引用:

  • 本文中部分文字与图片引用自北京邮电大学计算机学院王柏教授的《形式语言与自动机》课程课件。
  • 绪论中的证明方法部分引自清华大学王生原老师课件。
  • 部分题目插图引用自北京邮电大学出版社《形式语言与自动机 第二版》教材。

在此一并表示感谢,并不做商业用途。

本笔记所有内容的传送门

Part.1绪论, Part.2 语言与文法
Part 3.有限自动机
Part.4 正则语言,2DFA,Mealy&Moore机
Part.5 上下文无关语言与下推自动机(PDA)
Part.6 图灵机

Part.6 图灵机

6.1 基础

  • 性质:
    1. 每个过程都是有穷可描述的。
    2. 过程是离散可执行的。
  • 基本模型:
    1. 一个读写头配一个右端无限的纸带。读写头有状态,这些状态属于有限状态集QQ.有一个开始状态q0q0Qq_0 ,q_0\in Q,被接受的状态集合是F,FQF,F\sube Q.
    2. 纸带有单元格(cell),单元格上书写带符(tape symbol),这些带符属于有限带符号集Σ\Sigma.有一个特殊带符空白符BB.
    3. 读写头每次从纸带读取一个符号,这些符号属于有限输入符号集TT.输入符号的种类可能比纸带的符号种类少(TΣT\sube \Sigma),最起码空白符BB在纸带上而不在输入符号集里(BΣTB\in \Sigma-T)。
    4. 图灵机可以根据状态和输入字符向左向右移动,并且在纸带上写字,这全由转移函数δ:Q×ΣQ×Σ×{L,R}\delta:Q\times \Sigma \to Q\times \Sigma \times \{L,R\}决定。其含义是δ()=()\delta(当前状态,读入字符)=(下一个状态,写下的字符,向左向右移动)
    5. 由于图灵机是上下文有关的,所以其格局为ω1qω2\omega_1q\omega_2,描述图灵机(Turning Machine, TM)的瞬间工作终态。ω1ω2\omega_1\omega_2是从左端到右端空白符号为止的内容。(因为右端无限长)。
      ω1qω2\omega_1q\omega_2表示读写头正在扫描ω2\omega_2的最左字符。
      ω2=ϵ\omega_2=\epsilon表示读写头正在扫描空白字符。
      当读写头在最左边还要求向左时,拒绝移动,仍然停留在最左端。
    6. 图灵机是状态接受的。起初有一个字符串在纸带上,读写头指向最左单元,其实状态是q0q_0,只要能在工作过程中进入某个接受状态,则立即停机,认为接受。
    7. 无法判断图灵机MM在接受某个串ωT\omega\in T^*后是否停机,因为很容易可以写出死循环。停机问题是不可判定的。被接受的字符串一定会停机,不被接受的就不知道了。

6.2 图灵机设计实例

6.2.1 L={anbn}L=\{a^nb^n\}

  • 思路:一一配对,从最左的a开始,每读取一个a置为无关字符x,然后到b串里读取最左一个b,再把b置为,在找最左的a,循环往复。凡是在配对中找不到另一个字符的,说明a<ba\lt b或者a>ba\gt b,就立即停机,不接受。

6.2.2 L={0n1n2n}L=\{0^n1^n2^n\}

  • 同理,消除一个0就把1和2置为无用字符。

6.2.3 整数函数计算

  • 思路:转化为1进制,即把整数i0i\ge 0表示成0i0^iii个0)。
  • 如果一个函数有kk自变量i1,i2,,iki_1,i_2,\dots,i_k,则开始时把整数挨个放置,并且中间用11隔开:0i110i2110ik0^{i_1}10^{i_2}1\dots10^{i_k}.
  • 如果图灵机停止(不论状态是否接受),则带上的结果0m0^mf(i1,i2,,ik)=mf(i_1,i_2,\dots,i_k)=m的计算结果。
  • 所有常用的整数算数函数都是全递归。

6.2.4 真减法:mΘn=(m>n)?mn:0m\Theta n=(m>n)?m-n:0

  • 思路:用0m10n0^m10^n作为带子,每读一个0m0^m最左端的0就置为B,把0n0^n最左端的0置为1(不能置空,因为在11100B中,如果变成了BBBBB,就不知道是否用完了0)。让再回去找0m0^m的0.如果有在0n0^n找0遇到B,说明 m>nm\gt n,则将所有非B的符号全部换成0,这些0有0nm0^{n-m}个。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章