📜  Moore 和 Mealy 机器计算子串“ab”的数量

📅  最后修改于: 2021-09-28 10:00:57             🧑  作者: Mango

先决条件:Mealy 和 Moore 机,Mealy 机和 Moore 机之间的区别
问题:构建将 {a, b} 上的所有字符串作为输入并计算子字符串 ‘ab’ 个数的机器
认为,

Ε = {a, b} and 
Δ = {0, 1} 

其中,E 和 Δ 分别是输入和输出字母表。

解释:
所需的摩尔机构造如下。

在上图中,初始状态 ‘X’ 在将 ‘b’ 作为输入时保持其自身状态并打印 ‘0’ 作为输出,在获得 ‘a’ 作为输入时它会转换为状态 ‘Y’ ‘ 并打印 ‘0’ 作为输出。

状态 ‘Y’ 在将 ‘a’ 作为输入时保持其自身状态并打印 ‘0’ 作为输出,在获得 ‘b’ 作为输入时它传输到状态 ‘Z’ 并打印 ‘1’作为输出。状态 ‘Z’ 将 ‘a’ 作为输入传输到状态 ‘Y’ 并打印 ‘0’ 作为输出,在获取 ‘b’ 作为输入时它传输到状态 ‘X’ 并打印 ‘0’ ‘ 作为输出。

因此,最后在摩尔机上面可以很容易地计算子串 ‘ab’ 的数量,即,在获取 ‘ab’ 作为输入时,它给出 ‘1’ 作为输出,因此在计算输出 ‘1’ 时,我们可以很容易地计算子串 ‘ab’ .

Moore机到Mealy机的转换:
以上 Moore 机器将 {a, b} 上的所有字符串集作为输入,并在每次出现 ‘ab’ 作为子字符串时打印 ‘1’ 作为输出。现在我们需要将上面的摩尔机转换图转化为等价的米利机转换图。

所需转换的步骤如下:

  • Step-1:形成上述摩尔机的状态转移表-

    在上面的转换表中,状态 ‘X’、’Y’ 和 ‘Z’ 保留在第一列中,在获取 ‘a’ 作为输入时,它分别转换到 ‘Y’、’Y’ 和 ‘Y’ 状态,保存在第二列中,并在获得 ‘b’ 作为输入时,它分别转换为 ‘X’、’Z’ 和 ‘X’ 状态,保存在第三列中。在Δ下的第四列中,有第一列状态的对应输出。在表中,箭头(→)表示初始状态。
  • Step-2:从上面的Moore机转换表形成Mealy机的转换表-
    下面的转换表将在上表及其条目的帮助下形成,只需使用第一列状态的相应输出并将它们相应地放置在第二和第三列中即可。

    在上表中,第一列中的状态如 ‘X’ 在将 ‘a’ 作为输入时它进入状态 ‘Y’ 并给出 ‘0’ 作为输出,并在获得 ‘b’ 作为输入时状态 ‘X’ 并给出 ‘0’ 作为输出,对于第一列中的其余状态,依此类推。在表中,箭头(→)表示初始状态。
  • Step-3:最后我们可以借助上面的转换表形成Mealy机的状态转换图。
    所需图如下所示-

    以上 Mealy 机器将 {a, b} 上的所有字符串的集合作为输入,并在每次出现 ‘ab’ 作为子字符串时打印 ‘1’ 作为输出。

注意:当从 Moore 转换为 Mealy 机器时,Moore 和 Mealy 机器的状态数保持不变,但在 Mealy 到 Moore 转换的情况下,它不会给出相同的状态数。