【问题标题】:Equivalence between two automata两个自动机之间的等价
【发布时间】:2011-08-01 22:04:03
【问题描述】:

确定两个自动机之间等价的最好或最简单的方法是什么?

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

它们都是确定性的或都是非确定性的。

【问题讨论】:

  • 你应该用 [homework] 标记你的作业。这使我们更容易提供适当的帮助。您应该提供您的最佳答案,以便我们对其发表评论。请不要要求我们为您做作业。那你学什么?
  • 什么是“等效”?你说他们产生相同的语言。你的意思是图是同构的?
  • DFA = AFD, NFA = AFN, NFA-lambda = AFN-lambda
  • @patrick 自动机不生成语言,自动机识别语言

标签: finite-automata equivalence automaton


【解决方案1】:

另一种更简单的方法是对自动机进行补充和相交。自动机A 等价于B iff L(A) 包含在L(B) 中,反之亦然,即如果L(B)L(A) 的补集之间的交集为空,反之亦然。

这是检查L(A)是否包含在L(B)中的算法:

  1. 补充:首先,使用子集构造确定B。然后,使每个接受状态为拒绝,每个拒绝状态为接受。你会得到一个自动机,它可以识别L(B) 的补码。
  2. 交集:构造一个自动机,它可以识别作为L(B)L(A) 的补集的交集的语言。即,为步骤 1 中的自动机与A 的交集构造一个自动机。要使两个自动机 UV 相交,您需要构造一个状态为 U x V 的自动机。自动机从状态 (u,v) 移动到带有字母 a(u',v'),如果在 UV 中存在转换 u --a--> u'v --a--> v'。接受状态是状态(u,v),其中u 接受Uv 接受V
  3. 在步骤 2 中构建自动机后,所需要做的就是检查空性。即,是否有自动机接受的词。这是最简单的部分——使用 BFS 算法在自动机中找到从初始状态到接受状态的路径。

如果L(A) 包含在L(B) 中,我们需要运行相同的算法来检查L(B) 是否包含在L(A) 中。

【讨论】:

    【解决方案2】:

    如果两个非确定性有限自动机 (NFA) 接受相同的语言,则它们是等价的。

    为了确定它们是否接受相同的语言,我们查看每个 NFA 都有一个最小 DFA 的事实,其中没有两个状态是相同的。最小 DFA 也是独一无二的。因此,给定两个 NFA,如果你发现它们对应的最小 DFA 是等价的,那么这两个 NFA 也一定是等价的。

    要深入研究此主题,我强烈建议您阅读An Introduction to Formal Language and Automata

    【讨论】:

    • 另一种方法是为 NFA 生成任何 DFA(例如,通过子集构造),计算两个 DFA 之一的补集(例如,通过使接受状态拒绝,反之亦然),构建笛卡尔积机器并测试交集以查看它是否接受空语言(例如,通过测试长度不超过 n 的字符串)。我不会称之为高效,但您仍然需要在 Stargazer712 的答案的输出上测试图同构。
    • @Patrick87 确定足够的 n 可能并不容易,或者是否有一些算法可以计算它?需要测试图同构是什么意思?
    • @Patrick:我认为确定两个最小 DFA 的等价性应该很容易,只需以相同的顺序通过两者进行 BFS。由于相应的边应该用相同的字符标记,因此只需按这些字符对每个状态的传出边进行排序。
    • @Patrick87:DFA 等效性要容易得多。为不超过 k 个字符的所有输入定义状态的等价关系 Q[k]。两个状态在 Q[k+1] 中,如果对于任何给定的输入字符,它们都将进入在 Q[k] 中等价的状态。如果机器有 n 个状态,则在 n 个字符内无法区分的两个状态对于任何输入都将无法区分,因此是等价的。即使是该算法的一个非常糟糕的幼稚实现,最坏的情况也是 O(n^3),所以它显然不是 NP-hard。
    • @GeorgesDupéron,很公平。我从答案中删除了该段落,因为它没有必要,甚至也没有回答原始问题。任何研究这个主题的人都应该非常熟悉将 NFA 简化为 DFA 的技术。
    【解决方案3】:

    我只是改写@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) 否则 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。

    对于集合:

    【讨论】:

      猜你喜欢
      • 2014-08-07
      • 1970-01-01
      • 2020-03-03
      • 1970-01-01
      • 2020-10-12
      • 1970-01-01
      • 2020-06-09
      • 2014-03-08
      • 2019-07-25
      相关资源
      最近更新 更多