引言

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

若是大一学生,看不懂可加微信讲解:maxma128

简介

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


进阶例题

例3

判断一个由{a,b}组成的单词是否是回文,若是则输出单个a,否则全部删除不输出。

  • 回文(Палиндром/Palindrome),首尾相同的词或句子。
    如:a,aba,baab.
  • 示例:aba 输出 a
    baab输出a
    abb不输出

思路答案不是唯一解,可自己尝试解答后看参考。


示例思路:
先读第一个字母并删除,然后移动到最后一个字母判断是否一样。一样则删除并移动到第一个并重复判断,最后删除全部后留一个a;若有不同则直接全部删除。

解题示例:

表中 X 为叉叉,无运行状态。

a b λ
q1 λ,R,q2 λ,R,q3 X
q2 a,R,q2 b,R,q2 λ,L,q4
q3 a,R,q3 b,R,q3 λ,L,q5
q4 λ,L,q6 λ,L,q7 a,N,!
q5 λ,L,q7 λ,L,q6 a,N,!
q6 a,L,q6 b,L,q6 λ,R,q1
q7 λ,L,q7 λ,L,q7 λ,N,!

例4

去掉由{a,b}组成单词的基数位字母,如ababab—bbb,bbaaa—ba。

难点:删除后不能留空格。

错误思路方法:
去掉第一个向右移两位再删除向右,直到遇到空白(λ)停止。

a b λ
q1 λ,R,q2 λ,R,q2 !
q2 a,R,q1 b,R,q1 !

此方法删除会留下空白。如 abab—b b。


正确思路示例:
标题行的变量可自行添加,可在单词最后添加一个“ = ”。依次读入每读两个并删除后移到最后一位添上对应的偶数位字母,最后再去掉“ = ”。
如:abbb

  1. abbb= //最后添上=
  2. bb=a //去掉两个在最后添上对应偶数位字母
  3. =ab //重复上一步
  4. ab //去掉=

解题示例:

a b = λ
q1 ,R, ,R, X =,L,q2
q2 ,L, ,L, ,L, ,R,q3
q3 λ,R,q4 λ,R,q4 λ,,! X
q4 λ,R,q5 λ,R,q6 λ,,! X
q5 ,R, ,R, ,R, a,L,q2
q6 ,R, ,R, ,R, b,L,q2