假设我们有正则表达式:
我希望最小化匹配任意输入所需的正则表达式的数量。
为此,我需要确定一个正则表达式是否与另一个表达式匹配的任何输入匹配。这有可能吗?
Billy3
发布于 2010-09-03 03:32:00
任何正则表达式都可以链接到DFA -您可以最小化DFA,并且由于最小形式是唯一的,您可以决定两个表达式是否相等。Dani Cricco指出了Hopcroft O(n log n)算法。Hopcroft和Craft提出了另一种改进算法,该算法测试O(n)中两个DFA的等价性。
为了对这个问题进行一个很好的调查和一个有趣的方法,我推荐arXiv的论文Testing the Equivalence of Regular Languages。
稍后编辑:如果你对包含而不是正则表达式的等价性感兴趣,我看到了一篇可能感兴趣的论文:Inclusion Problem for Regular Expressions -我只浏览了一下,但它似乎包含了一个多项式时间的算法来解决这个问题。
发布于 2010-09-03 03:12:25
是。
两种正则语言的等价性问题是可以判定的。
算法示意图:
发布于 2010-09-03 03:18:07
当然可以!正则表达式可以表示为FSM (有限状态机),并且在技术上有无限数量的FSM可以识别相同的字符串。
同构是描述两个FSM是否等价的名称。有几种算法可以最小化FSM。例如,在n个状态自动机上,Hopcroft minimization algorithm可以最小化O( n )中的两个有限状态机。
https://stackoverflow.com/questions/3630203
复制相似问题