查看“︁图灵机”︁的源代码
←
图灵机
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
{{no footnotes|time=2019-06-25T13:51:11+00:00}} {{refimprove|time=2019-01-04T13:53:52+00:00}} {{noteTA |G1=IT |G2=PP |G3=TO |G4=Math |1=zh-tw:其他版本;zh-cn:变体; |2=zh-tw:衍伸;zh-cn:变种; }} [[File:Maquina.png|300px|thumb|图灵机的艺术表示]] '''图灵机'''({{Lang-en|Turing machine}}),又称'''确定型图灵机''',是[[英国]][[数学家]][[艾倫·图灵]]于1936年提出的一种將人的計算行為抽象化的[[数理逻辑]]机,其更抽象的意义为一种[[计算模型]],可以看作等价于任何有限逻辑,数学过程的强大可计算机器。 == 图灵的基本思想 == 图灵的基本思想是用机器来模拟人们用纸笔进行[[数学]]运算的过程,他把这样的过程看作下列两种简单的动作: * 在纸上写上或擦除某个[[符号]]; * 把注意力从纸的一处移动到另一处; 而在每个阶段,人要决定下一步的动作,依赖于(a)此人当前所关注的纸上某个位置的符号和(b)此人当前思维的状态。 [[File:Turing machine 2a.svg|thumb|300px|在某些模型中,纸带移动,而未用到的纸带真正是“空白”的。要进行的指令(<code>q4</code>)展示在扫描到方格之上(由Kleene(1952)p.375绘制)。]] [[File:Turing machine 2b.svg|thumb|300px|在某些模型中,读写头沿着固定的纸带移动。要进行的指令(<code>q1</code>)展示在读写头内。在这种模型中“空白”的纸带是全部为0的。有阴影的方格,包括读写头扫描到的空白,标记了1,1,B的那些方格,和读写头符号,构成了系统状态。(由Minsky(1967)p.121绘制)]] 为了模拟人的这种运算过程,图灵构造出一台假想的机器,该机器由以下几个部分组成: # 一条无限长的纸带'''TAPE'''。纸带被划分为一个接一个的小格子,每个格子上包含一个来自有限字母表的符号,字母表中有一个特殊的符号<math>\square</math>表示空白。纸带上的格子从左到右依次被编号为0, 1, 2, ...,纸带的右端可以无限伸展。 # 一个读写头'''HEAD'''。它可以在纸带上左右移动,能读出当前所指的格子上的符号,并能改变它。 # 一套控制规则數量有限的'''TABLE'''(A finite table of instructions)。它根据当前机器所处的状态以及当前读写头所指的格子上的符号来确定读写头下一步的动作,并改变状态寄存器的值,令机器进入一个新的状态。<br>按照以下顺序告知图灵机命令: #* 1. 写入(替换)或擦除当前符号; #* 2. 移动 '''HEAD''', 'L'向左, 'R'向右或者'N'不移动; #* 3. 保持当前状态或者转到另一状态。 # 一个'''状态寄存器'''。它用来保存图灵机当前所处的状态。图灵机的所有可能状态的数目是有限的,并且有一个特殊的状态,称为''停机状态''。参见[[停机问题]]。 注意这个机器的每一部分都是有限的,但它有一个潜在的无限长的纸带,因此这种机器只是一个理想的设备。图灵认为这样的一台机器就能模拟人类所能进行的任何计算过程。 == 图灵机的正式定义 == 一台'''图灵机'''是一个七元有序组<math>(Q, \Sigma, \Gamma, \delta, q_0, q_{accept}, q_{reject})</math>,其中<math>Q, \Sigma, \Gamma</math>都是[[有限集合]],且满足: # <math>Q</math>是非空有穷状态集合; # <math>\Sigma</math>是非空有穷输入字母表,其中不包含特殊的空白符<math>\square</math>; # <math>\Gamma</math>是非空有穷带字母表且<math>\Sigma \subset \Gamma</math>;<math>\square \in \Gamma-\Sigma</math>为''空白符'',也是唯一允许出现无限次的字符; # <math>\delta : Q \times \Gamma \to Q \times \Gamma \times \{L, R, -\}</math>是转移函数,其中<math>L, R</math>表示读写头是向左移还是向右移, - 表示不移动; # <math>q_0 \in Q</math>是起始状态; # <math>q_{accept} \in Q</math>是接受状态。 # <math>q_{reject}\in Q</math>是拒绝状态,且<math>q_{reject}\neq q_{accept}</math>。 图灵机<math>M=(Q, \Sigma, \Gamma, \delta, q_0, q_{accept}, q_{reject}) </math>将以如下方式运作: 开始的时候将输入符号串 <math>\omega=\omega_0\omega_1\ldots\omega_{n-1} \in \Sigma^*</math> 从左到右依此填在纸带的第<math>0, 1, \ldots , n-1</math>号格子上,其他格子保持空白(即填以空白符<math>\square</math>)。 <math>M</math>的读写头指向第0号格子, <math>M</math>处于状态<math>q_0</math>。机器开始运行后,按照转移函数<math>\delta</math>所描述的规则进行计算。例如,若当前机器的状态为<math>q</math>,读写头所指的格子中的符号为<math>x</math>,设<math>\delta(q,x) =(q', x', L)</math>,则机器进入新状态<math>q'</math>,将读写头所指的格子中的符号改为<math>x'</math>,然后将读写头向左移动一个格子。若在某一时刻,读写头所指的是第0号格子,但根据转移函数它下一步将继续向左移,这时它停在原地不动。换句话说,读写头始终不移出纸带的左边界。若在某个时刻<math>M</math>根据转移函数进入了状态<math>q_{accept}</math>,则它立刻停机并接受输入的字符串; 若在某个时刻<math>M</math>根据转移函数进入了状态<math>q_{reject}</math>,则它立刻停机并拒绝输入的字符串。 注意,转移函数<math>\delta</math>是一个部分函数,换句话说对于某些<math>q</math>,<math>x</math>,<math>\delta(q,x)</math>可能没有定义,如果在运行中遇到下一个操作没有定义的情况,机器将立刻停机。 == 图灵机的基本术语 == 设<math>M=(Q, \Sigma, \Gamma, \delta, q_0, q_{accept}, q_{reject})</math>是一台图灵机, # <math>M</math>的'''带描述(tape description)'''是一个函数<math>F: \mathbb{N} \to \Gamma</math>,其中<math>F(i)</math>表示<math>M</math>的带上第<math>i</math>个格子中的符号; # <math>M</math>的'''格局(configuration)'''是一个三元组<math>(F, q, e)</math>,其中<math>F: \mathbb{N} \to \Gamma</math>是当前的带描述,<math>q \in Q</math>是当前的状态,<math>e \in \mathbb{N}</math>是当前读写头所处的位置; # 设<math>C_1 =(F_1, q_1, e_1)</math>, <math>C_2 =(F_2, q_2, e_2)</math>是<math>M</math>的格局,设<math>\delta(q_1, F_1(e_1)) =(q, x, d)</math>,若满足<math>q_2=q</math>,<blockquote><math>e_2=\begin{cases} e_1 - 1 & d = L \\ e_1 + 1 & d = R \end{cases}</math></blockquote>以及<blockquote><math>F_2(i)=\begin{cases} F_1(i) & i \neq e_1 \\ x & i = e_1 \end{cases}</math></blockquote>则称<math>M</math>从格局<math>C_1</math> '''产生'''格局<math>C_2</math>,记作<math>C_1 \to_M C_2</math>。 # 设<math>C =(F, q, e)</math>为<math>M</math>的格局,若<math>q = q_{accept}</math>则称<math>C</math>为'''接受格局''';若<math>q = q_{reject}</math>则称<math>C</math>为'''拒绝格局''';接受格局和拒绝格局统称为'''停机格局'''。 设<math>M</math>是一台图灵机,将字符串 <math>\omega=\omega_0\omega_1\ldots\omega_{n-1} </math> 作为其输入,若存在格局序列<math>C_1, C_2, \ldots, C_k</math>,使得 # <math>C_1</math>是<math>M</math>在输入<math>\omega</math>上的起始格局,即<math>C_1 =(F,q_0,0)</math>,其中<blockquote><math>F_1(i) = \begin{cases} \omega_i & 0 \leq i \leq n-1 \\ \square & \mbox{otherwise} \end{cases}</math></blockquote> # <math>C_i \to_M C_{i+1}</math>,其中<math>i = 1, 2, \ldots, k-1</math>; # <math>C_k</math>是接受格局。 则称<math>M</math> '''接受'''字符串<math>\omega</math>,且<math>C_1, C_2, \ldots, C_k</math>称为图灵机<math>M</math>在输入<math>\omega</math>上的'''接受计算历史'''。同理,若<math>C_k</math>是拒绝格局,则称<math>M</math> '''拒绝'''<math>\omega</math>,且<math>C_1, C_2, \ldots, C_k</math>称为图灵机<math>M</math>在输入<math>\omega</math>上的'''拒绝计算历史'''。<math>M</math>所接受的所有字符串的集合称为<math>M</math>的'''语言''',记作<math>L(M)</math>。 == 图灵机的例子 == 設<math>M=(\{0,1,10,11\}, \{0,1\}, \{0,1,\square\}, \delta, 0, , )</math>和<math>\delta:\{0,1,10,11\}\times\{0,1\}\to\{0,1,10,11\}\times\{0,1\}\times\{R,L,E,S\}</math>. 比如做一個以1的個數表示數值的加法運算,在磁带上的数据是0000001110110000,就是3+2的意思。程序<math>\delta</math>如下: : 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是當前格的修改值。 雖然這裡給出與上面不同形式的定義,但兩者是等價的,這裡的定義能完成的工作並不比上面的定義多。 {| class=wikitable ! 步数 !状态(执行前)!! 状态(执行后) !! 磁带(执行前) !磁带(执行后) |- | 1 |0|| 0 || '''0'''000001110110000 |0'''0'''00001110110000 |- | 2 |0|| 0 || 0'''0'''00001110110000 |00'''0'''0001110110000 |- | 3 |0|| 0 || 00'''0'''0001110110000 |000'''0'''001110110000 |- | 4 |0|| 0 || 000'''0'''001110110000 |0000'''0'''01110110000 |- | 5 |0|| 0 || 0000'''0'''01110110000 |00000'''0'''1110110000 |- | 6 |0|| 0 || 00000'''0'''1110110000 |000000'''1'''110110000 |- | 7 |0||1|| 000000'''1'''110110000 |0000001'''1'''10110000 |- | 8 |1|| 1 || 0000001'''1'''10110000 |00000011'''1'''0110000 |- |9 |1 |1 |00000011'''1'''0110000 |000000111'''0'''110000 |- |10 |1 |10 |000000111'''0'''110000 |0000001111'''1'''10000 |- |11 |10 |10 |0000001111'''1'''10000 |00000011111'''1'''0000 |- |12 |10 |10 |00000011111'''1'''0000 |000000111111'''0'''000 |- |13 |10 |11 |000000111111'''0'''000 |00000011111'''1'''0000 |- |14 |11 |0 |00000011111'''1'''0000 |00000011111'''0'''0000 |} == 通用图灵机 == {{main|通用图灵机}} 对于任意一个图灵机,因为它的描述是有限的,因此我们总可以用某种方式将其编码为字符串。我们用<math>\langle M \rangle</math>表示图灵机<math>M</math>的编码。 我们可以构造出一个特殊的图灵机,它接受任意一个图灵机<math>M</math>的编码<math>\langle M\rangle</math>,然后模拟圖靈機<math>M</math>的运作,这样的图灵机称为'''通用图灵机'''(Universal Turing Machine)。现代电子计算机的计算模型其实就是这样一种通用图灵机,它先接受一段描述另一图灵机,例如圖靈機<math>X</math>的action table的字串,然後运行寫給圖靈機<math>X</math>的程序<math>Y</math>,這樣通用圖靈機執行程序<math>Y</math>就像圖靈機<math>X</math>一樣,能正確執行並实现程序<math>Y</math>所描述的算法。 == 图灵机的变体 == 图灵机有很多变种,但可以证明这些变种的计算能力都是等价的,即它们识别同样的语言类。证明两个计算模型<math>A</math>和<math>B</math>的计算能力等价的基本思想是:用<math>A</math>和<math>B</math>相互模拟,若<math>A</math>可模拟<math>B</math>且<math>B</math>可模拟<math>A</math>,显然他们的计算能力等价。注意这里我们暂时不考虑计算的效率,只考虑计算的理论上“可行性”。 首先我们可以发现,改变图灵机的带字母表并不会改变其计算能力。例如我们可以限制图灵机的带字母表为<math>\{0,1\}</math>,这并不会改变图灵机的计算能力,因为我们显然可以用带字母表为<math>\{0,1\}</math>的图灵机模拟带字母表为任意有限集合<math>\Gamma</math>的图灵机。 另一个要注意的是,如果我们允许图灵机的纸带两端都可以无限伸展,这并不能增加图灵机的计算能力,因为我们显然可以用只有纸带一端能无限伸展的图灵机来模拟这种纸带两端都可以无限伸展的图灵机。 如果我们允许图灵机的读写头在某一步保持原地不动,那也不会增加其计算能力,因为我们可以用向左移动一次再向右移动一次来代替在原地不动。 其它的常见图灵机变种包括: * [[多带图灵机]] * [[非确定型图灵机]] * [[交替式图灵机]] * [[枚举器]] == 图灵可计算性 == * [[图灵可识别语言]] * [[图灵可判定语言]] * [[递归可枚举语言]] * [[可计算函数]] * [[递归函数]] * [[停机问题]] * [[可判定性]] * [[不可判定性]] * [[不可解度]] == 其它等价的计算模型== 除了图灵机以外,人们还发明了很多其它的[[计算模型 (数学)|计算模型]]。包括: * [[寄存器机]] * [[递归函数]] * [[λ演算]] * [[生命游戏]] * [[马尔可夫算法]] 然而这些模型无一例外地都和图灵机的计算能力等价,因此[[邱奇]],[[图灵]]和[[哥德尔]] 提出了著名的[[邱奇-图灵论题]]:一切''直觉上能计算''的函数都可用图灵机计算,反之亦然。 == 定理 == * [[克莱尼–波斯特定理]] * [[弗里德堡–穆奇尼克定理]] * [[波斯纳–罗宾逊定理]] * [[跳躍逆轉定理]] == 参考文献 == * Turing, A., [http://www.abelard.org/turpap2/tp2-ie.asp On Computable Numbers, With an Application to the Entscheidungsproblem]{{Wayback|url=http://www.abelard.org/turpap2/tp2-ie.asp |date=20040403210049 }}, 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 == 外部链接 == * [http://www.cheransoft.com/vturing/ Visual Turing, a Turing machine interactive simulator/IDE]{{Wayback|url=http://www.cheransoft.com/vturing/ |date=20040407193325 }}(free software for Windows)。 * [https://web.archive.org/web/20040404061409/http://www.igs.net/~tril/tm/ Suzanne Brittons Turing Machine Simulator](java applet)。 * [http://sourceforge.net/projects/turing-machine/ C++ Simulator of a Nondeterministic and Deterministic Turing Machine]{{Wayback|url=http://sourceforge.net/projects/turing-machine/ |date=20040404111027 }}(free software)。 * [http://citeseer.org/cs?q=Turing+machine Citations from CiteSeer]{{Wayback|url=http://citeseer.org/cs?q=Turing+machine |date=20130610071250 }} {{CPU technologies}} {{形式语言与形式文法}} {{Authority control}} [[Category:计算模型]] [[Category:图灵机| ]] [[Category:自动机]] [[Category:递归论]]
该页面使用的模板:
Template:Authority control
(
查看源代码
)
Template:CPU technologies
(
查看源代码
)
Template:Lang-en
(
查看源代码
)
Template:Main
(
查看源代码
)
Template:No footnotes
(
查看源代码
)
Template:NoteTA
(
查看源代码
)
Template:Refimprove
(
查看源代码
)
Template:Wayback
(
查看源代码
)
Template:形式语言与形式文法
(
查看源代码
)
返回
图灵机
。
导航菜单
个人工具
登录
命名空间
页面
讨论
不转换
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
工具
链入页面
相关更改
页面信息