716 字
4 分钟
[形式语言与自动机] 图灵机

图灵机#

定义是一个七元组:

M=(Q,Σ,Γ,δ,q0,B,F)M = (Q, \Sigma, \Gamma, \delta, q_0, B, F)
  • QQ 是一个有限的状态集合
  • Σ\Sigma 是一个有限的输入符号集合
  • Γ\Gamma 是一个有限的带符号集合,且 ΣΓ\Sigma \subseteq \Gamma
  • δ\delta 是一个状态转移函数,定义为 δ:Q×ΓQ×Γ×{L,R}\delta: Q \times \Gamma \to Q \times \Gamma \times \{L, R\}
  • q0Qq_0 \in Q 是初始状态
  • BΓB \in \Gamma 是空白符号,且 BΣB \notin \Sigma
  • FQF \subseteq Q 是接受状态集合

图灵机有一条无穷长的纸带,上面一个格子能存一个字符,可以当做内存来用了

绘制图灵机#

使用形如a/ba/b \leftarrow来表示一次状态转移,如果读头当前所在的格子为aa则读入,并写入符号bb,然后使读头向左移动一格

图灵机的三种运行结果#

  1. 接受并停机:到达qfq_{f}/qacceptq_{accept}/Acc,则判断输入字符串被接受,图灵机停机
  2. 拒绝并停机:到达qrq_{r}/qrejectq_{reject}/Rej,则判断输入字符串被拒绝,图灵机停机
  3. 循环:永远运行,不到达任何停机状态,表示不接受输入字符串

技巧#

同样可用自定义符号表示结构化信息

示例:解决anbncna^n b^n c^n问题#

题里会告诉读头的初始位置,此题假设读头初始位置在最左边的第一个字符上

  1. 几种情况:
    • 此处为aa,替换为XX,并向右移动,进入步骤2
    • 此处为XX,说明所有的aa都已经被替换,进入步骤8
    • 此处为bbcc,判断输入字符串被拒绝,图灵机停机
    • 此处为字符串边界或空白符BB,判断输入字符串被接受,图灵机停机
  2. 看到aaYY就继续向右
  3. 直到:
    • 遇到一个bb,将其替换为YY,并向右移动,进入步骤4
    • 遇到一个cc,判断输入字符串被拒绝,图灵机停机
    • 遇到字符串边界或空白符BB,判断输入字符串被拒绝,图灵机停机
  4. 看到bbZZ就继续向右
  5. 直到:
    • 遇到一个cc,将其替换为ZZ,并向左移动,进入步骤6
    • 遇到一个aa,判断输入字符串被拒绝,图灵机停机
    • 遇到字符串边界或空白符BB,判断输入字符串被拒绝,图灵机停机
  6. 看到a,b,Y,Za,b,Y,Z就继续向左
  7. 直到:
    • 遇到一个XX,不修改,向右移动,进入步骤1
    • 遇到字符串边界或空白符BB,说明所有的aa都已经被替换,进入步骤8
  8. 一直向右移动,直到:
    • 若遇不到任何ccbb而是到达字符串边界或空白符BB,则判断输入字符串被接受,图灵机停机
    • 若遇到bbcc,则判断输入字符串被拒绝,图灵机停机
[形式语言与自动机] 图灵机
https://alkaid114.github.io/posts/automata/tm/
作者
Alkaid114
发布于
2026-07-07
许可协议
CC BY-NC-SA 4.0