很高兴又和大家见面,我们继续我们的”有趣的算法世界”之旅.
既然文章的题目为”算法之根”,当然我希望能带您来看看算法世界的本源------开始形式化的地方.上次提到了丘奇-图灵论题:
算法的直觉概念 等于 图灵机算法
这是我们本篇文章的根本.可是匆匆的,我们还没有对这个”图灵机算法”详细解说,就结束了上次之旅.这次我们详细的继续上次的风景.
宽泛的讲,图灵机是个代数结构(或代数系统).虽然经过上次,您也知道了什么是代数结构,可是,咱们先不马上就说图灵机的定义.因为上次还遗留个题目呢,那个自动窗的问题.
分析一下,这个问题可不难哦.
首先您注意到,窗子时刻只能处于两个状态之一: 关 或 开! 它改变状态的途径,也就是收集环境信息,再根据一定的控制变换决定是保持现在的状态还是改变它.这个控制变换是最为关键的,我们可以把它表示为一张表,如果假设:
a: 白天 且 天气允许 ,
b: 黑夜 或 天气不允许 .
则表为:
| a | b
关 | 开 关
开 | 开 关
由此您不难想象自动窗工作的原理.我们把它描述如下:
q为状态信号,取值为”关”或”开”,x为环境变量,取值为a或b(a,b定义如上).
(1) 置初始状态 q←窗子的状态(关或开);
(2) x←获得环境变量;
(3) 如果 x为a,做
(3.1) 如果 q为关,发送”开”信号, q←开,转(2);
(3.2) 如果 q为开,转(2);
(4) 如果 x为b,做
(4.1) 如果 q为关,转(2);
(4.2) 如果 q为开,发送”关”信号, q←关,转(2).
之所以讨论这个问题,因为它也是个模型,有穷自动机模型.它也是用来计算的,虽然它的能力远远不如图灵机;考虑到它的状态只有有限个(比如自动窗中),显然它是做不了计算机的模型的.
尽管如此,在编译原理的文法分析中,在很多单片机控制的电子产品中,它是很有所作为的.
在讨论它时,更多的是利用它的状态图,比如本例子中的状态图为:
同样,如果把它形式化,您也可以把它看作一种代数结构(想一想,把环境变量a和b看作运算).但我们不再做这项工作,我们来看更为强大的模型:图灵机.
图灵机与有穷自动机是相似的,但图灵机有一个无限的存储.它能做实际计算机能做的所有事情.作为计算机的通用模型,在1936年由图灵提出.至今我们还没有突破此模型.(虽然我是如此的希望在有生之年看到改进的计算机基本模型:)
图灵机模型用一个无限长的带子作为无限存储,它还有一个读写头,这个读写头能在带子上读,写和移动.如下图:
开始时,带子上只有输入串,其它地方都是空的.当它需要保存信息时,读写头就把信息写在带子上.为了读某个输入或写下的信息,带子可能将读写头往回移动到这个信息所在的地方.这样读,写和移动,机器不停的计算,直到产生输出为止.机器实现设置了两种状态: 接受或拒绝 状态.如果进入这两种状态,就产生输出 接受或拒绝;否则机器就继续执行下去,永不停机.
我们来看个图灵机的例子,呵呵,或许只有如此您才认可丽人魅力呢.
e.g. 玩一个小游戏,用您的数字小键盘0键随意输入一个串,如果: 0个数为2的方幂(即为2^n),那么您将被打一次手心. J
则我们可以描述一个图灵机TM M,它将胜任这项监测工作(而打手心的事由我负责J).
M=” 对输入的字符串 w:
1) 从左往右扫描整个带子,隔一个消去一个0.
2) 如果在第一步之后,带子上只剩下唯一的一个0,则接受.
3) 如果在第一步之后,带子上包含不止一个0,并且0的个数是奇数,则拒绝.
4) 让读写头回到带子的最左端.
5) 转到第一步. “
这即是一个图灵机,而且您可以证明M中的算法是可以达到要求的.当然,为了易于理解,我们给出的是图灵机算法的高层描述.图灵机有它的形式定义,也可以用状态图来描述,只是那将是相当的麻烦的.我们只给出一般的图灵机的形式定义.
如果L表示读写头往左移动一个字符,R往右.
一个图灵机是一个7元组(Q,∑,Γ,δ,q0,q1,q2),其中Q,∑,Γ都是有穷集合,并且
1) Q 是状态集.
2) ∑是输入字母表,不包括特殊空白符号︺.
3) Γ 是带字母表,其中: ︺∈Γ,∑是Γ的子集.
4) δ: Q×Γ→Q×Γ×{L,R}是转移函数.
5) q0∈Q是起始状态.
6) q1∈Q是接受状态.
7) q2∈Q是拒绝状态,且 q2≠q1.
图灵机的计算,就是这样在一定规则下的读,写与移动,规则即转移函数δ .其他形式的图灵机还有很多,例如有多个带子的或非确定性的.他们被称为图灵机的变形.而原来的普通图灵机,都是这个样子:
多带图灵机,和普通图灵机相似,只是有多个带子,每个带子都有自己的读写头,用于读和写.如下图:
开始时,输入只出现在第一个带子上,其他的带子都是空白.但转移函数允许所有的读写头同时进行读,写和移动.
看起来或许多带图灵机的计算能力比普通图灵机的能力要强,但恰非如此:它们的计算能力是等价的!这可以证明.但是,效率却未必哦.
非确定性的图灵机,非常容易理解,在计算的任何时刻,机器可以在多种可能性中选择一种继续进行.它的计算是一课树,不同的分枝对应着机器不同的可能性.如果某个计算分枝导致接受状态,则接受该输入.与多带图灵机相同的是,它的计算能力与普通图灵机也是一样的.证明过程,您可以去看一本计算理论方面的书.
至此,您是否理解了什么是图灵机?如果是的话,则请您用您带的照相机(眼睛即可),给那个丘奇-图灵论题照一次像(永远保存在您的心底),这是我们这趟旅行最可珍藏的风景之一.
本篇文章的另一部分为: