引言

此系列编程思维训练机教程分为三部分:图灵机马尔可夫算法汇编训练机,皆是基于莫斯科国立大学计算数学与控制论系大一的教学内容。前两部分是《Pascal程序设计》的前置课程,非常适合初学编程的同学做编程思维、计算机逻辑的入门训练。汇编训练机是汇编语言的程序训练机,因汇编有一套较强且区别于高级语言的逻辑体系,此前置课程曾让我更好地理解汇编逻辑。

简介

图灵机模型被认为是计算机的基本理论模型,世界上第一台电子计算机就是根据图灵机模型设计的。文章中提到的图灵训练机是用来训练图灵机思维的模型,以表格方式呈现。

规则

  1. 图灵训练机由表格呈现,并以字母或符号当指令。所以第一步是掌握熟悉各符号字母的作用和含义。

    符号 描述
    q1,q2,…,qn q为训练机的当前状态,可理解为步骤。
    停机符,遇到即在此处停止训练机。
    λ 数学符Lambda,表示空白
    L Left,即向左移动一格。
    R Right,即向右移动一格。
    N Neither,即在原处不动
  2. 运行规则

    运行规则:一串字符串按顺序读入,根据表格中指令修改值或变更位置。

    可想像为一个长形一行多列的纸条,每一列一个值,依次进入机器执行指令。

  1. 按以下范例建表:
a1 a2 λ
q1
q2 an,[L/R/N],[qn/ ! ]

注释:

标题行的a1…an是根据需要自行填写的常量,可以是数值、符号、字母。标题行中需含有空白符:λ。

标题列由q1…qn组成,根据需要自己定步骤个数。

除表头外的表格处将填写指令,如表中所示,每空三条指令,用逗号隔开,若不填写默认不变。

  1. 第一个指令用来变更当前值,需填写标签行中自定的内容或不填或填空白符。
  2. 第二个指令用来变更当前位置,N可省略不写。
  3. 第三个指令用来变更训练机状态,填写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,!

指令处空白不填则值不变,但要用逗号隔开位置。