zl程序教程

您现在的位置是:首页 >  其他

当前栏目

【计算理论】自动机 示例 ( 自动机示例 | 自动机表示方式 | 自动机计算流程简介 )

流程计算 方式 示例 简介 表示 理论 自动机
2023-06-13 09:17:42 时间

文章目录

I . 自动机 简单 示例 ( 单向自动门 )


1 . 单向自动门 现实状况描述 : 可通过的单向自动门 ; 当站在门前时 , 自动门开 , 确保人走过后 , 再关闭 ; 注意 : 这个门只能进 , 不能出 ;

2 . 自动门有两个状态 :

① 打开 : 如下图所示 ;

② 关闭 : 如下图所示 ;

3 . 人的位置有四个状态 , 以及每个 人的状态对应的 门的状态 :

① 门前有人门后无人 : 一个人走到自动门前 , 门前有人 , 门后无人 ;

② 门前无人门后有人 : 一个人从自动门走过 , 走到门后面 , 此时处于门前无人 , 门后有人 ;

③ 门前门后都没人 : 一个人彻底走过自动门 , 自动门前后没人 ;

④ 门前门后都有人 : 两个人前后脚过自动门 , 一个人走到门后 , 另一个人刚走到门前 , 造成该状态 ;

4 . 自动门示意图 : 其中有一些逻辑是不存在的 , 如 单向自动门当前状态是打开的 , 不可能出现 要输入 “门前有人 , 门后无人” 状态的情况 , 此时肯定门是关闭的 , 才能输入 “门前有人 , 门后无人” 状态 , 否则根本就不符合常理 , 这里出现不符合常理的逻辑 , 其 状态不变 即可 ;

① 门前有人 ( 门后无人 ) : 表示有人要通过 , 当前门处于关闭状态 , 自动门 从 关闭 状态 变成 打开 状态 ;

② 门后有人 ( 门前无人 ) : 表示有人刚进去 , 自动门一直是打开状态 ;

③ 门前后都没人: 开始是 打开状态 , 之后人走过后 , 关闭 自动门 ;

④ 门前后都有人 : 开始是打开状态 , 后面马上又来一个人 , 此时仍然保持 打开状态 ;

5 . 自动机 表格方式: 红色的是有效的状态转换 , 蓝色的是不符合单向自动门常理的状态转换 ;

门前后都没人

门前有人 ( 门后无人 )

门后有人 ( 门前无人 )

门前后都有人

当前是关闭状态

关闭

打开

关闭

关闭

当前是打开状态

关闭

打开

打开

打开

① 第

1

行第

1

列 : 自动门 “当前是关闭状态” , 输入一个人的 “门前后都没人” 状态 , 结果是自动门切换成 “关闭” 状态 ;

② 第

1

行第

2

列 : 自动门 “当前是关闭状态” , 输入一个人的 “门前有人 ( 门后无人 )” 状态 , 说明来人了 , 马上开门 , 结果是自动门切换成 “打开” 状态 ;

6 . 自动机引入 : 自动门的所有的状态转换 , 当前的 自动门 状态 , 输入一个人的状态 , 自动门就会转为另外一个状态 , 这就是一个自动机 ;

II . 简单自动机示例 及 描述方式 ( 二进制数据处理 自动机 )


1 . 自动机由来 :

① 初始简单模型 : 解决一个问题时 , 先搭建一个简单计算模型 , 自动机 , 即 最简单的模型就是自动机 ;

② 模型扩张 : 逐步扩张简单计算模型 , 提高其计算能力 , 将计算能力扩展到极限 , 就是图灵机 ;

2 . 这个自动机是用于处理二进制数字的 :

① 状态含义 :

A,B,C

三个状态 , 分别 类似于 上述 自动门示例的 门开状态 , 门关状态 , 这些状态在 图灵机中 主要反映 神经中枢 所处的状态 ;

② 箭头的含义 : 自动机当前所处的状态

A

, 输入一个状态

1

后 , 变成另外一个状态

B

, 那么绘制一个箭头 , 从

A

指向

B

, 将输入的状态标识在箭头上 ;

③ 箭头本质 : 箭头的本质相当于箭头的一条指令 ;

④ Start 开始状态 : Start 表示自动机的开始计算的起始位置 , 相当于 Main 函数入口 ;

3 . 状态表示 : 有些状态如

A

B

画了两个圈 , 有些状态 如

C

只画了一个圈 ;

① 接收状态 :

2

个圈表示该状态是接收状态 ;

② 非接受状态 : 如果只有

1

个圈 , 表示该状态是非接收状态 ;

III . 简单自动机示例 及 运行 ( 二进制数据处理 自动机 )


1 . 自动机功能 : 将字符串 “0101” 输入到 自动机 中进行计算 ;

2 . 自动机启动 : Start 开始后 , 自动机的状态 是

A

状态 ;

自动机开始 -> 自动机

A

状态 ;

3 . 输入字符

0

: 自动机

A

状态下 , 输入

0

字符 , 仍然保持

A

状态不变 ;

自动机开始 -> 自动机

A

状态 -> 输入

0

字符 -> 自动机

A

状态 ;

4 . 输入字符

1

: 自动机

A

状态下 , 输入

1

字符 , 自动机转为

B

状态 ;

自动机开始 -> 自动机

A

状态 -> 输入

0

字符 -> 自动机

A

状态 -> 输入

1

字符 -> 自动机

B

状态 ;

5 . 输入字符

0

: 自动机

B

状态下 , 输入

0

字符 , 自动机转为

A

状态 ;

自动机开始 -> 自动机

A

状态 -> 输入

0

字符 -> 自动机

A

状态 -> 输入

1

字符 -> 自动机

B

状态 -> 输入

0

字符 -> 自动机

A

状态 ;

6 . 输入字符

1

: 自动机

A

状态下 , 输入

1

字符 , 自动机转为

B

状态 ;

自动机开始 -> 自动机

A

状态 -> 输入

0

字符 -> 自动机

A

状态 -> 输入

1

字符 -> 自动机

B

状态 -> 输入

0

字符 -> 自动机

A

状态 -> 输入

1

字符 -> 自动机

B

状态 ;

7 . 自动机 与 接收状态 / 非接收状态 : 字符串

0101

四个字符都输入到了自动机中 , 此时需要判定 计算完毕的时刻 自动机的当前状态是否是 接收状态 , 如果是接收状态 , 说明自动机是可以接收 这个字符串的 , 否则就说明该自动机不接受该字符串 ;

8 . 接收状态 与 非接收状态 判定 : 双圈是接收状态 , 单圈是非接收状态 , 此时自动机的状态是

B

, 是双圈状态 , 是接收状态 ;

9 . 本自动机示例总结 : 该自动机接收的

01

字符串中 , 不能存在连续的两个

1

, 否则该字符串就是不被自动机接收的 ;