内容提要
什么是图灵机?
一个简单的例子
一个简单的程序
机器状态
有限状态机
什么是图灵机?
图灵机是一个虚拟的机器,由数学家阿兰·图灵1936年提出来的,尽管这个机器很简单,但它可以模拟计算机的任何算法,无论这个算法有多复杂。
上面是一个图灵机的简单示意图。假设有一个无穷的纸带,纸带就像一个存储器一样。纸带上面的每个格子是空白的,但是可以读写数据,在这个例子里,机器只能写0,1,或者什么也不写。这个机器就是包含3个信号的图灵机。
这个机器有一个探头,这个头可以移动到每一个空格上,用这个头,机器可以有3个基本操作。
1、读空格的数据
2、编辑数据,可以是写一个新的数据,可以是擦除数据
3、移动纸带向左或者向右,这样机器可以读或者编辑旁边的格子
一个简单的例子
首先,黑色加粗部分代表探头所指的部分,我们写一个1:
然后,我们把纸带向左移动一格:
写1到新的格子里面
然后把带子向左移动一格,并写一个0
一个简单的程序
现在纸带上面被写入了110,现在我们尝试着把1转换成0,0转换成1。这叫位反转。因为1和0是字节中的比特,可以通过如下指令让图灵机完成操作。利用机器的读的能力来自己决定它下一个操作,这个指令可以写一个简单程序。
指令如下
信息读取 写指令 移动指令
空 不写 不动‘
0 1 纸带移动到右边
1 0 纸带移动到右边
机器首先会读取头下面的数据,写一个新数据,然后根据指令移动纸带向左或者向右,然后继续重复重复这个过程。
让我们看看这个程序如何操作这个纸带的,首先探头放在0的位置:
然后我们把数据0改为1,并把纸带往右边移动一格
现在探头读到的是1,所以我们写0并把纸带向右移动一格
同样的,读到数据1,探头把它改写为0。
最后读到一个空格,此时这个探头不写任何数据,纸带也不动,但是探头会一直不停的重复读这个格子里的数据信息。
事实上,这个程序是不完整的。这个机器会一直重复执行命令,那应该如何停止呢?那么我们需要加一个机器状态指令。
机器状态
状态 数据 写 移动 下一个状态
0 空白 不写 不动 停止状态
0 1 纸带向右 状态0
1 0 纸带向右 状态0
我们把之前的指令分配给机器的状态,这样,当机器在某个具体的状态的时候,它就会执行相应的指令。每一个指令完成后,我们仍然让机器进入下一个状态。在这个例子中,机器会一直指向状态0,然后重复读—写—移动的操作,当读到一个空白信息时,机器会直接进入停止状态,程序结束运行。
有限状态机
尽管看起来有点傻,但是我们现在再给里面加一个状态,把现在的001变回成110。
下面的程序斜体字部分是更改过的语言。现在这个图灵机有2个状态,3个信号。是一个有限状态机。
状态 数据 写 移动 下一个状态
0 空白 写空白 纸带向左 状态1
0 1 纸带向右 状态0
1 0 纸带向右 状态0
1 空白 写空白 纸带向右 停止状态
0 1 纸带向左 状态1
1 0 纸带向左 状态1
上面这个程序中,当读到一个空白信息的时候,我们让纸带向左而不是停止,这样我们就可以继续做位反转操作。
下面,我们把字节又反转回来,纸带向左。
最后,读到一个空白,纸带向右,程序停止。
只要给程序添加足够多的状态,我们可以让图灵机有更多的功能,理论上可以实现现代计算机能做的一切复杂算法。
本文由鲶鱼编译自Computer laboratory of university of Cambridge
如需转载,请联系鲶鱼