形式语言与自动机 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 基础
      • 6.2 图灵机设计实例
        • 6.2.1 L = { a n b n } L=\{a^nb^n\} L={ anbn}
        • 6.2.2 L = { 0 n 1 n 2 n } L=\{0^n1^n2^n\} L={ 0n1n2n}
      • 6.2.3 整数函数计算
        • 6.2.4 真减法: m Θ n = ( m > n ) ? m − n : 0 m\Theta n=(m>n)?m-n:0 mΘn=(m>n)?mn:0

Part.6 图灵机

6.1 基础

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

6.2 图灵机设计实例

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

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

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

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

6.2.3 整数函数计算

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

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

  • 思路:用 0 m 1 0 n 0^m10^n 0m10n作为带子,每读一个 0 m 0^m 0m最左端的0就置为B,把 0 n 0^n 0n最左端的0置为1(不能置空,因为在11100B中,如果变成了BBBBB,就不知道是否用完了0)。让再回去找 0 m 0^m 0m的0.如果有在 0 n 0^n 0n找0遇到B,说明 m > n m\gt n m>n,则将所有非B的符号全部换成0,这些0有 0 n − m 0^{n-m} 0nm个。

你可能感兴趣的:(形式语言与自动机)