假设我们有正则表达式:
>你好W. * rld
>你好世界
>。*世界
>。* W. *
我想最小化匹配任意输入所需的正则表达式数量。
要做到这一点,我需要找到一个正则表达式是否匹配任何与另一个表达式匹配的输入。那可能吗?
Billy3
任何正则表达式都可以链接到DFA – 您可以最小化DFA,并且由于最小表单是唯一的,因此您可以决定两个表达式是否相等。 Dani Cricco指出了Hopcroft O(n log n)算法。还有另一个改进的算法,由Hopcroft和Craft来测试O(n)中两个DFA的等价性。
原文链接:https://www.f2er.com/regex/357394.html对于这个问题的一个很好的调查和一个有趣的方法,我推荐了来自arXiv的文章Testing the Equivalence of Regular Languages。
稍后编辑:如果你对正则表达式有兴趣包含而不是等价性,我遇到了一篇可能感兴趣的论文:Inclusion Problem for Regular Expressions – 我只是撇开它,但它似乎包含一个多项式时间算法的问题。