Regex 检查2个最小DFA是否相等
我有2个最小化的DFA,我需要检查它们是否等效 如果它们是等价的,那么问题在于找到一个有效的状态比较,而不考虑不同的标签。在我的例子中,DFA是表,然后我需要找到匹配第一个DFA的行和第二个DFA的行的排列 我还打算对DFA进行广度优先搜索,创建一个状态的最小访问字符串,然后将第一个列表与第二个列表进行比较(这应该与特定的输入无关,例如:001和110可以互换)Regex 检查2个最小DFA是否相等,regex,regular-language,finite-automata,automata,dfa,Regex,Regular Language,Finite Automata,Automata,Dfa,我有2个最小化的DFA,我需要检查它们是否等效 如果它们是等价的,那么问题在于找到一个有效的状态比较,而不考虑不同的标签。在我的例子中,DFA是表,然后我需要找到匹配第一个DFA的行和第二个DFA的行的排列 我还打算对DFA进行广度优先搜索,创建一个状态的最小访问字符串,然后将第一个列表与第二个列表进行比较(这应该与特定的输入无关,例如:001和110可以互换) 我对直接、低效的算法和更复杂的算法很感兴趣。正确的方法是构建另一个DFA,其中包括: L3=(L1-L2)U(L2-L1) 并测试L3
我对直接、低效的算法和更复杂的算法很感兴趣。正确的方法是构建另一个DFA,其中包括: L3=(L1-L2)U(L2-L1)
并测试L3是否为空。如果L3为空,则L1=L2,否则L1L2我发现以下算法:
- Symmetric difference
- Table-filling algorithm
- Faster Table-Filling algorithm O(n^2)
- Hopcroft algorithm
- Nearly Linear algorithm by Hopcroft and Karp
完整的参考资料包括:
- -诺顿,2009
我将接受任何有重大贡献的其他答案。我记得最低DFA是唯一的。因此,如果您有两个最小化的DFA,我认为您只需要检查它们是否相同。是的,BFS应该可以正常工作,即使是DFS也可以(您只需确保以相同的顺序运行两个DFA图)。