其它计算模型

下推自动机(Pushdown Automaton, PDA)是一个带有下推存储器的有限自动机,下推存储器是一个栈。

下推自动机

下推自动机包括一个6元组M=(Σ,Γ,Q,Δ,s,F):

如果M的状态迁移规则是:(p,x,y;q,z)Δ, 当前状态是p,条带字符是x,栈字符是y, 那么M从栈顶取出y, 将z压入栈, 进入状态q.

如果任何时刻的迁移规则是确定的, 称该下推自动机是确定性的(deterministic), 否则称为非确定性的(nondeterministic).

如果状态迁移规则是(p,x,ϵ;q,ϵ), 栈的功能被忽略, PDA退化成FSM. 所以, PDA也能接受正则语言。

由于有栈的支持,下推自动机能够接受FSM不能接受的语言。

这里逗号后面的x→y表示从栈顶取走x,压入y.

下推自动机能够接受的语言称为上下文自由语言( Context-Free Languages, CFL).

算盘机(Abacus Machine)是以算盘为基础的计算模型。

算盘机模型

实现加法s+t,结果在变量t中

实现乘法t=s1×s2

一个有趣的事情是用图灵机去模拟算盘机,上图是算盘机的盒子与图灵机的条带之间的对应关系。用图灵机来模拟n+操作,即: 往第n个盒子里增加1个球, 这里不妨假设n=3.

模拟算盘机的图灵机设计如下:

| 当前状态 | 当前符号 | 新状态 | 新符号 | 移动方向 | | 1 | 0 | 2 | 1 | 1 | | 1 | 1 | 2 | 1 | 1 | | 2 | 0 | 3 | 0 | 1 | | 2 | 1 | 2 | 1 | 1 | | 3 | 0 | 4 | 1 | 1 | | 3 | 1 | 4 | 1 | 1 | | 4 | 0 | 5 | 0 | 1 | | 4 | 1 | 4 | 1 | 1 | | 5 | 0 | 6 | 1 | 1 | | 5 | 1 | 6 | 1 | 1 | | 6 | 0 | 8 | 1 | 1 | | 6 | 1 | 6 | 1 | 1 | | 7 | 1 | 8 | 1 | 1 | | 8 | 0 | 9 | 0 | -1 | | 8 | 1 | 11 | 0 | 1 | | 9 | 0 | 10 | 0 | -1 | | 9 | 1 | 9 | 1 | -1 | | 10 | 0 | 13 | 0 | 1 | | 10 | 1 | 9 | 1 | -1 | | 11 | 0 | 8 | 1 | 1 | | 11 | 1 | 11 | 1 | 1 | | 12 | 0 | 11 | 0 | 1 | | 13 | 0 | 14 | 0 | 1 |

运行结果:

最终停止在状态:

对比初始状态:

往第3个盒子里增加一个球已模拟成功。

感兴趣的同学, 可以再验证一下以下初始状态的运行结果:

算盘机能够实现图灵机能实现的加法和乘法等运算。

图灵机能够实现算盘机能实现的盒子加法和减法。

算盘机与图灵机的计算能力相当。

计算模型的层次