信息技术课程 | 怎样动手“造”一台图灵机
在基础教育阶段的信息技术教材中,如果是回顾计算机发展历程的章节,常会提到图灵和他的图灵机,教材编写者通常会强调图灵机的重要意义,但对图灵机本身的描述却不多,涉及文字也很少,恐怕最多只能让人知道一个人的名字再加上一种机器的名称,更何况图灵在论文中提到的图灵机是一个理论上的模型,他没有亲自把图灵机造出来(对于他的论文来说,也没有真正制作出来的必要)。而现在,人们也并不真正需要按图灵构想的原样实现一台图灵机来当作计算工具使用,一个没有实物对应的抽象模型,是比较难让普通初学者产生深入探索的兴趣的,也就更难让初学者自发产生动力,去思考为什么图灵机对于后来通用的电子计算机发展有着非常重要的意义。
如果只有40分钟的课时来介绍一下图灵机,那么应该怎样充分利用好这短暂的时间呢?其实只要40分钟,就可以将一台图灵机的搭建过程大致演示出来。这里讲的并不是用程序来模拟图灵机,而是怎样用基础的电子元件来搭建一台图灵机,因为,当前绝大部分程序设计语言都与图灵等价,用程序语言来模拟图灵机,就体现不出“造”的过程。为了使图灵机的工作过程更生动直观地展现出来,笔者“请”来一群变色龙来做游戏,游戏过程实际上就对应着图灵机的一般工作过程。
一只大变色龙和一只小变色龙的相遇(10分钟)
想象一个有趣的场景,假设大变色龙A可变两种颜色——绿色和黄色,小变色龙B也可变两种颜色——绿色和黄色(如图1)。当变色龙A遇到变色龙B时,则总共可能出现四种情况:绿色—绿色;绿色—黄色;黄色—绿色;黄色—黄色。
图1
现实中变色龙的变色能力很强,还能变出其他颜色来,不过这里为了简化问题描述,就假设它们只能变两种颜色。
既然变色龙具有变色的能力,那么,当两只变色龙相遇后,它们各自的颜色有可能会变,也有可能不变。假如有一个能力强大的变色龙驯兽师,能够让两只变色龙相遇后,按驯兽师预先设置的规则来改变,或不改变颜色。例如,对于大变色龙A,它从驯兽师那里得到的命令是这样的:如果自己(A)是绿色,对方B也是绿色,那么,下一时刻就仍然是绿色,考虑相遇后存在四种不同的情况,很容易理解下表中的规则。
至于小变色龙B,它从驯兽师那里得到的命令如下表所示。
至于为什么要按这样的规律来变色,先暂且看成是驯兽师的个人喜好,实际上,驯兽师制订其他规则也是可以的。
想象一下,绿色A遇见绿色B,变化之后,下一时刻A自己不变,而B变了,于是就变成了绿色A和黄色B,如果这两只变色龙还要继续玩“瞪一眼再变色”的游戏,那再下一时刻就变成了黄A和黄B,再下一时刻变成黄A和绿B,再下一时刻变为黄A和黄B,之后它们就总在最后两种状态中来回切换,似乎可以用来当作开派对时的绚彩LED了(如图2)。
图2
一只大变色龙和一群小变色龙的相遇(10分钟)
假设大变色龙A遭遇的是一大群小变色龙B1、B2、B3等,除了相互瞪眼、变色之外,大变色龙还会在变色后改变自己瞪眼的对象,考虑到变色龙通常行动缓慢,大变色龙A只是移动了一个身位,要么向左移,要么向右移,假设移动的方向也受到了驯兽师的控制,规则如下表所示。
可以将大变色龙A的变化、小变色龙B的变化以及大变色龙A变色完成后的移动用一张表格来表示(如下表)。
可以看到,两只变色龙相遇后,就按顺序发生这三个事件,并且整套动作完成后,又开始新的瞪眼、变色、移位的过程。下面举例说明变色龙相互间变化的四个时刻的状态,就好像是四格漫画(如图3)。
图3
变化过程当然没有结束,如果小变色龙B的数量足够多的话,那么大变色龙A就会在小变色龙的序列中来回穿梭,忙着改变自己和对方的颜色,状态变化是相当复杂的。其实,如果世界上真的有这种被驯化的变色龙,人们就可以拿这些变色龙的复杂变化当成某种计算工具来使用,这些变色龙展现出来的,正是某种简单的图灵机的工作过程。
瞪眼、变色和位移的逻辑电路(10分钟)
1.从瞪眼到改变大变色龙颜色的电路
通过以下方法,就可以把变色龙的变化用电子元件制造出来。将大变色龙的变色规则即“A的下一时刻”这一列转化成二进制,绿是0,黄是1,得到“0111”,然后输入网址ht t p://www.32x8.c om/var2.ht ml,这个网页提供了便捷的功能,可以把二进制真值表转化成逻辑电路图,只需要在交互表单中,由上至下选中“0111”,按“Submit”,则自动得到逻辑电路图(如图4)。
图4
这简直太方便了,上图表示取A和B的或运算的值,按本文的例子,就是将大变色龙和小变色龙的状态进行或运算。考虑到大变色龙的颜色非黄即绿,所以可使用一位寄存器来存储大变色龙A 的状态,在L o g i s i m 软件中,下图5表示的就是一位寄存器。
图5
考虑到小变色龙有很多,为调试方便,可使用含有16个存储空间的一位存储器,Log is im中,图6表示的就是存储器。存储器的使用方法在往期文章里有过解释,这里就略过了。综合以后,就可以在Logi si m中画出逻辑电路图,这一步没有那么自动化,不过绘制线路还是非常简单的(如图7)。
图6 图7
2.从瞪眼到改变小变色龙颜色的电路
将小变色龙的变色规则即“B的下一时刻”这一列转化成二进制,绿是0,黄是1,得到“1110”,输入网址“http://www.32x8.com/var2.ht ml ”,在交互表单中由上至下选中“1110”,按“Submit ”,自动得到逻辑电路图8。
图8
此图表示取A反和B反的或运算值,所以要在进行或运算前先各自做非运算,由于这次改变的是小变色龙B的值,所以改变的是存储器的值而不是寄存器的值,在Logisim中画出小变色龙变色的电路图(如图9)。
图9
3.改变颜色后发生位移的电路
将“A 变色后的动作”这一列转化成二进制,左是0,右是1,得到“1101”,输入网址“ht t p://www.32x8.com/var2.html”,在交互表单中由上至下选中“1101”,按“Submit ”,自动得到逻辑电路图(如图10)。
图10
此图表示取A反和B的或运算值。由于这次改变的是位移方向,所以逻辑门的输出结果影响的是控制存储器读写方向的计数器,图11表示的就是计数器,在Logi si m软件中画出电路图(如图12)。
图11
图12
计数器前端加上一个非门,是为了照顾人们从左到右读取数字的习惯,如不加,则存储器中的数据需要从右往左读。
“造”出一台图灵机(10分钟)
有了上面三张逻辑电路图,就可以“造”出一台图灵机了,可是怎么使用这三张图呢?在画图软件里设置好“透明选择”,然后把三张图重叠在一起就可以得到完整的图灵机的逻辑电路图了。接下来,使用逻辑电路模拟软件Logisim把元件按电路图的样子连接好,就可以运行这台图灵机了!真正运行后可以发现,数据的变化规律有点让人意想不到。注意寄存器里的数值代表的是大变色龙A的颜色,而存储器里的数值代表的是小变色龙B的颜色。当然也可以用电子元件将电路实际搭出来,可以当作创客的项目。
本文所实现的还只是一台专用图灵机,若要实现通用图灵机,就需要扩展寄存器的数量或存储器的存储数据位数,还要改变进行颜色变化的逻辑电路,实现起来要复杂多了,这个难题就留给有兴趣的朋友自行探索吧——虽然说笔者并没有抱太大期望,不过或许哪天就能得到一份意外的惊喜哟!
--end--
声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com