图灵机

图灵机(英语:Turing machine),又称确定型图灵机,是英国数学家艾伦·图灵于1936年提出的一种抽象计算模型,其更抽象的意义为一种数学逻辑机,可以看作等价于任何有限逻辑数学过程的终极强大逻辑机器。

目录

[隐藏]

图灵的基本思想

图灵的基本思想是用机器来模拟人们用纸笔进行数学运算的过程,他把这样的过程看作下列两种简单的动作:

  • 在纸上写上或擦除某个符号;
  • 把注意力从纸的一个位置移动到另一个位置;

而在每个阶段,人要决定下一步的动作,依赖于(a)此人当前所关注的纸上某个位置的符号和(b)此人当前思维的状态。

在某些模型中,纸带移动,而未用到的纸带真正是“空白”的。要进行的指令(q4)展示在扫描到方格之上(由Kleene(1952)p.375绘制)。

在某些模型中,读写头沿着固定的纸带移动。要进行的指令(q1)展示在读写头内。在这种模型中“空白”的纸带是全部为0的。有阴影的方格,包括读写头扫描到的空白,标记了1,1,B的那些方格,和读写头符号,构成了系统状态。(由Minsky(1967)p.121绘制)

为了模拟人的这种运算过程,图灵构造出一台假想的机器,该机器由以下几个部分组成:

  1. 一条无限长的纸带TAPE。纸带被划分为一个接一个的小格子,每个格子上包含一个来自有限字母表的符号,字母表中有一个特殊的符号{\displaystyle \square }表示空白。纸带上的格子从左到右依次被编号为0, 1, 2, ...,纸带的右端可以无限伸展。
  2. 一个读写头HEAD。该读写头可以在纸带上左右移动,它能读出当前所指的格子上的符号,并能改变当前格子上的符号。
  3. 一套控制规则TABLE。它根据当前机器所处的状态以及当前读写头所指的格子上的符号来确定读写头下一步的动作,并改变状态寄存器的值,令机器进入一个新的状态。
  4. 一个状态寄存器。它用来保存图灵机当前所处的状态。图灵机的所有可能状态的数目是有限的,并且有一个特殊的状态,称为停机状态。参见停机问题

注意这个机器的每一部分都是有限的,但它有一个潜在的无限长的纸带,因此这种机器只是一个理想的设备。图灵认为这样的一台机器就能模拟人类所能进行的任何计算过程。

图灵机的正式定义

一台图灵机是一个七元有序组{\displaystyle (Q,\Sigma ,\Gamma ,\delta ,q_{0},q_{accept},q_{reject})},其中{\displaystyle Q,\Sigma ,\Gamma }都是有限集合,且满足

  1. {\displaystyle Q}是非空有穷状态集合;
  2. {\displaystyle \Sigma }是非空有穷输入字母表,其中不包含特殊的空白符{\displaystyle \square }
  3. {\displaystyle \Gamma }是非空有穷带字母表且{\displaystyle \Sigma \subset \Gamma }
  4. {\displaystyle q_{reject}\in \Gamma -\Sigma }空白符
  5. {\displaystyle \delta :Q\times \Gamma \to Q\times \Gamma \times \{L,R\}}是转移函数,其中{\displaystyle L,R}表示读写头是向左移还是向右移;
  6. {\displaystyle q_{0}\in Q}是起始状态;
  7. {\displaystyle q_{accept}\in Q}是接受状态。{\displaystyle q_{reject}\in Q}是拒绝状态,且{\displaystyle q_{reject}\neq q_{accept}}

图灵机{\displaystyle M=(Q,\Sigma ,\Gamma ,\delta ,q_{0},q_{accept},q_{reject})}将以如下方式运作:

开始的时候将输入符号串 {\displaystyle \omega =\omega _{0}\omega _{1}\ldots \omega _{n-1}\in \Sigma ^{*}} 从左到右依此填在纸带的第{\displaystyle 0,1,\ldots ,n-1}号格子上,其他格子保持空白(即填以空白符{\displaystyle \square })。 {\displaystyle M}的读写头指向第0号格子, {\displaystyle M}处于状态{\displaystyle q_{0}}。机器开始运行后,按照转移函数{\displaystyle \delta }所描述的规则进行计算。例如,若当前机器的状态为{\displaystyle q},读写头所指的格子中的符号为{\displaystyle x},设{\displaystyle \delta (q,x)=(q‘,x‘,L)},则机器进入新状态{\displaystyle q‘},将读写头所指的格子中的符号改为{\displaystyle x‘},然后将读写头向左移动一个格子。若在某一时刻,读写头所指的是第0号格子,但根据转移函数它下一步将继续向左移,这时它停在原地不动。换句话说,读写头始终不移出纸带的左边界。若在某个时刻{\displaystyle M}根据转移函数进入了状态{\displaystyle q_{accept}},则它立刻停机并接受输入的字符串; 若在某个时刻{\displaystyle M}根据转移函数进入了状态{\displaystyle q_{reject}},则它立刻停机并拒绝输入的字符串。

