两个确定性有限自动机的联合?

时间:2012-05-20 16:57:08

标签: computer-science finite-automata

我正在尝试解决一个问题,我必须为两种语言的联合创建DFA。

这些是: {s是{a,b,c} * | s中的每个“a”后面紧跟着“b”}和

{s是{a,b,c} * | s中的每个“c”前面都有一个“b”}

我认为我走在正确的轨道上,但不确定它是否完全正确。有人可以看一下吗?

2 个答案:

答案 0 :(得分:1)

这是一个类似的post,解释了如何找到两个DFA的并集。

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


编辑:

您获得错误结果的原因是因为您的DFA不具有确定性,并且因为它们实际上并未决定您所描述的语言。我认为您对联盟的计算是正确的,但您应该在继续进行之前修复您的DFA。

答案 1 :(得分:0)

两种语言的交集由L1 ∩ L2 = not(not(L1) ∪ not(L2))(de Morgans法律)给出。

DFA的补充("not")是通过将所有接受状态更改为不接受状态,反之亦然。这将为您提供一个非确定性有限自动机(NFA)。

通过将您的两个DFA或NFA组合到一个同时接受两种语言的新NFA中来创建联合。这是通过引入一个开始状态来完成的,你可以从中开始你的两个NFA的开始状态而不消耗任何东西(只消耗ε)。

当你完成所有这些后,你就有了NFA。您可以使用常用方法将其减少为DFA。