我正在学习如何将NFA转换为DFA,并且我想确保自己做得对。显然,往另一个方向前进并不是一件容易的事。有谁知道一种算法来检查DFA是否等于NFA?
我正在学习如何将NFA转换为DFA,并且我想确保自己做得对。显然,往另一个方向前进并不是一件容易的事。有谁知道一种算法来检查DFA是否等于NFA?
Answers:
这是一个有问题的问题。有一种方法可以检查自动机的等效性,我现在将解释这一点,但是正如您在最后看到的那样,恐怕它无法为您提供帮助。
回忆两个集合和相等,当和(这是集合相等性的定义)时。因此,您足以验证和,其中和分别是DFA和NFA。乙甲⊆ 乙乙⊆ 甲大号(d大号(Ñ )⊆ 大号(d )d Ñ
但是,您可能会问,如何检查语言的包含性。那么,现在观察到当且仅当(其中是的补)。甲∩ ¯ 乙 = ∅ ¯ 乙乙
让我们考虑首先检查。为此,您需要对进行补充(非常容易-交换接受状态),然后使用构造交集自动机(例如,使用产品构造),并通过找到到达接受状态的路径检查空度。d Ñ
相反的方向将显示为什么这对您没有帮助。为了检查是否,就需要补充。但是,为了补充NFA,您首先需要将其转换为DFA,使整个构想变得毫无意义。ñ
从本质上讲,您的问题所涉及的问题要深得多:您想验证自己(未定义的计算模型)正确执行了定义明确的算法。因此,这实际上不是计算机科学问题。
我要说的是:按照我建议的结构,不难得出结论,只要存在一个长度不超过(是状态的数量)被一个而不是另一个接受。因此,您可以尝试所有不超过此长度的单词。2 2 n n N
一种进行的方法是将NFA转换为DFA,然后检查两个DFA的等效性,为此存在线性算法[1]。
下列文章讨论了两个NFA等效的更一般情况(当然,这也适用于您的情况)。
菲利波·邦奇(Filippo Bonchi),达米安·普斯(Damien Pous),使用双仿真检查NFA等效性,直到一致 编程语言原理(POPL),2013年1月,意大利罗马。ACM,第457-468页,2013年。
摘要。我们引入直到一致性为止的双仿真作为一种证明非确定性有限自动机的语言等效性的技术。利用这项技术,我们设计了Hopcroft和Karp [1]对经典算法的优化。通过分析和关联两种潜在的协同证明方法,我们将我们的方法与最近引入的反链算法进行了比较。我们给出了具体的例子,在这些例子中,我们对反链进行了指数改进。实验结果还显示出不可忽视的改进。
[1] JE Hopcroft和RM Karp。用于测试有限自动机等价性的线性算法。康奈尔大学,TR 114,1971年12月。