CMP设计分享 http://blog.sciencenet.cn/u/accsys 没有逆向思维就没有科技原创。 不自信是科技创新的大敌。

博文

一个能够让你明白图灵机的例子

已有 52062 次阅读 2014-11-3 14:58 |个人分类:计算机核|系统分类:科研笔记| 图灵机, 状态转移函数

一个能够让你明白图灵机的例子

姜咏江

 

    读了图灵的文章,根据我的理解,设计个逻辑运算的例子:

   设M=Q,Σ,Γ,δ,q0,qaccept,qreject)其中Σ={01+*,!},

Γ={01+*,!}。Γ的书写格式为“!x”“+xy”“*xy”并要以“□□□□”间隔。

    表格中的LR表示读写头左移一格或右移一格。每个字符占用一格。运算结束以后再读入一个空格,让读写头晃一下,再进入开始状态做下面的运算。

   从表 2‑1我们可以看到,在此表中图灵机的状态集合

Q={x,y,z,z0,z1,f,f0,f1,end,erro},其中x是初始状态,end是运算结束状态,erro是停机拒绝状态。

    表中symbol是读写头每次读入的内容,它与m-config 一起构成了定义域元素,而经过操作行为Behaviour,其中包括移动读写头和输出(打印)数据,而转化为最终状态Final m-config。这一前一后的状态转换,形成了有序的运算操作,最终在不出现错误的情况下,得到运算的结果。

   注意,operations 一栏p0p1p*分别表示读写头往当前格子上写01*字符,移动RL与它们排在一起,表明了动作同时,也标明了先后顺序。

21  图灵机状态变化表

Configuration

Behaviour

解释

m-config.

symbol

operations

Final m-config.

x

R

x

x=q0x是接受开始状态。

!

R

y

*

R

z

+

0

 

1

R

R,P*,R,P*,R

R,P*,R,P*,R

f

erro

 

erro

Y

逻辑非)

R,P*,R,P*,R

erro

Erro是拒绝状态

0

R,p1

end

接受

1

R,p0

end

!

R,P*,R,P*,R

erro

拒绝

*

R,P*,R,P*,R

erro

+

R,P*,R,P*,R

erro

Z

(逻辑与)

R,P*,R,P*,R

erro

0

R

Z0

接受

1

R

Z1

!

R,P*,R,P*,R

erro

拒绝

*

R,P*,R,P*,R

erro

+

R,P*,R,P*,R

erro

Z0

(逻辑与)

,P*,R,P*,R

erro

0

R, p0

end

接受

1

R,p0

end

!

R,P*,R,P*,R

erro

拒绝

*

R,P*,R,P*,R

Erro

+

R,P*,R,P*,R

Erro

Z1

(逻辑与)

R,P*,R,P*,R

erro

0

R, p0

end

接受

1

R,p1

end

!

R,P*,R,P*,R

erro

拒绝

*

R,P*,R,P*,R

Erro

+

R,P*,R,P*,R

Erro

f

(逻辑或)

R,P*,R,P*,R

erro

0

R

f0

接受

1

R

f1

!

R,P*,R,P*,R

erro

拒绝

*

R,P*,R,P*,R

Erro

+

R,P*,R,P*,R

Erro

f0

(逻辑或)

R,P*,R,P*,R

erro

0

R, p0

end

接受

1

R,p1

end

!

R,P*,R,P*,R

erro

拒绝

*

R,P*,R,P*,R

Erro

+

R,P*,R,P*,R

Erro

f1

(逻辑或)

R,P*,R,P*,R

erro

0

R,P1

end

接受

1

R,P1

end

!

R,P*,R,P*,R

erro

拒绝

*

R,P*,R,P*,R

erro

+

R,P*,R,P*,R

erro

end

(正常结束)

R,L,R

x

让读写头晃动表达继续逻辑运算

0

 

erro

拒绝

1

 

erro

!

 

erro

*

 

erro

+

 

erro

erro

Any way

 

qreject

停机

 从表 2‑1我们不难看出,影响下一个状态出现的每一个过程都与原来的状态

Qm-config)和输入数据Symbol(属于集合Γ中元素)有关。经过operations操作,才到达了新的状态Q'Final m-config)。显然这种确定的映射可以用Q'=δ(q,γ)来表示,q∈Qγ∈Γ。表 2‑1就是具体的映射Q'=δ(q,γ)。

    图灵机的qaccept在这个例子中就是end,而qrejet就是erro

    特别要说明,当我们将Q、Σ和Γ中的元素也都用二进制数表示的时候,Q'=δ(q,γ)就是函数。

    下面添加详细的解释。

例如,我们要计算逻辑值10的与运算和或运算结果。先可以在带子上安格写入:

                            □□□□*10□□□□+10□□□□

这里要用4个空格区分两组运算,这是设计的规定。初始化时读写头定在最左边的位置。开始状态是x,与读写头读入的一个空格“组成一组“x”,向右在operations栏有R,这是让读写头右移一格后,进入了下一个状态,从表上看,这种情况的下一个状态仍然是x。这样连续进行4步,在第5步,读写头将读到“*”,根据表中“x*”状态的规定,现将读写头右移,并决定出状态“z”。第6步要到左边状态栏找到“z”,这时读写头会读出“1”。依据“z 1”向右见到“R”,这是将读写头右移一位的控制,并在下一个状态栏找到状态z1。回头再到左边栏找到“z1”,这时读写头将读到“0”。第7步,要依据“z10”一行的操作“RP0”现将读写头右移一位,然后在空格位置写上“0”,并进入到“end”状态。第8步,左面的“end”状态若有读写头读进空格,则依“end”行,见操作项是“R,L,R”,这是晃动读写头,表示运算结束,前面写出的“0”就是10做与运算的结果。如果读写头读入的是错误的数据,会连续打印出2个星号“**”表明带子上的输入有误,那么就会进入“erro”状态,拒绝继续执行,同时停机。

不是错误的情况,仍然可以让读写头继续读。因为得出结果之后由“end”状态确定的下一个状态是x,因而又回到了开始运行的情况。连续地3次读到空格后,就可以读到“+”,按着与运算的查找方法,就可以最后得出10做或运算的结果了。

2014-11-3

 



https://blog.sciencenet.cn/blog-340399-840773.html

上一篇:CPU设计真值表
下一篇:悖论的可笑,用比较公理说事
收藏 IP: 124.64.84.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (3 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-17 22:15

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部