图灵机
Clash Royale CLAN TAG#URR8PPP
图灵机(英语:Turing machine),又称确定型图灵机,是英国数学家艾倫·图灵于1936年提出的一种抽象计算模型,其更抽象的意义为一种数学逻辑机,可以看作等价于任何有限逻辑数学过程的终极强大逻辑机器。
目录
1 图灵的基本思想
2 图灵机的正式定义
3 图灵机的基本术语
4 图灵机的例子
5 通用图灵机
6 图灵机的变体
7 图灵可计算性
8 其它等价的计算模型
9 参考文献
10 外部链接
图灵的基本思想
图灵的基本思想是用机器来模拟人们用纸笔进行数学运算的过程,他把这样的过程看作下列两种简单的动作:
- 在纸上写上或擦除某个符号;
- 把注意力从纸的一个位置移动到另一个位置;
而在每个阶段,人要决定下一步的动作,依赖于(a)此人当前所关注的纸上某个位置的符号和(b)此人当前思维的状态。
为了模拟人的这种运算过程,图灵构造出一台假想的机器,该机器由以下几个部分组成:
- 一条无限长的纸带TAPE。纸带被划分为一个接一个的小格子,每个格子上包含一个来自有限字母表的符号,字母表中有一个特殊的符号◻displaystyle square 表示空白。纸带上的格子从左到右依次被编号为0, 1, 2, ...,纸带的右端可以无限伸展。
- 一个读写头HEAD。该读写头可以在纸带上左右移动,它能读出当前所指的格子上的符号,并能改变当前格子上的符号。
- 一套控制规则TABLE。它根据当前机器所处的状态以及当前读写头所指的格子上的符号来确定读写头下一步的动作,并改变状态寄存器的值,令机器进入一个新的状态,按照以下顺序告知图灵机命令:
- 1. 写入(替换)或擦除当前符号;
- 2. 移动 HEAD, 'L'向左, 'R'向右或者'N'不移动;
- 3. 保持当前状态或者转到另一状态
- 一个状态寄存器。它用来保存图灵机当前所处的状态。图灵机的所有可能状态的数目是有限的,并且有一个特殊的状态,称为停机状态。参见停机问题。
注意这个机器的每一部分都是有限的,但它有一个潜在的无限长的纸带,因此这种机器只是一个理想的设备。图灵认为这样的一台机器就能模拟人类所能进行的任何计算过程。
图灵机的正式定义
一台图灵机是一个七元有序组(Q,Σ,Γ,δ,q0,qaccept,qreject)displaystyle (Q,Sigma ,Gamma ,delta ,q_0,q_accept,q_reject),其中Q,Σ,Γdisplaystyle Q,Sigma ,Gamma 都是有限集合,且满足:
Qdisplaystyle Q是非空有穷状态集合;
Σdisplaystyle Sigma 是非空有穷输入字母表,其中不包含特殊的空白符◻displaystyle square ;
Γdisplaystyle Gamma 是非空有穷带字母表且Σ⊂Γdisplaystyle Sigma subset Gamma ;
◻∈Γ−Σdisplaystyle square in Gamma -Sigma 为空白符,也是唯一允许出现无限次的字符;
δ:Q×Γ→Q×Γ×L,R,−displaystyle delta :Qtimes Gamma to Qtimes Gamma times L,R,-是转移函数,其中L,Rdisplaystyle L,R表示读写头是向左移还是向右移, - 表示不移动;
q0∈Qdisplaystyle q_0in Q是起始状态;
qaccept∈Qdisplaystyle q_acceptin Q是接受状态。qreject∈Qdisplaystyle q_rejectin Q是拒绝状态,且qreject≠qacceptdisplaystyle q_rejectneq q_accept。
图灵机M=(Q,Σ,Γ,δ,q0,qaccept,qreject)displaystyle M=(Q,Sigma ,Gamma ,delta ,q_0,q_accept,q_reject)将以如下方式运作:
开始的时候将输入符号串
ω=ω0ω1…ωn−1∈Σ∗displaystyle omega =omega _0omega _1ldots omega _n-1in Sigma ^*
从左到右依此填在纸带的第0,1,…,n−1displaystyle 0,1,ldots ,n-1号格子上,其他格子保持空白(即填以空白符◻displaystyle square )。
Mdisplaystyle M的读写头指向第0号格子,
Mdisplaystyle M处于状态q0displaystyle q_0。机器开始运行后,按照转移函数δdisplaystyle delta 所描述的规则进行计算。例如,若当前机器的状态为qdisplaystyle q,读写头所指的格子中的符号为xdisplaystyle x,设δ(q,x)=(q′,x′,L)displaystyle delta (q,x)=(q',x',L),则机器进入新状态q′displaystyle q',将读写头所指的格子中的符号改为x′displaystyle x',然后将读写头向左移动一个格子。若在某一时刻,读写头所指的是第0号格子,但根据转移函数它下一步将继续向左移,这时它停在原地不动。换句话说,读写头始终不移出纸带的左边界。若在某个时刻Mdisplaystyle M根据转移函数进入了状态qacceptdisplaystyle q_accept,则它立刻停机并接受输入的字符串;
若在某个时刻Mdisplaystyle M根据转移函数进入了状态qrejectdisplaystyle q_reject,则它立刻停机并拒绝输入的字符串。
注意,转移函数δdisplaystyle delta 是一个部分函数,换句话说对于某些qdisplaystyle q,xdisplaystyle x,δ(q,x)displaystyle delta (q,x)可能没有定义,如果在运行中遇到下一个操作没有定义的情况,机器将立刻停机。
图灵机的基本术语
设M=(Q,Σ,Γ,δ,q0,qaccept,qreject)displaystyle M=(Q,Sigma ,Gamma ,delta ,q_0,q_accept,q_reject)是一台图灵机,
Mdisplaystyle M的带描述(tape description)是一个函数F:N→Γdisplaystyle F:mathbb N to Gamma ,其中F(i)displaystyle F(i)表示Mdisplaystyle M的带上第idisplaystyle i个格子中的符号;
Mdisplaystyle M的格局(configuration)是一个三元组(F,q,e)displaystyle (F,q,e),其中F:N→Γdisplaystyle F:mathbb N to Gamma 是当前的带描述,q∈Qdisplaystyle qin Q是当前的状态,e∈Ndisplaystyle ein mathbb N 是当前读写头所处的位置;- 设C1=(F1,q1,e1)displaystyle C_1=(F_1,q_1,e_1), C2=(F2,q2,e2)displaystyle C_2=(F_2,q_2,e_2)是Mdisplaystyle M的格局,设δ(q1,F1(e1))=(q,x,d)displaystyle delta (q_1,F_1(e_1))=(q,x,d),若满足q2=qdisplaystyle q_2=q,
以及e2={e1−1d=Le1+1d=Rdisplaystyle e_2=begincasese_1-1&d=L\e_1+1&d=Rendcasese_1 - 1 & d = "L \"
e_1 + 1 & d = "R"
endcases"/>
则称Mdisplaystyle M从格局C1displaystyle C_1 产生格局C2displaystyle C_2,记作C1→MC2displaystyle C_1to _MC_2。F2(i)={F1(i)i≠e1xi=e1displaystyle F_2(i)=begincasesF_1(i)&ineq e_1\x&i=e_1endcasesF_1(i) & i neq "e_1" \
x & i = "e_1"
endcases"/> - 设C=(F,q,e)displaystyle C=(F,q,e)为Mdisplaystyle M的格局,若q=qacceptdisplaystyle q=q_accept则称Cdisplaystyle C为接受格局;若q=qrejectdisplaystyle q=q_reject则称Cdisplaystyle C为拒绝格局;接受格局和拒绝格局统称为停机格局。
设Mdisplaystyle M是一台图灵机,将字符串
ω=ω0ω1…ωn−1displaystyle omega =omega _0omega _1ldots omega _n-1
作为其输入,若存在格局序列C1,C2,…,Ckdisplaystyle C_1,C_2,ldots ,C_k,使得
C1displaystyle C_1是Mdisplaystyle M在输入ωdisplaystyle omega 上的起始格局,即C1=(F,q0,0)displaystyle C_1=(F,q_0,0),其中F1(i)={ωi0≤i≤n−1◻otherwisedisplaystyle F_1(i)=begincasesomega _i&0leq ileq n-1\square &mboxotherwiseendcasesomega_i & 0 leq i leq n-1 \
square & mboxotherwise
endcases"/>
Ci→MCi+1displaystyle C_ito _MC_i+1,其中i=1,2,…,k−1displaystyle i=1,2,ldots ,k-1;
Ckdisplaystyle C_k是接受格局。
则称Mdisplaystyle M 接受字符串ωdisplaystyle omega ,且C1,C2,…,Ckdisplaystyle C_1,C_2,ldots ,C_k称为图灵机Mdisplaystyle M在输入ωdisplaystyle omega 上的接受计算历史。同理,若Ckdisplaystyle C_k是拒绝格局,则称Mdisplaystyle M 拒绝ωdisplaystyle omega ,且C1,C2,…,Ckdisplaystyle C_1,C_2,ldots ,C_k称为图灵机Mdisplaystyle M在输入ωdisplaystyle omega 上的拒绝计算历史。Mdisplaystyle M所接受的所有字符串的集合称为Mdisplaystyle M的语言,记作L(M)displaystyle L(M)。
图灵机的例子
設M=(0,1,10,11,0,1,0,1,◻,δ,0,,)displaystyle M=(0,1,10,11,0,1,0,1,square ,delta ,0,,)和δ:0,1,10,11×0,1→0,1,10,11×0,1×R,L,E,Sdisplaystyle delta :0,1,10,11times 0,1to 0,1,10,11times 0,1times R,L,E,S.
比如做一個以1的個數表示數值的加法運算,在磁带上的数据是0000001110110000,就是3+2的意思。程序δdisplaystyle delta 如下:
- 0,0 -> 0,0R
- 0,1 -> 1,1R
- 1,0 -> 10,1R
- 1,1 -> 1,1R
- 10,0 -> 11,0L
- 10,1 -> 10,1R
- 11,0 -> E
- 11,1 -> 0,0S
第一行程序0,0->0,0R意思就是如果機器讀到0,就將其變成0,狀態變為0,讀寫頭向右移動一格. R就是向右移動一格,L就是向左移一格,E是錯誤,S是停機. xx,y -> aa,b中xx是當前狀態, y是當前格子的值, aa是程序下一步的狀態, b是當前格的修改值。
雖然這裡給出與上面不同形式的定義,但兩者是等價的,這裡的定義能完成的工作並不比上面的定義多。
步数 | 状态(执行前) | 状态(执行后) | 磁带(执行前) | 磁带(执行后) |
---|---|---|---|---|
1 | 0 | 0 | 0000001110110000 | 0000001110110000 |
2 | 0 | 0 | 0000001110110000 | 0000001110110000 |
3 | 0 | 0 | 0000001110110000 | 0000001110110000 |
4 | 0 | 0 | 0000001110110000 | 0000001110110000 |
5 | 0 | 0 | 0000001110110000 | 0000001110110000 |
6 | 0 | 0 | 0000001110110000 | 0000001110110000 |
7 | 0 | 1 | 0000001110110000 | 0000001110110000 |
8 | 1 | 1 | 0000001110110000 | 0000001110110000 |
9 | 1 | 1 | 0000001110110000 | 0000001110110000 |
10 | 1 | 10 | 0000001110110000 | 0000001111110000 |
11 | 10 | 10 | 0000001111110000 | 0000001111110000 |
12 | 10 | 10 | 0000001111110000 | 0000001111110000 |
13 | 10 | 11 | 0000001111110000 | 0000001111110000 |
14 | 11 | 0 | 0000001111110000 | 0000001111100000 |
通用图灵机
对于任意一个图灵机,因为它的描述是有限的,因此我们总可以用某种方式将其编码为字符串。我们用⟨M⟩displaystyle langle Mrangle 表示图灵机Mdisplaystyle M的编码。
我们可以构造出一个特殊的图灵机,它接受任意一个图灵机Mdisplaystyle M的编码⟨M⟩displaystyle langle Mrangle ,然后模拟Mdisplaystyle M的运作,这样的图灵机称为通用图灵机(Universal Turing Machine)。现代电子计算机的计算模型其实就是这样一种通用图灵机,它能接受一段描述其他图灵机的程序,并运行程序实现该程序所描述的算法。
图灵机的变体
图灵机有很多变种,但可以证明这些变种的计算能力都是等价的,即它们识别同样的语言类。证明两个计算模型Adisplaystyle A和Bdisplaystyle B的计算能力等价的基本思想是:用Adisplaystyle A和Bdisplaystyle B相互模拟,若Adisplaystyle A可模拟Bdisplaystyle B且Bdisplaystyle B可模拟Adisplaystyle A,显然他们的计算能力等价。注意这里我们暂时不考虑计算的效率,只考虑计算的理论上“可行性”。
首先我们可以发现,改变图灵机的带字母表并不会改变其计算能力。例如我们可以限制图灵机的带字母表为0,1displaystyle 0,1,这并不会改变图灵机的计算能力,因为我们显然可以用带字母表为0,1displaystyle 0,1的图灵机模拟带字母表为任意有限集合Γdisplaystyle Gamma 的图灵机。
另一个要注意的是,如果我们允许图灵机的纸带两端都可以无限伸展,这并不能增加图灵机的计算能力,因为我们显然可以用只有纸带一端能无限伸展的图灵机来模拟这种纸带两端都可以无限伸展的图灵机。
如果我们允许图灵机的读写头在某一步保持原地不动,那也不会增加其计算能力,因为我们可以用向左移动一次再向右移动一次来代替在原地不动。
其它的常见图灵机变种包括:
- 多带图灵机
- 非确定型图灵机
- 交替式图灵机
- 枚举器
图灵可计算性
- 图灵可识别语言
- 图灵可判定语言
- 递归可枚举语言
- 可计算函数
- 递归函数
- 停机问题
- 可判定性
- 不可判定性
- 不可解度
其它等价的计算模型
除了图灵机以外,人们还发明了很多其它的计算模型。包括:
- 寄存器机
- 递归函数
- λ演算
- 生命游戏
- 马尔可夫算法
然而这些模型无一例外地都和图灵机的计算能力等价,因此邱奇,图灵和哥德尔
提出了著名的邱奇-图灵论题:一切直觉上能计算的函数都可用图灵机计算,反之亦然。
参考文献
- Turing, A., On Computable Numbers, With an Application to the Entscheidungsproblem, Proceedings of the London Mathematical Society, Series 2, Volume 42, 1936; reprinted in M. David(ed.), The Undecidable, Hewlett, NY: Raven Press, 1965;
- Michael Sipser, Introduction to the Theory of Computation, PWS Publishing, 1997. ISBN 0-534-94728-X
外部链接
Visual Turing, a Turing machine interactive simulator/IDE(free software for Windows)。
Suzanne Brittons Turing Machine Simulator(java applet)。
C++ Simulator of a Nondeterministic and Deterministic Turing Machine(free software)。- Citations from CiteSeer
- 顾森讲解图灵机
|
|