CSDN博客

img PercyLee

有趣的算法世界---算法之根(2)

发表于2003/8/2 18:42:00  1548人阅读

 

很高兴又和大家见面,我们继续我们的有趣的算法世界之旅.

既然文章的题目为算法之根”,当然我希望能带您来看看算法世界的本源------开始形式化的地方.上次提到了丘奇-图灵论题:

 

算法的直觉概念               等于                 图灵机算法

这是我们本篇文章的根本.可是匆匆的,我们还没有对这个图灵机算法详细解说,就结束了上次之旅.这次我们详细的继续上次的风景.

宽泛的讲,图灵机是个代数结构(或代数系统).虽然经过上次,您也知道了什么是代数结构,可是,咱们先不马上就说图灵机的定义.因为上次还遗留个题目呢,那个自动窗的问题.

分析一下,这个问题可不难哦.

首先您注意到,窗子时刻只能处于两个状态之一: ! 它改变状态的途径,也就是收集环境信息,再根据一定的控制变换决定是保持现在的状态还是改变它.这个控制变换是最为关键的,我们可以把它表示为一张表,如果假设:

a: 白天 天气允许 ,

b: 黑夜 天气不允许 .

则表为:

                 |   a    |    b       

           |        

           |        

由此您不难想象自动窗工作的原理.我们把它描述如下:

       q为状态信号,取值为”,x为环境变量,取值为ab(a,b定义如上).

       (1) 置初始状态 q←窗子的状态(关或开);

       (2) x←获得环境变量;

       (3) 如果 xa,

            (3.1) 如果 q为关,发送信号, q←开,(2);

            (3.2) 如果 q为开,(2);

       (4) 如果 xb,

            (4.1) 如果 q为关,(2);

            (4.2) 如果 q为开,发送信号, q←关,(2).

 

之所以讨论这个问题,因为它也是个模型,有穷自动机模型.它也是用来计算的,虽然它的能力远远不如图灵机;考虑到它的状态只有有限个(比如自动窗中),显然它是做不了计算机的模型的.

尽管如此,在编译原理的文法分析中,在很多单片机控制的电子产品中,它是很有所作为的.

在讨论它时,更多的是利用它的状态图,比如本例子中的状态图为:

 

同样,如果把它形式化,您也可以把它看作一种代数结构(想一想,把环境变量ab看作运算).但我们不再做这项工作,我们来看更为强大的模型:图灵机.

图灵机与有穷自动机是相似的,但图灵机有一个无限的存储.它能做实际计算机能做的所有事情.作为计算机的通用模型,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)        q0Q是起始状态.

6)        q1Q是接受状态.

7)        q2Q是拒绝状态, q2q1.

 

图灵机的计算,就是这样在一定规则下的读,写与移动,规则即转移函数δ .其他形式的图灵机还有很多,例如有多个带子的或非确定性的.他们被称为图灵机的变形.而原来的普通图灵机,都是这个样子:

 

多带图灵机,和普通图灵机相似,只是有多个带子,每个带子都有自己的读写头,用于读和写.如下图:

 

开始时,输入只出现在第一个带子上,其他的带子都是空白.但转移函数允许所有的读写头同时进行读,写和移动.

看起来或许多带图灵机的计算能力比普通图灵机的能力要强,但恰非如此:它们的计算能力是等价的!这可以证明.但是,效率却未必哦.

非确定性的图灵机,非常容易理解,在计算的任何时刻,机器可以在多种可能性中选择一种继续进行.它的计算是一课树,不同的分枝对应着机器不同的可能性.如果某个计算分枝导致接受状态,则接受该输入.与多带图灵机相同的是,它的计算能力与普通图灵机也是一样的.证明过程,您可以去看一本计算理论方面的书.

 

至此,您是否理解了什么是图灵机?如果是的话,则请您用您带的照相机(眼睛即可),给那个丘奇-图灵论题照一次像(永远保存在您的心底),这是我们这趟旅行最可珍藏的风景之一.

 

本篇文章的另一部分为:

http://www.csdn.net/Develop/read_article.asp?id=20168

阅读全文
0 0

相关文章推荐

img
取 消
img