complexity-theory - 用于计算描述两个正则表达式交集的 DFA 大小的多项式时间算法?
问题描述
与正则表达式本身的 DFA 相比,描述两个正则表达式交集的 DFA 可能呈指数级增长。(这里有一个很好的 Python 库来计算它。)有没有一种方法可以在不需要指数资源的情况下计算交集的 DFA 大小?
解决方案
来自维基百科:
普遍性:是 LA = Σ* 吗?[…] 对于正则表达式,对于单例字母表来说,普遍性问题已经是 NP 完全的。
如果我没看错,它说确定正则表达式是否生成所有字符串的问题已知是 NP 完全的。
现在,对于您的问题:考虑已知两个输入正则表达式生成相同正则语言的情况(也许表达式相同)。那么你的问题就归结为:这个 RE 的 DFA 的大小是多少?判断 RE 是否至少生成一些字符串(即语言是否为空)相对简单。如果语言不为空,则当且仅当 RE 生成所有字符串时,对应于 RE 的最小 DFA 具有一种状态。
因此,如果您的问题具有一般多项式时间解决方案,您将能够解决正则表达式的普遍性,而维基百科说这是不可能的。
(如果您不是询问最小 DFA,而是由特定最小化技术产生的 DFA,我认为您必须指定最小化技术)。
推荐阅读
- python-3.x - Zeep SOAP 复杂标头
- java - “Hello World”应用程序中的错误“消息:尾随部分不允许内容”
- javascript - 我的 JavaScript 函数不起作用 - 尝试比较两个函数并在第二个函数中返回一个语句
- excel - Excel/GSheets 为动态列表中的重复值添加唯一标志
- css-selectors - 仅当不是另一个元素的兄弟(立即或不是)时才选择一个元素
- url - 如何将 URL 方案发送到电报,以便用户可以单击它
- php - Array_sum 似乎无法正常工作 PHP
- css - 如何逐步更新表格中的图像(第二部分)
- c++ - 在 Cython 的类中访问/包装结构
- typescript - GitHub Actions - 如何使用 TypeScript