注意,转移函数{\displaystyle \delta }是一个部分函数,换句话说对于某些{\displaystyle q},{\displaystyle x},{\displaystyle \delta (q,x)}可能没有定义,如果在运行中遇到下一个操作没有定义的情况,机器将立刻停机。

图灵机的基本术语

设{\displaystyle M=(Q,\Sigma ,\Gamma ,\delta ,q_{0},q_{accept},q_{reject})}是一台图灵机,

  1. {\displaystyle M}带描述(tape description)是一个函数{\displaystyle F:\mathbb {N} \to \Gamma },其中{\displaystyle F(i)}表示{\displaystyle M}的带上第{\displaystyle i}个格子中的符号;
  2. {\displaystyle M}格局(configuration)是一个三元组{\displaystyle (F,q,e)},其中{\displaystyle F:\mathbb {N} \to \Gamma }是当前的带描述,{\displaystyle q\in Q}是当前的状态,{\displaystyle e\in \mathbb {N} }是当前读写头所处的位置;
  3. 设{\displaystyle C_{1}=(F_{1},q_{1},e_{1})}, {\displaystyle C_{2}=(F_{2},q_{2},e_{2})}是{\displaystyle M}的格局,设{\displaystyle \delta (q_{1},F_{1}(e_{1}))=(q,x,d)},若满足{\displaystyle q_{2}=q}

    {\displaystyle e_{2}={\begin{cases}e_{1}-1&d=L\\e_{1}+1&d=R\end{cases}}}

    以及

    {\displaystyle F_{2}(i)={\begin{cases}F_{1}(i)&i\neq e_{1}\\x&i=e_{1}\end{cases}}}

    则称{\displaystyle M}从格局{\displaystyle C_{1}} 产生格局{\displaystyle C_{2}},记作{\displaystyle C_{1}\to _{M}C_{2}}

  4. 设{\displaystyle C=(F,q,e)}为{\displaystyle M}的格局,若{\displaystyle q=q_{accept}}则称{\displaystyle C}接受格局;若{\displaystyle q=q_{reject}}则称{\displaystyle C}拒绝格局;接受格局和拒绝格局统称为停机格局

设{\displaystyle M}是一台图灵机,将字符串 {\displaystyle \omega =\omega _{0}\omega _{1}\ldots \omega _{n-1}} 作为其输入,若存在格局序列{\displaystyle C_{1},C_{2},\ldots ,C_{k}},使得

  1. {\displaystyle C_{1}}是{\displaystyle M}在输入{\displaystyle \omega }上的起始格局,即{\displaystyle C_{1}=(F,q_{0},0)},其中

    {\displaystyle F_{1}(i)={\begin{cases}\omega _{i}&0\leq i\leq n-1\\\square &{\mbox{otherwise}}\end{cases}}}

  2. {\displaystyle C_{i}\to _{M}C_{i+1}},其中{\displaystyle i=1,2,\ldots ,k-1}
  3. {\displaystyle C_{k}}是接受格局。

则称{\displaystyle M} 接受字符串{\displaystyle \omega },且{\displaystyle C_{1},C_{2},\ldots ,C_{k}}称为图灵机{\displaystyle M}在输入{\displaystyle \omega }上的接受计算历史。同理,若{\displaystyle C_{k}}是拒绝格局,则称{\displaystyle M} 拒绝{\displaystyle \omega },且{\displaystyle C_{1},C_{2},\ldots ,C_{k}}称为图灵机{\displaystyle M}在输入{\displaystyle \omega }上的拒绝计算历史。{\displaystyle M}所接受的所有字符串的集合称为{\displaystyle M}语言,记作{\displaystyle L(M)}

图灵机的例子

