引言
此系列编程思维训练机教程分为三部分:图灵机、马尔可夫算法和汇编训练机,皆是基于莫斯科国立大学计算数学与控制论系大一的教学内容。前两部分是《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
- abbb= //最后添上=
- bb=a //去掉两个在最后添上对应偶数位字母
- =ab //重复上一步
- 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 |