确定两个正则表达式是否等效的算法


11

给定两个任意的正则表达式,是否存在一种“高效”算法来确定它们是否与同一组字符串匹配?

更笼统地说,我们可以计算两个匹配集的交集大小吗?

有哪些算法可以做到这一点,它们所处的复杂性等级是什么?

如果我们不允许Kleene星,那是否完全改变了图片?


“十字路口的大小”是什么意思?在最有趣的情况下,它将无限大。您是否对wrt大小感兴趣?Σñ
拉斐尔

@Raphael我的理解是消除Kleene星会强制将集合的大小限制为有限。
MathematicalOrchid

依靠。允许哪些其他运算符?如果您允许补语,那么您所说的是错误的。另外,您也要求与Kleene明星联系的情况,因此无论如何都需要澄清。
拉斐尔

Answers:


12

Hendrik Jan对于复杂性类给出了很好的答案,但对于算法本身却不是。

我知道的最简单的算法是将正则表达式转换为DFA。存在用于将正则表达式转换为NFA以及将NFA转换为DFA的已知技术。

一旦拥有两个DFA,等效性测试将是有效且可确定的,因为DFA的最小形式对于同构是唯一的。

但是,从NFA构造这些DFA可能会花费很多时间,并且会产生非常大的DFAS,在最坏的情况下会成倍增长。


10

正则表达式的等价已知是PSPACE完全的,这是相当糟糕的。论文“简单正则表达式决策问题的复杂性”列出了正则表达式的几个子类,以及它们各自的复杂性。(链接


1
如果允许平方运算符(即用代替e e),则它甚至是EXPSPACE-complete 。没有Kleene星,它将成为NEXPTIME完整的。Ë2ËË
丹尼斯

@dkuper感谢您的额外说明。随时编辑答案以添加此参考文献或合适的参考文献。(或什至开始您自己的答案。)
Hendrik

是否有一般正则表达式具有PSPACE完整性的参考?
瑞安

您的链接已死。您能否提供论文中的一个或多个相关的新信息?
D. Ben Knoble

@ D.BenKnoble Link对我来说效果很好。
亨德里克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.