我正在尝试解决一个问题,我必须为两种语言的联合创建DFA。
这些是: {s是{a,b,c} * | s中的每个“a”后面紧跟着“b”}和
{s是{a,b,c} * | s中的每个“c”前面都有一个“b”}
我认为我走在正确的轨道上,但不确定它是否完全正确。有人可以看一下吗?
答案 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。