两个自动机之间的等价

时间:2011-08-01 22:04:04

标签: finite-automata equivalence automaton

哪种方法是确定两个自动机之间等效性的最佳或最简单的方法?

即,如果给出两个有限自动机A和B,我如何确定两者是否识别相同的语言?

它们既具有确定性,也具有不确定性。

3 个答案:

答案 0 :(得分:13)

一种不同的,更简单的方法是补充和交叉自动机。自动机A相当于B iff L(A)包含在L(B)中,反之亦然,这是L(B)和{{1}的补语之间的交集是空的,反之亦然。

以下是检查L(A)中是否包含L(A)的算法:

  1. 补充:首先,使用子集构造确定L(B)。然后,让每个接受状态拒绝,每个拒绝状态接受。您将获得一个识别B的补充的自动机。
  2. 交集:构造一个自动机,识别与L(B)L(B)的补集相交的语言。即,为步骤1和L(A)的自动机的交集构造自动机。要与两个自动机AU相交,您需要构建一个状态为V的自动机。如果U x V中的转换(u,v)(u',v')中的a转换,则自动机将从状态u --a--> u'移至U,并带有字母v --a--> v' 。接受状态为状态V (u,v) u接受U v V正在接受{。}}。
  3. 在步骤2中构建自动机之后,所需要的只是检查空虚。也就是说,自动机接受了一个词。这是最简单的部分 - 使用BFS算法在自动机中找到从初始状态到接受状态的路径。
  4. 如果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.

和套装: