【问题标题】:How do you construct the union of two DFA's?您如何构建两个 DFA 的联合?
【发布时间】:2011-05-25 21:32:33
【问题描述】:

有人对构造两个给定 DFA 的并集的算法有简单的描述吗?例如,假设我们有两个超过 {0,1} 的 DFA,其中

{w|w has an odd number of characters}
  w has states A and B

delta | 0  | 1
----------------
  A   | B  | B
----------------
  B   | A  | A


{x|x has an even number of 1s}
  x has states a and b

delta | 0  | 1
----------------
  a   | a  | b
----------------
  b   | b  | a

我有一个结果转换表,将联合显示为:

delta | 0  | 1 
----------------
  Aa  | Ba | Bb
----------------
  Ab  | Bb | Ba
----------------
  Ba  | Aa | Ab
----------------
  Bb  | Ab | Aa

我的讲义中有一个图形解决方案,但想看看其他人会如何描述它。从这里,我可以看到我们基本上使用它们的状态值“乘”这两个原始表以产生更大的转换表。因此可以从结果表中得出 DFA。这听起来是否正确,这是否适用于所有 DFA 案例,还是我遗漏了什么?

【问题讨论】:

    标签: union transition finite-automata dfa


    【解决方案1】:

    理解的关键是你必须同时运行两个 DFA,或者一般来说你必须在联合 DFA 中维护两个 DFA 的状态。

    这就是为什么您必须为联合 DFA 创建新状态作为原始状态的直接乘法。这样,您就可以为原始 DFA 中的每个状态组合创建一个状态。

    然后可以直接计算新 DFA 的转换规则。例如,如果您处于状态 Ab,并且输入为 0,则第一个 DFA 将进入状态 B,第二个 DFA 将进入状态 b,因此该输入的联合 DFA 的下一个状态将是 Bb。

    当您需要合并两个或多个 DFA 时,此方法适用于所有情况。生成的 DFA 可能不是最优的,但稍后您可以使用任何您喜欢的算法将其最小化。

    【讨论】:

    • 如果你得到一个自动机中不可能的转换怎么办?
    • 您将为无法转换的自动机添加 E(错误)状态。该自动机将在输入序列的其余部分保持该状态。假设这是第一个。然后,您将在新自动机中拥有 Aa Ab、Ba、Bb、Ea、Eb 状态。
    • 我认为如果一个自动机只有 {0,1} 作为输入符号,而另一个自动机有 {1,2} 作为输入符号,情况会很相似。然后,我们必须扩展两个具有错误状态的自动机(第一个为 E,第二个为 e),如果输入 2,第一个将进入 E,如果输入为 0,第二个将进入 e 状态。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 2021-05-13
    • 2017-02-05
    • 2019-04-28
    • 2014-10-11
    相关资源
    最近更新 更多