引言
此系列编程思维训练机教程分为三部分:图灵机、马尔可夫算法和汇编训练机,皆是基于莫斯科国立大学计算数学与控制论系大一的教学内容。前两部分是《Pascal程序设计》的前置课程,非常适合初学编程的同学做编程思维、计算机逻辑的入门训练。汇编训练机是汇编语言的程序训练机,因汇编有一套较强且区别于高级语言的逻辑体系,此前置课程曾让我更好地理解汇编逻辑。
简介
图灵机模型被认为是计算机的基本理论模型,世界上第一台电子计算机就是根据图灵机模型设计的。文章中提到的图灵训练机是用来训练图灵机思维的模型,以表格方式呈现。
规则
图灵训练机由表格呈现,并以字母或符号当指令。所以第一步是掌握熟悉各符号字母的作用和含义。
符号 描述 q1,q2,…,qn q为训练机的当前状态,可理解为步骤。 ! 停机符,遇到即在此处停止训练机。 λ 数学符Lambda,表示空白。 L Left,即向左移动一格。 R Right,即向右移动一格。 N Neither,即在原处不动。 运行规则
运行规则:一串字符串按顺序读入,根据表格中指令修改值或变更位置。
可想像为一个长形一行多列的纸条,每一列一个值,依次进入机器执行指令。
- 按以下范例建表:
a1 | a2 | … | λ | |
---|---|---|---|---|
q1 | ||||
q2 | an,[L/R/N],[qn/ ! ] | |||
… |
注释:
标题行的a1…an是根据需要自行填写的常量,可以是数值、符号、字母。标题行中需含有空白符:λ。
标题列由q1…qn组成,根据需要自己定步骤个数。
除表头外的表格处将填写指令,如表中所示,每空三条指令,用逗号隔开,若不填写默认不变。
- 第一个指令用来变更当前值,需填写标签行中自定的内容或不填或填空白符。
- 第二个指令用来变更当前位置,N可省略不写。
- 第三个指令用来变更训练机状态,填写qn即转到相应状态行的当前列,而!则停机。
习题
例1
例1::输入一串由0和1组成的数组,将所有数位置换,即0变为1,1变为0。
如 011 改为 100
思路: 从第一位开始读入,一次执行三条指令:改值,向右移一位,再次执行当前状态。
如此循环至最后一位,向右移会来到空白处,此时向左停在最后一位,再停止训练机。
如图所示:
方法示例:
1 | 0 | λ | |
---|---|---|---|
q1 | 0,R,q1 | 1,R,q1 | λ,L,! |
例2
思路答案不是唯一解,可自己尝试解答后看参考。
将二进制数加1
如:100 → 101,111 → 1000
先移动到最后一位,遇到空白再返回一位。若最后一位为0则改1。若为1改为0再到前置位循环判断。
1 | 0 | λ | |
---|---|---|---|
q1 | ,R ,q1 | ,R ,q1 | ,L ,q2 |
q2 | 0,L ,q2 | 1,N ,! | 1,N,! |
指令处空白不填则值不变,但要用逗号隔开位置。