设{\displaystyle M=(\{0,1,10,11\},\{0,1\},\{0,1,\square \},\delta ,0,,)}和{\displaystyle \delta :\{0,1,10,11\}\times \{0,1\}\to \{0,1,10,11\}\times \{0,1\}\times \{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 0000001110110000 9 1 0000001110110000
2 0 0000001110110000 10 1 0000001110110000
3 0 0000001110110000 11 10 0000001111110000
4 0 0000001110110000 12 10 0000001111110000
5 0 0000001110110000 13 10 0000001111110000
6 0 0000001110110000 14 11 0000001111110000
7 0 0000001110110000 15 0 0000001111100000(停机)
8 1 0000001110110000 -- 停机 --

通用图灵机

主条目:通用图灵机

对于任意一个图灵机,因为它的描述是有限的,因此我们总可以用某种方式将其编码为字符串。我们用{\displaystyle \langle M\rangle }表示图灵机{\displaystyle M}的编码。

我们可以构造出一个特殊的图灵机,它接受任意一个图灵机{\displaystyle M}的编码{\displaystyle \langle M\rangle },然后模拟{\displaystyle M}的运作,这样的图灵机称为通用图灵机(Universal Turing Machine)。现代电子计算机其实就是这样一种通用图灵机,它能接受一段描述其他图灵机的程序,并运行程序实现该程序所描述的算法。

图灵机的变体

图灵机有很多变种,但可以证明这些变种的计算能力都是等价的,即它们识别同样的语言类。证明两个计算模型{\displaystyle A}和{\displaystyle B}的计算能力等价的基本思想是:用{\displaystyle A}和{\displaystyle B}相互模拟,若{\displaystyle A}可模拟{\displaystyle B}且{\displaystyle B}可模拟{\displaystyle A},显然他们的计算能力等价。注意这里我们暂时不考虑计算的效率,只考虑计算的理论上“可行性”。

首先我们可以发现,改变图灵机的带字母表并不会改变其计算能力。例如我们可以限制图灵机的带字母表为{\displaystyle \{0,1\}},这并不会改变图灵机的计算能力,因为我们显然可以用带字母表为{\displaystyle \{0,1\}}的图灵机模拟带字母表为任意有限集合{\displaystyle \Gamma }的图灵机。

另一个要注意的是,如果我们允许图灵机的纸带两端都可以无限伸展,这并不能增加图灵机的计算能力,因为我们显然可以用只有纸带一端能无限伸展的图灵机来模拟这种纸带两端都可以无限伸展的图灵机。

如果我们允许图灵机的读写头在某一步保持原地不动,那也不会增加其计算能力,因为我们可以用向左移动一次再向右移动一次来代替在原地不动。

其它的常见图灵机变种包括:

图灵可计算性

其它等价的计算模型

除了图灵机以外,人们还发明了很多其它的计算模型。包括:

然而这些模型无一例外地都和图灵机的计算能力等价,因此邱奇图灵哥德尔 提出了著名的邱奇-图灵论题:一切直觉上能计算的函数都可用图灵机计算,反之亦然。

参考文献

外部链接

[隐藏]

自动机理论形式语言形式文法

 

乔姆斯基层级 文法 语言 极小自动机
类型 0 无限制 递归可枚举 图灵机
(无公用名) 递归 判定器
类型 1 上下文有关 上下文有关 线性有界
附标 附标 嵌套堆栈
Linear context-free rewriting systems etc. Mildly context-sensitive Thread automata
树-邻接 适度上下文有关 嵌入下推
类型 2 上下文无关 上下文无关 非确定下推
确定上下文无关 确定上下文无关 确定下推
Visibly pushdown Visibly pushdown Visibly pushdown
类型 3 正则 正则 有限
Star-free Counter-free (with aperiodic finite monoid)

 

每个语言或文法范畴都是其直接上面的范畴的真子集 Any automaton and any grammar in each category has an equivalent automaton or grammar in the category directly above it.
规范控制

分类

时间: 2024-08-19 00:21:11

图灵机的相关文章

图灵机、冯诺依曼结构、哈佛结构

开头声明:仅为了学习经典知识,不敢妄评科学家的伟大成就. 图灵机:将计算过程分解成控制程序(程序)和输入数据(带有数字的纸带)两个部分,控制程序根据:自身状态 + 输入数据 做出相应动作,并从理论上证明了一个问题是可被解的(可以进入停机状态).整体上看,就是把一个计算问题分解成了非常简单.容易实现的过程,并且证明了正确性. 冯诺依曼结构:是对图灵机理论的具体工程设计(这个评价有争议).该结构中包括:存储器.控制器.运算器.输入和输出. 把程序和数据都存储在存储器中,控制器读取指令(程序).解析执

2292 图灵机游戏

2292 图灵机游戏 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 黄金 Gold 题目描述 Description [Shadow 1]第二题 Shadow最近知道了图灵机是什么(Shadow:就是一行格子和一个机器头移来移去的呗!),于是他突发奇想,创造了一个新游戏——“图灵机游戏”(Shadow:好听吧?). 游戏规则如下: 在一条长长的纸上有N个格子,每个格子上都有一个数,第i格的数记为Ai,机器头刚开始在第1格.这个游戏有两个操作: 1.如果现在在第i格,则可以移动机

图灵机模型与计算机

图灵机模型与计算机(一) 一.图灵机的构成 1.一条无限长的纸带(tape).纸带被划分为一个接一个的小格子,每个格子上包含一个来自有限字幕的符号,字母表中有一个特殊的符号,就是一个空格,它表示空白.纸带上的格子从左到右依次被编号为0,1,2...,右端无限延伸.2.一个读写头(head)可以在纸带上左右移动,它能读出当前所指的格子上的符号,并能改变当前格子上的符号.3.一套控制规则(table),它根据当前机器所处的状态以及当前读写头所指的格子上的符号来确定读写头下一步的动作,并改变状态寄存器

图灵机简介

------来自科学松鼠会------- 希尔伯特问题三: 数学是可判定的吗?也就是说,能够找到一种方法,仅仅通过机械化的计算,就能判定某个数学陈述是对是错?数学证明能否机械化? 图灵机的示例.绿点指示处为当前状态,每条规则的4项分别是:当前位置读入的字符.当前位置写入的字符.纸带的移动方向.将要转移到的状态. 图灵机的结构非常简单,它由两部分组成:一个读写头,还有一条两边无限延长的纸带,纸带被划分为小格,每格中只能有0和1两种符号.读写头的限制则稍微宽松一些,虽然每次只能对着纸带上的一个格子,

【codevs】2292图灵机游戏

题 Shadow最近知道了图灵机是什么(Shadow:就是一行格子和一个机器头移来移去的呗!),于是他突发奇想,创造了一个新游戏——“图灵机游戏”(Shadow:好听吧?). 游戏规则如下: 在一条长长的纸上有N个格子,每个格子上都有一个数,第i格的数记为Ai,机器头刚开始在第1格.这个游戏有两个操作: 1.如果现在在第i格,则可以移动机器头到第Ai格: 2.把某个Ai减少或增加1. 然而,fotile96看了之后却不以为然.“嗯,你挑战一下用最少次数使机器头到达第N格吧,这样好玩些……” 现在

关于TCS中的图灵机模型和神谕机

http://songshuhui.net/archives/92392#comment-645803 1 对于普通的图灵机而言,停机问题是不可判定的,这早已被证明.而图灵发现,即使将证明中的所有"图灵机"三个字都换成"带有'数论问题'谕示的谕示机",其他部分一字不易,证明依然成立!也就是说,就像普通图灵机不能解决关于自身的停机问题,谕示机也不能解决关于自身的停机问题,无论它的谕示有多么强大. --?从你的说法来看,这个证明感觉是有缺陷的:既然Oracle机器实际不

神经网络图灵机(Neural Turing Machines, NTM)

近期,Google Deep Mind团队提出了一个机器学习模型,并起了一个特别高大上的名字:神经网络图灵机,我为大家翻译了这篇文章,翻译得不是特别好,有些语句没读明白,欢迎大家批评指正  原论文出处:http://arxiv.org/pdf/1410.5401v1.pdf. 版权所有,禁止转载. 神经网络图灵机 Alex Graves [email protected]Greg Wayne [email protected]Ivo Danihelka [email protected] Goo

计算复杂性学习2-多带图灵机模拟

上一节用单带图灵机模拟了PAL,其实可以用一种称为多带的图灵机来模拟,就像第一篇文章中介绍的那样,多带图灵机是具有多个读写头的图灵机. 一个k带图灵机可以定义为一个四元组M=(K,Σ,δ,s),其中K,Σ,δ和普通图灵机一样,δ是一个必须反映多带复杂的程序.直观地,和以前一样,δ决定下一个状态,也决定每一串的覆写字符,并通过当前状态和每一根带上的当前字符决定读写头的方向.形式化地,δ是从K×Σ?到(K∪{h,"yes","no"})×(Σ×{←,→,?})k的函数.

【随想】关于图灵机

图灵机由四个部分组成,输入集合I,输出集合O,内部状态M,固定的程序f,O=f(I,M),即根据输入和内部状态在固定程序的指导得到输出 那么人能不能也被这样抽象呢?显然,输入状态集合就是你所处的环境中能够看到.听到.闻到.感觉到的所有的一切,可能的输出集合就是你的每一言每一行,以及你能够表达出来的所有表情动作.内部状态集合则要复杂得多,包含身体状态,情绪情感,思维感知与记忆. 人的自由意志又是什么,可以改变那段"固定的程序"吗?还是说,我们也像图灵机一样在同样的输入和内部状态下会输出相