检查 2 个最小 DFA 是否等效

Check if 2 minimum DFA are equivalent

我有 2 个最小化 DFA,我需要检查它们是否等效。

如果它们是等价的,那么问题就是要找到一个有效的状态比较而不管不同的标签。在我的例子中,DFA 是 table,那么我需要找到将第一个 DFA 的行与第二个 DFA 的行相匹配的排列。

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

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

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

我找到了这些算法:

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

完整的参考是:

我接受了这个回答,因为@abbaasi 的回答太不完整了。 我会接受任何其他有重大贡献的答案。

我记得最小的 DFA 是唯一的。所以如果你有2个最小化的DFA,我想你只需要检查它们是否相同。