你如何构建两个DFA的联合?

时间:2010-12-15 12:39:30

标签: union transition finite-automata dfa

有没有人对构建两个给定DFA的并集的算法有直截了当的描述?例如,假设我们有两个DFA超过{0,1}其中

{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案例,或者是否存在我遗漏的内容?

1 个答案:

答案 0 :(得分:9)

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

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

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

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