什么是图灵机、它是怎么来的、它能干什么
图灵机英国数学家图灵于1993年提出的一种将人的计算行为抽象化的数学逻辑机,是一种计算模型。它可以做任何有限逻辑数学运算。
图灵机就是一台可以代替人进行计算的机器!
图灵的基本思想
图灵的基本思想是用机器模拟人们用纸笔进行数学运算的过程,他把这样的过程看作下列两种简单的动作:
- 在纸上写上或擦除某个符号;
- 把注意力从纸的一处移动到另一处;
图灵机的组成
为了模拟人的这种运算过程,图灵构造出一台假想的机器(图灵机),该机器由以下几部分组成:
-
一条无限长的纸带TAPE。纸带被划分为一个接一个的小格子,每个格子上包含一个符号。
-
一个读写头HEAD。它可以在纸带上左右移动,能读出当前所指的格子上的符号,并能改变它。
-
一套控制规则TABLE。控制规则:它根据当前机器所处的状态以及当前读写头所指的格子上的符号来确定读写头下一步的动作,并改变状态寄存器的值,令机器进入一个新的状态。
按以下顺序告知图灵机命令:
1. 写入(替换)或擦除当前符号;
2. 移动HEAD,'L'向左,'R'向右,'N'不移动;
3. 保持当前状态或者转到另一状态
-
一个状态寄存器。它用来保存图灵机当前所处的状态。图灵机的所有可能状态的数目是有限的,并且有一个特殊的状态,称为停机状态。
注意这个机器的每一部分都是有限的,但它有一个潜在的无限长的纸带,因此这种机器只是一个理想的设备。图灵认为这样的一台机器就能模拟人类所能进行的任何计算过程。
图灵机是如何工作的
其实我们在 图灵机的组成 中,我们也提到了。
接下来,我找一段程序,看看图灵机到底是怎么工作的。
图灵机指令
指令是 ‘<current state> <current symbol> <new symbol> <direction> <new state>
’ 组成的的元组。
比如:1 0 1 r 2
1 0 1 r 2
<current state> <current symbol> <new symbol> <direction> <new state>
当前机器状态 读写头指向的纸带格子上的符号 要写入的新符号 移动读写头 新的机器状态
动作:当current state为1并且current symbol为0,会定位到这一条指令,从而控制机器:将new symbol(1)替换current symbol(0),当前纸带格子上就是1,根据direction向右移动读写头,并将new state作为机器新的状态。这样这么一条指令就完成了,接下来current state=2,根据移动读写头后指向的纸带格子符号,来定位指令,再进行上述的动作。
两个二进制数的加法程序
; Binary addition - adds two binary numbers
; Input: two binary numbers, separated by a single space, eg '10 101'
; 注意:
; _ 代表空字符
; * 代表通配符
; l 向左移动
; r 向右移动
; x 处理过的位0会用x代替(暂时用x作为记号,后面会进行还原)
; y 处理过的位1会用y代替(暂时用y作为记号,后面会进行还原)
; halt 停机
;
; 看到这里,大家打开文章末尾的可视化网站,一探究竟吧
; 看到这里,大家打开文章末尾的可视化网站,一探究竟吧
; 看到这里,大家打开文章末尾的可视化网站,一探究竟吧
0 _ _ r 1
0 * * r 0
1 _ _ l 2
1 * * r 1
2 0 _ l 3x
2 1 _ l 3y
2 _ _ l 7
3x _ _ l 4x
3x * * l 3x
3y _ _ l 4y
3y * * l 3y
4x 0 x r 0
4x 1 y r 0
4x _ x r 0
4x * * l 4x ; skip the x/y's
4y 0 1 * 5
4y 1 0 l 4y
4y _ 1 * 5
4y * * l 4y ; skip the x/y's
5 x x l 6
5 y y l 6
5 _ _ l 6
5 * * r 5
6 0 x r 0
6 1 y r 0
7 x 0 l 7
7 y 1 l 7
7 _ _ r halt
7 * * l 7
结尾
下面,给大家一个可视化网站,可以模拟图灵机执行。
Turing machine simulator