zl程序教程

您现在的位置是:首页 >  大数据

当前栏目

【计算理论】图灵机 ( 图灵机设计 )

计算 设计 理论 图灵机
2023-06-13 09:17:48 时间

文章目录

一、设计图灵机要求


设计一个图灵机

\rm M2

, 认识一种特定语言 , 该语言由

0

组成 , 字符串的长度是

\rm 2^n

个 ,

\rm n = 0, 1, 2, \cdots

;

二、图灵机分析


分析 : 设计一个图灵机 , 图灵机所接受的语言是 :

2

0

组成的字符串 ,

4

0

组成的字符串 ,

8

0

组成的字符串 ,

16

0

组成的字符串 ,

\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \vdots
\rm 2^n

0

组成的字符串 ;

图灵机设计很复杂 , 一般不需要设计出完整图灵机 , 只需要写出设计过程即可 ;

三、计算过程分析


将字符串写到带子上 , 带子上每隔一个

0

划掉一个 , 数一下剩下的

0

:

① 如果剩下的

0

1

个 , 直接接受该字符串 ;

② 如果剩下的

0

是 奇数个 , 直接拒绝接受该字符串 ;

③ 如果剩下的

0

是 偶数个 , 继续重新开始循环 ;

四、高级语言


将上述算法写成 高级语言 , 用于描述图灵机的计算过程 ;

高级语言是有要求的 , 其与图灵机的不同 ,

图灵机需要将所有的指令都写出来 , 状态图要绘制出来 , 这个要求很难实现 ;

高级语言不用将图灵机画出来 , 只需要 描述读写头如何操作 即可 , 将指令集部分直观描述出来 , 不写出具体的指令 ;

五、使用高级语言描述图灵机


下面就是高级语言的直观的计算过程 ;

图灵机直观计算过程 : 假设图灵机的带子上放了

0000

字符串 ;

阶段一 : 从左到右扫描图灵机带子 , 每隔

1

0

划掉一个 ;

阶段二 : 如果在 “阶段一” 只包含

1

0

, 那么 接受该字符串 ;

阶段三 : 如果在 “阶段一” 包含的

0

的个数大于

1

, 并且

0

的个数是奇数 , 那么 拒绝该字符串 ;

阶段四 : 如果在 “阶段一” 包含的

0

的个数大于

1

, 并且

0

的个数是偶数 , 那么 返回带子最左端 ;

阶段五 : 从 “阶段一” 重新开始计算 ;

六、完整图灵机 ( 仅做参考 )


设计的真实的

\rm M2

图灵机的指令如下 : 如下状态的图灵机设计很复杂 , 不做要求 ;