📜  TOC 中的 Mealy 和 Moore 机器

📅  最后修改于: 2021-09-27 14:38:58             🧑  作者: Mango

摩尔机:摩尔机是具有输出值的有限状态机,其输出仅取决于当前状态。它可以定义为 (Q, q0, ∑, O, δ, λ) 其中:

  • Q 是有限状态集。
  • q0 是初始状态。
  • 是输入字母表。
  • O 是输出字母表。
  • δ 是映射 Q× → Q 的转移函数。
  • λ 是映射 Q → O 的输出函数。

图1

在图 1 所示的摩尔机中,输出用 / 分隔的每个输入状态表示。摩尔机的输出长度比输入长 1。

  • 输入: 11
  • 过渡: δ(q0,11)=> δ(q2,1)=>q2
  • 输出: 000(q0 为 0,q2 为 0,q2 再次为 0)

  Mealy 机: Mealy 机也是具有输出值的有限状态机,其输出取决于当前状态和当前输入符号。它可以定义为 (Q, q0, ∑, O, δ, λ’) 其中:

  • Q 是有限状态集。
  • q0 是初始状态。
  • 是输入字母表。
  • O 是输出字母表。
  • δ 是映射 Q× → Q 的转移函数。
  • ‘λ’ 是映射 Q× → O 的输出函数。

图2

在图 1 所示的粉状机器中,输出由每个状态的每个输入符号表示,由 / 分隔。粉状机器的输出长度等于输入长度。

  • 输入: 11
  • 过渡: δ(q0,11)=> δ(q2,1)=>q2
  • 输出: 00(q0 到 q2 的转换有输出 0,q2 到 q2 的转换也有输出 0)

从 Mealy 到 Moore 机器的转换

让我们以图2所示的粉机转换表为例。

Input=0 Input=1
Present State Next State Output Next State Output
q0 q1 0 q2 0
q1 q1 0 q2 1
q2 q1 1 q2 0

表格1

步骤 1.首先找出那些与它们相关联的输出超过 1 个的状态。 q1 和 q2 是输出 0 和 1 都与它们相关联的状态。

步骤 2.为这些状态创建两个状态。对于 q1,两个状态将是 q10(具有输出 0 的状态)和 q11(具有输出 1 的状态)。类似地,对于 q2,两个状态将是 q20 和 q21。

步骤 3.使用新生成的状态创建一个空的摩尔机。对于摩尔机,无论输入如何,输出都将与每个状态相关联。

Input=0 Input=1
Present State Next State Next State Output
q0
q10
q11
q20
q21

表 2

步骤 4.使用表 1 所示的粉状机器转换表填充下一个状态的条目。对于输入 0 上的 q0,下一个状态是 q10(q1 与输出 0)。类似地,对于输入 1 上的 q0,下一个状态是 q20(输出为 0 的 q2)。对于输入 0 上的 q1(q10 和 q11),下一个状态是 q10。类似地,对于 q1(q10 和 q11),下一个状态是 q21。对于 q10,输出将为 0,对于 q11,输出将为 1。类似地,可以填充其他条目。

Input=0 Input=1
Present State Next State Next State Output
q0 q10 q20 0
q10 q10 q21 0
q11 q10 q21 1
q20 q11 q20 0
q21 q11 q20 1

表3

这是图1所示的摩尔机转换表。

从摩尔机到粉机的转换

我们以图 1 的摩尔机为例,其转换表如表 3 所示。

步骤 1.使用摩尔机的所有状态构造一个空粉机,如表 4 所示。

  Input=0 Input=1
Present State Next State Output Next State Output
q0
q10
q11
q20
q21

表 4

步骤 2:每个状态的下一个状态也可以直接从摩尔机转移表中找到:

Input=0 Input=1
Present State Next State Output Next State Output
q0 q10 q20
q10 q10 q21
q11 q10 q21
q20 q11 q20
q21 q11 q20

表 5

步骤3:我们可以看到摩尔机转换表中每个输入对应的输出。使用它来填充输出条目。例如; q10、q11、q20、q21对应的输出分别为0、1、0、1。  

Input=0 Input=1
Present State Next State Output Next State Output
q0 q10 0 q20 0
q10 q10 0 q21 1
q11 q10 0 q21 1
q20 q11 1 q20 0
q21 q11 1 q20 0

表 6

 步骤 4:从表 6 中我们可以看出,q10 和 q11 彼此相似(不同 Input 的 next state 和 Output 的值相同)。同样,q20 和 q21 也类似。因此,可以消除 q11 和 q21。

Input=0 Input=1
Present State Next State Output Next State Output
q0 q10 0 q20 0
q10 q10 0 q21 1
q20 q11 1 q20 0

表 7

这与表 1 中所示的粉机相同。因此我们将粉机转换为摩尔机,并将摩尔机转换为粉机。

注意:粉状机中的状态数不能大于摩尔机中的状态数。

示例:以下状态图描述的有限状态机,以 A 为起始状态,其中弧标为 x / y,x 代表 1 位输入,y 代表 2 位输出?

输出输入的当前位和前一位的总和。  

  1. 每当输入序列包含 11 时,输出 01。
  2. 每当输入序列包含 10 时,输出 00。
  3. 都不是。

解决方案:让我们采用不同的输入及其输出并检查哪个选项有效:

输入: 01

输出: 00 01(对于0,输出为00,状态为A。然后,对于1,输出为01,状态为B)

输入: 11

输出: 01 10(对于1,输出为01,状态为B。那么,对于1,输出为10,状态为C)

正如我们所看到的,它给出了当前位和前一位的二进制和。对于第一位,前一位取0。