Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 检查2个最小DFA是否相等_Regex_Regular Language_Finite Automata_Automata_Dfa - Fatal编程技术网

Regex 检查2个最小DFA是否相等

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

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

如果它们是等价的,那么问题在于找到一个有效的状态比较,而不考虑不同的标签。在我的例子中,DFA是表,然后我需要找到匹配第一个DFA的行和第二个DFA的行的排列

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


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

正确的方法是构建另一个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
我接受了我的回答,因为@abbaasi的回答太不完整了。
我将接受任何有重大贡献的其他答案。

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

是的,BFS应该可以正常工作,即使是DFS也可以(您只需确保以相同的顺序运行两个DFA图)。