打字猴:1.70106568e+09
1701065680
1701065681 读写头开始处于特定的开始状态,并停在特定的格子上。每一步,读写头读取当前格子中的符号。然后读写头根据读取的符号和读写头的当前状态按照规则动作。规则决定读写头在当前格子中写入什么符号(替换当前符号);读写头是向右还是向左移动或是停止不动;以及读写头的新状态是什么。如果读写头进入停机状态,机器就会停下来。
1701065682
1701065683 图灵机的输入是机器启动之前写在带子上的符号集合。输出则是停机之后留在带子上的符号集。
1701065684
1701065685 复杂 [:1701064740]
1701065686 一个简单的例子
1701065687
1701065688 用一个简单的例子解释一下。为简便起见,假设带子上的符号只有0和1(同真正的计算机一样),而空符号则指格子中为空。我们设计一个图灵机,它读取的带子上有两个0,中间夹着一串1(例如,011110),然后判断1的个数是奇数还是偶数。如果是偶数,机器最后就在带子上输出一个0(其他格子为空)。如果是奇数,最后就在带子上输出一个1(其他格子为空)。假设带子的输入总是刚好有两个0,中间夹着零个或多个1,其他的格子都为空。
1701065689
1701065690 我们的图灵机的读写头得有4种可能状态:启动、偶数、奇数和停机。读写头最初停在最左边的0,处于启动状态。我们编写规则让读写头往右移动,每次一格,用空格替换遇到的0和1。如果读写头在当前格子中读到1,读写头就变成奇数状态,并往右移动一格。如果再次读到1,就变成偶数状态,再往右移动一格。就这样读到1就在偶数和奇数状态之间切换,一直往下。
1701065691
1701065692 如果读写头读到0,输入就走完了,这时所处的状态(奇数或偶数)就是想要的结果。然后机器根据状态在当前格子里写1或0,并变成停机状态。
1701065693
1701065694 下面是读写头实现这个算法的规则:
1701065695
1701065696 1.如果处于启动状态,当前格子为0,就变成偶数状态,把0擦掉,并往右移动一格。
1701065697
1701065698 2.如果处于偶数状态,当前格子为1,就变为奇数状态,把1擦掉,并往右移动一格。
1701065699
1701065700 3.如果处于奇数状态,当前格子为1,就变成偶数状态,把1擦掉,并往右移动一格。
1701065701
1701065702 4.如果处于奇数状态,当前格子为0,就在格子中写入1,并变成停机状态。
1701065703
1701065704 5.如果处于偶数状态,当前格子为0,就在格子中写入0,并变成停机状态。
1701065705
1701065706 首先在带子上写好输入,然后让图灵机根据规则顺序处理输入,这个过程被称为“根据输入运行图灵机”。
1701065707
1701065708 复杂 [:1701064741]
1701065709 定义为图灵机的明确程序
1701065710
1701065711 在上面的例子中,如果输入的格式正确,不管具体的输入是什么(包括一个1也没有的情况,这时视为有偶数个1),根据输入运行图灵机都能确保得出正确的输出。虽然这有点小儿科,但你还是得承认这是一个解决奇偶问题的“明确程序”,每一步都很明确。图灵的第一个目标就是落实明确程序的概念。其中的思想是,对于特定的问题,你可以通过设计一个解决这个问题的图灵机来构造明确程序。这样“明确程序”就定义为图灵机,虽然目前还有些模糊不清。
1701065712
1701065713 在对此进行思考时,图灵并没有真的去建造一台机器(虽然后来他这样做了)。他对图灵机的所有思考都是通过纸和笔完成的。
1701065714
1701065715 复杂 [:1701064742]
1701065716 通用图灵机
1701065717
1701065718 接下来,图灵又证明了图灵机的一个神奇特性:人们可以设计出一种通用图灵机(称之为U),它可以模拟任何图灵机的运作。U在模拟图灵机M处理输入I时,U处理的带子上不仅包含编码输入I的序列,还包含编码图灵机M的序列。你可能会奇怪图灵机M也能被编码,不过这其实不难。首先,所有规则(同前面那五条差不多)都可以简写成下面这种形式:
1701065719
1701065720 —当前状态—当前符号—新状态—新符号—动作—
1701065721
1701065722 这样前面的规则1就表示成:
1701065723
1701065724 —启动—0—偶数—空—右移—
1701065725
1701065726 (分隔符“—”不是必需的,只是方便我们读规则。)然后用0/1序列对规则进行编码:例如,启动=000,偶数=001,奇数=010,停机=100。类似的,符号也能编码成0/1序列:例如,符号“0”=000,符号“1”=001,空符号=100。0/1序列可以随意设定,只要与符号一一对应就行。状态和符号——比如启动和“0”——之间使用的0/1序列可以相同;因为我们知道规则的结构形式,据此就能分析出编码的内容。
1701065727
1701065728 类似的,也可对动作进行编码,“右移”对应000,“左移”对应111。将分隔符“—”编码成111。这样整条规则都可以编成0/1序列了。编码出来的规则1是这个样子:
1701065729
[ 上一页 ]  [ :1.70106568e+09 ]  [ 下一页 ]