哪种方法是确定两个自动机之间等效性的最佳或最简单的方法?
即,如果给出两个有限自动机A和B,我如何确定两者是否识别相同的语言?
它们既具有确定性,也具有不确定性。
答案 0 :(得分:13)
一种不同的,更简单的方法是补充和交叉自动机。自动机A
相当于B
iff L(A)
包含在L(B)
中,反之亦然,这是L(B)
和{{1}的补语之间的交集是空的,反之亦然。
以下是检查L(A)
中是否包含L(A)
的算法:
L(B)
。然后,让每个接受状态拒绝,每个拒绝状态接受。您将获得一个识别B
的补充的自动机。L(B)
和L(B)
的补集相交的语言。即,为步骤1和L(A)
的自动机的交集构造自动机。要与两个自动机A
和U
相交,您需要构建一个状态为V
的自动机。如果U x V
中的转换(u,v)
和(u',v')
中的a
转换,则自动机将从状态u --a--> u'
移至U
,并带有字母v --a--> v'
。接受状态为状态V
(u,v)
u
接受U
v
V
正在接受{。}}。如果L(A)
中包含L(B)
,我们需要运行相同的算法来检查L(B)
中是否包含L(A)
。
答案 1 :(得分:10)
如果他们接受相同的语言,则两个不确定的有限自动机(NFA)是等价的。
为了确定它们是否接受相同的语言,我们会看到每个NFA都具有最小DFA的事实,其中没有两个状态是相同的。最小的DFA也是独一无二的。因此,给定两个NFA,如果您发现它们相应的最小DFA是等价的,那么两个NFA也必须是等价的。
有关此主题的深入研究,我强烈建议您阅读An Introduction to Formal Language and Automata。
答案 2 :(得分:0)
我只是按@Guy改写答案。
要比较两者都接受的语言,我们必须弄清楚L(A) is equal to L(B)
是否。{/ p>
因此,您必须找出L(A)-L(B) and L(B)-L(A)
是否为空集。 (Reason1)
第1部分:
为了找到这个,我们从NFA A和NFA B,构建NFA X.
如果X为空,则设置为L(A) = L(B)
,否则为L(A) != L(B)
。 (Reason2)
<强>第2部分:强>
现在,我们必须找到证明或反驳X is empty set
的有效方法。什么时候X空为DFA或NFA?答案:当没有从开始状态到任何最终状态X的路径时,X将为空。我们可以使用BFS或DFS。
Reason1:如果两者都为空设置,则为L(A) = L(B)
。
原因2:我们可以证明在交叉和联合下关闭常规语言集。因此,我们将能够有效地创建NFA X.
和套装: