确定两个自动机之间等价的最好或最简单的方法是什么?
即,如果给定两个有限自动机 A 和 B,我如何确定两者是否识别相同的语言?
它们都是确定性的或都是非确定性的。
确定两个自动机之间等价的最好或最简单的方法是什么?
即,如果给定两个有限自动机 A 和 B,我如何确定两者是否识别相同的语言?
它们都是确定性的或都是非确定性的。
另一种更简单的方法是对自动机进行补充和相交。一个自动机A
等价于B
当且仅当且L(A)
反之亦然L(B)
,即当且仅当 和 的补集之间的交集L(B)
为L(A)
空,反之亦然。
这是检查是否L(A)
包含在中的算法L(B)
:
B
使用子集构造确定。然后,使每个接受状态为拒绝,每个拒绝状态为接受。你得到一个识别 的补码的自动机L(B)
。L(B)
语言L(A)
。即,为步骤 1 和 的自动机的交集构造一个自动机A
。要使两个自动机相交U
并V
构造一个带有 states 的自动机U x V
。如果in和in存在转换,则自动机从 state 移动(u,v)
到(u',v')
with letter 。接受状态是正在接受和正在接受的状态。a
u --a--> u'
U
v --a--> v'
V
(u,v)
u
U
v
V
如果L(A)
包含在L(B)
我们需要运行相同的算法来检查是否L(B)
包含在L(A)
。
如果两个非确定性有限自动机 (NFA) 接受相同的语言,则它们是等价的。
为了确定它们是否接受相同的语言,我们查看每个 NFA 都有一个最小 DFA 的事实,其中没有两个状态是相同的。最小 DFA 也是独一无二的。因此,给定两个 NFA,如果你发现它们对应的最小 DFA 是等价的,那么这两个 NFA 也一定是等价的。
对于这个主题的深入研究,我强烈推荐你阅读An Introduction to Formal Language and Automata。
我只是改写@Guy的回答。
要比较两者都接受的语言,我们必须弄清楚是否L(A) is equal to L(B)
。
因此,您必须找出是否L(A)-L(B) and L(B)-L(A)
设置为空。(原因 1)
第1部分:
为了解决这个问题,我们从 NFA A 和 NFA B 构建 NFA X,...
如果 X 为空集,则L(A) = L(B)
else L(A) != L(B)
。(原因 2)
第2部分:
现在,我们必须找到一种有效的证明或反证方法X is empty set
。X 什么时候会为 DFA 或 NFA 为空?答:当没有从 X 的起始状态到任何最终状态的路径时,X 将为空。我们可以为此使用 BFS 或 DFS。
原因1:如果两者都设置为空,则L(A) = L(B)
。
理由2:我们可以证明正则语言集在交集和并集下是封闭的。因此,我们将能够有效地创建 NFA X。
对于集合: