Computer science 两个确定性有限自动机的并?

Computer science 两个确定性有限自动机的并?,computer-science,finite-automata,Computer Science,Finite Automata,我试图解决一个问题,我必须为两种语言的联合创建一个DFA 这些是: {s是{a,b,c}*| s中的每个“a”后面紧跟着一个“b}和 {s是{a,b,c}*| s中的每个“c”都紧跟在一个“b”之前} 我认为我的思路是对的,但不确定这是否完全正确。有人能看一下吗 这里有一个类似的例子,解释了如何找到两个DFA的并集 理解的关键是必须同时运行两个DFA,或者通常必须在联合DFA中维护两个DFA的状态 编辑: 您得到错误结果的原因是您的DFA不是确定性的,而且它们实际上并不决定您所描述的语言。我认

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

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

{s是{a,b,c}*| s中的每个“c”都紧跟在一个“b”之前}

我认为我的思路是对的,但不确定这是否完全正确。有人能看一下吗

这里有一个类似的例子,解释了如何找到两个DFA的并集

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


编辑:


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

两种语言的交集由
L1给出∩ L2=非(非(L1)∪ 非(L2))
(根据德摩根法律)

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

联合是通过将两种DFA或NFA组合成同时接受两种语言的新NFA而创建的。这是通过引入一个开始状态来实现的,从该状态可以转到两个NFA的开始状态,而无需消耗任何东西(仅消耗ε)


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

是的,这就是我所做的,但我只是想知道我的最终答案对您来说是否合适,因为对于DFA,您不需要为每个状态的每个标签进行转换吗?您的第二个DFA是不确定的。。。如果您处于状态
2
并将
c
作为输入,该怎么办?好的,我明白了,那么我可以让c从状态2转换到转储状态吗?您应该添加一个
c
-从状态
2
转换到其他一些状态,以确保第二个DFA是确定性的。您将转换指向哪个状态取决于您对DFA的期望行为。因此,我可以创建一个新的非接受状态,并将c转换为它吗?实际上,我认为问题在于第二个DFA实际上是一个NFA。如果处于状态2,当输入
c
时,DFA将不知道该做什么。