检查2个最小DFA是否相等

时间:2015-04-23 14:51:24

标签: regex regular-language finite-automata automata dfa

我有2个最小化的DFA,我需要检查它们是否相同。

如果它们是等价的,问题是找到一个有效的状态比较,无论不同的标签。在我的情况下,DFA是表格,然后我需要找到与第一个DFA行和第二个DFA行匹配的排列。

我还想到了DFA的广度优先搜索并创建状态的最小访问字符串,然后将第一个列表与第二个列表进行比较(这应该与特定输入无关,例如:001和110可以互换。)

我对直接和低效算法以及更复杂的算法感兴趣。

3 个答案:

答案 0 :(得分:2)

正确的方法是构建另一个DFA: L3 =(L1-L2)U(L2-L1) 并测试L3是否为空。如果L3为空,则L1 = L2,否则L1< L2>

答案 1 :(得分:0)

我找到了这些算法:

 - Symmetric difference
 - Table-filling algorithm
 - Faster Table-Filling algorithm O(n^2)
 - Hopcroft algorithm
 - Nearly Linear algorithm by Hopcroft and Karp

完整的参考资料是:

我接受了我的回答,因为@abbaasi的一个太不完整了。 我将接受任何其他答案并做出重大贡献。

答案 2 :(得分:0)

我记得最低DFA是唯一的。因此,如果您有2个最小化的DFA,我认为您只需检查它们是否相同。