- 自动机理论教程
- 自动机理论 - 首页
- 自动机理论 - 入门
- 自动机理论 - 历史
- 自动机理论 - 应用
- 自动机理论术语
- 自动机中字符串的基础知识
- 自动机的集合论
- 语言和文法
- 计算理论中的文法
- 由文法生成的语言
- 乔姆斯基文法分类
- 有限自动机
- 确定性有限自动机 (DFA)
- 非确定性有限自动机 (NFA)
- 从 NFA 到 DFA 的转换
- DFA 的最小化
- 摩尔机与米利机
- DFA 的补集
- 正则表达式
- 自动机中的正则表达式
- 自动机中的 Arden 定理
- 将正则表达式转换为有限自动机
- 正则文法的泵引理
- 计算理论中的正则集
- 上下文无关文法
- 上下文无关文法 (CFG)
- 上下文无关文法中的二义性
- 上下文无关语言的闭包性质
- 简化上下文无关文法
- 乔姆斯基范式 (CNF)
- 格雷巴赫范式 (GNF)
- 上下文无关文法的泵引理
- 下推自动机
- 下推自动机 (PDA)
- 下推自动机接受
- 从 CFG 构造 PDA
- 下推自动机和语法分析
- 图灵机
- 图灵机 (TM) 基础
- 图灵机接受的语言
- 多磁带图灵机
- 多轨迹图灵机
- 非确定性图灵机
- 半无限磁带图灵机
- 线性有界自动机 (LBA)
- 可计算性和不可判定性
- 图灵语言的可判定性
- 不可判定语言
- 图灵机停机问题
- 计算理论中的 Rice 定理
- Post 对应问题 (PCP)
- 自动机理论资源
- 自动机理论 - 快速指南
- 自动机理论 - 资源
- 自动机理论 - 讨论
摩尔机和米利机
有限自动机可能具有与每个转换相对应的输出。有两种类型的有限状态机生成输出 -
- 米利机
- 摩尔机
米利机
米利机是一种 FSM,其输出取决于当前状态以及当前输入。
它可以用一个 6 元组 (Q, ∑, O, δ, X, q0) 来描述,其中 -
Q 是一个有限的状态集。
∑ 是一个有限的符号集,称为输入字母表。
O 是一个有限的符号集,称为输出字母表。
δ 是输入转换函数,其中 δ: Q × ∑ → Q
X 是输出转换函数,其中 X: Q × ∑ → O
q0 是任何输入都从其开始处理的初始状态 (q0 ∈ Q)。
米利机的状态表如下所示 -
当前状态 | 下一状态 | |||
---|---|---|---|---|
输入 = 0 | 输入 = 1 | |||
状态 | 输出 | 状态 | 输出 | |
→ a | b | x1 | c | x1 |
b | b | x2 | d | x3 |
c | d | x3 | c | x1 |
d | d | x3 | d | x2 |
上述米利机的状态图如下所示 -
摩尔机
摩尔机是一种 FSM,其输出仅取决于当前状态。
摩尔机可以用一个 6 元组 (Q, ∑, O, δ, X, q0) 来描述,其中 -
Q 是一个有限的状态集。
∑ 是一个有限的符号集,称为输入字母表。
O 是一个有限的符号集,称为输出字母表。
δ 是输入转换函数,其中 δ: Q × ∑ → Q
X 是输出转换函数,其中 X: Q → O
q0 是任何输入都从其开始处理的初始状态 (q0 ∈ Q)。
摩尔机的状态表如下所示 -
当前状态 | 下一状态 | 输出 | |
---|---|---|---|
输入 = 0 | 输入 = 1 | ||
→ a | b | c | x2 |
b | b | d | x1 |
c | c | d | x2 |
d | d | d | x3 |
上述摩尔机的状态图如下所示 -
米利机与摩尔机
下表突出显示了区分米利机和摩尔机的要点。
米利机 | 摩尔机 |
---|---|
输出取决于当前状态和当前输入。 | 输出仅取决于当前状态。 |
通常,它比摩尔机具有更少的狀態。 | 通常,它比米利机具有更多的狀態。 |
输出函数的值是转换和更改的函数,当对当前状态进行输入逻辑时。 | 输出函数的值是当前状态和时钟边沿变化的函数,每当状态发生变化时。 |
米利机对输入的反应更快。它们通常在同一个时钟周期内做出反应。 | 在摩尔机中,需要更多逻辑来解码输出,从而导致更多电路延迟。它们通常在下一个时钟周期做出反应。 |
摩尔机到米利机
算法 4
输入 - 摩尔机
输出 - 米利机
步骤 1 - 获取一个空白的米利机转换表格式。
步骤 2 - 将所有摩尔机转换状态复制到此表格式中。
步骤 3 - 检查摩尔机状态表中当前状态及其对应的输出;如果对于状态 Qi 输出为 m,则将其复制到米利机状态表中 Qi 出现在下一状态的输出列中。
示例
让我们考虑以下摩尔机 -
当前状态 | 下一状态 | 输出 | |
---|---|---|---|
a = 0 | a = 1 | ||
→ a | d | b | 1 |
b | a | d | 0 |
c | c | c | 0 |
d | b | a | 1 |
现在我们应用算法 4 将其转换为米利机。
步骤 1 & 2 -
当前状态 | 下一状态 | |||
---|---|---|---|---|
a = 0 | a = 1 | |||
状态 | 输出 | 状态 | 输出 | |
→ a | d | b | ||
b | a | d | ||
c | c | c | ||
d | b | a |
步骤 3 -
当前状态 | 下一状态 | |||
---|---|---|---|---|
a = 0 | a = 1 | |||
状态 | 输出 | 状态 | 输出 | |
=> a | d | 1 | b | 0 |
b | a | 1 | d | 1 |
c | c | 0 | c | 0 |
d | b | 0 | a | 1 |
米利机到摩尔机
算法 5
输入 - 米利机
输出 - 摩尔机
步骤 1 - 计算米利机状态表中每个状态 (Qi) 的不同输出数量。
步骤 2 - 如果 Qi 的所有输出都相同,则复制状态 Qi。如果它有 n 个不同的输出,则将 Qi 分成 n 个状态,如 Qin,其中n = 0, 1, 2.......
步骤 3 - 如果初始状态的输出为 1,则在开头插入一个新的初始状态,该状态输出 0。
示例
让我们考虑以下米利机 -
当前状态 | 下一状态 | |||
---|---|---|---|---|
a = 0 | a = 1 | |||
下一状态 | 输出 | 下一状态 | 输出 | |
→ a | d | 0 | b | 1 |
b | a | 1 | d | 0 |
c | c | 1 | c | 0 |
d | b | 0 | a | 1 |
这里,状态“a”和“d”分别只给出 1 和 0 输出,因此我们保留状态“a”和“d”。但是状态“b”和“c”产生不同的输出(1 和 0)。因此,我们将b分成b0, b1,并将c分成c0, c1。
当前状态 | 下一状态 | 输出 | |
---|---|---|---|
a = 0 | a = 1 | ||
→ a | d | b1 | 1 |
b0 | a | d | 0 |
b1 | a | d | 1 |
c0 | c1 | C0 | 0 |
c1 | c1 | C0 | 1 |
d | b0 | a | 0 |