首页 / 知识
正则表达式替换的复杂性
2023-04-12 20:28:00

Complexity of Regex substitution我在任何地方都没有得到答案。 正则表达式匹配和替换的运行时复杂度是多少? 编辑:我在python中工作。 但想大致了解大多数流行的语言/工具(java,perl,sed)。 从纯粹的理论立场来看: 我熟悉的实现是建立确定性有限自动机来识别正则表达式。使用标准算法在O(2 ^ m)中完成,m为正则表达式的大小。一旦构建完成,通过它运行的字符串的长度就是线性的-O(n),n是字符串的长度。在字符串中找到的匹配项的替换应该是恒定时间。 因此,总的来说,我假设O(2 ^ m + n)。 其他可能感兴趣的理论信息。 为了清楚起见,假定正则表达式为标准定义 http://en.wikipedia.org/wiki/Regular_language
来自形式语言理论实际上,这意味着唯一的建筑物
有一个NFA结构可以解决常规匹配问题 http://doi.acm.org/10.1145/128749.128755
通过使用自动机节点列表和"四个俄罗斯人"范式来解决时间和空间复杂度O(| r | | t | / log | t |)。这个范式似乎是以四个俄罗斯人的名字命名的,他们写了一篇开创性的论文, http://lyle.smu.edu/~saad/courses/cse8354/lectures/lecture5.pdf
我觉得用数字命名范例很有趣
添加了反向引用的正则表达式的匹配问题是 http://portal.acm.org/citation.cfm?id=114877 通过减少顶点覆盖问题来解决,该问题是经典的NP完全问题。
为了确定性地将正则表达式与反向引用匹配,我们可以
但是请注意,尚没有带有反向引用的正则表达式
以"无关"符号为例 http://dx.doi.org/10.1007/3-540-60044-2_46 将模式定义为单词w_1 @ w_2 @ ... @ w_n,其中每个w_i是一个单词(不是正则表达式)," @"是两个w_i中都不包含的可变长度的"无关"符号。他们推导了O((| t | + | P |)log | P |)算法,用于将一组模式P与输入文本t进行匹配,其中| t |是文本的长度,| P |是P中所有单词的长度。
知道这些复杂性度量如何结合以及什么是有趣的 las,我还没说关于Python的话... :)
取决于您通过正则表达式定义的内容。如果允许串联,替代和Kleene-star运算符,则时间实际上可以是 正则表达式解析困难的事情:
请注意,通过具体的实现,情况可能会变好或变坏。根据经验,简单的功能应该足够快,并且明确的(例如,不像 为了探究企业的答案,对于自动机的构造,O(2 ^ m)是最坏的情况,尽管它实际上取决于正则表达式的形式(对于一个与单词匹配的非常简单的表达式,它在O( m),例如使用Knuth-Morris-Pratt算法)。 取决于实现。什么语言/图书馆/班级?可能是最好的情况,但这将取决于实现中的功能数量。 如果要进行匹配和替换,则意味着分组和反向引用。
这是一个perl示例,其中可以使用分组和反向引用来解决NP完全问题: 这(再加上其他一些理论知识)意味着使用正则表达式进行匹配和替换是NP完全的。 请注意,这不同于正则表达式的形式定义-正则表达式没有分组的概念-并按其他答案所述在多项式时间内匹配。 您可以通过建立不确定的有限自动机而不是DFA来以空间换取速度。可以线性时间遍历。当然,在最坏的情况下,这可能需要O(2 ^ m)空间。我希望权衡是值得的。 |
最新内容
相关内容
python cmd中怎么运行python文件
python cmd中怎么运行python文件,培训,文件,路径,以上,程序,方法,更多,内容,运行Python,可在交互模式下运行,或者命令行中。命令行中运行的是pythonid函数如何运行
pythonid函数如何运行,培训,地址,代码,对象,函数,内存,类型,可能会,整数,字符串,id(object)功能:返回的是对象的“身份证号”,唯一且不变,但在不python怎样启动python程序运行
python怎样启动python程序运行,代码,环境,项目,工具,培训,业务,有限,程序,源文件,功能,执行Python程序的三种方式解释器——python/python3交python用哪个软件编写运行python
python用哪个软件编写运行python,软件,环境,代码,培训,服务,分析,工具,功能,程序,系列,编写和运行Python代码的软件叫IDE,也就是集成开发环境python程序怎么运行
python程序怎么运行,系统,代码,名称,培训,平台,语句,模式,结果,提示符,命令,安装完Python在Windows或Linux中的终端中直接输入python即进入Pypython怎么运行dir
python怎么运行dir,培训,信息,参数,方法,列表,属性,变量,模块,类型,范围内,python运行dir的方法:dir()函数不带参数时,返回当前范围内的变量、python如何运行python
python如何运行python,代码,培训,系统,语句,模式,结果,提示符,命令,以下,文件,Python的程序运行,需要Python解释器。安装完Python在Windows或Lpython如何在cmd窗口运行python程
python如何在cmd窗口运行python程序,代码,培训,路径,空格,窗口,文件,程序,下面,以上,目录,我们在编写python代码时,可以在交互模式下运行代码,pythonreplace无法替换怎么办
pythonreplace无法替换怎么办,培训,字符串,赋值,参数,时候,方法,变量,使用方法,语法,函数,replace替换字符串的时候,需要重新赋值给变量,因为在python 3.4版本怎么运行
python 3.4版本怎么运行,代码,培训,情况,平台,官网,软件,程序,形式,版本,程序员,python的程序是在python解释器中运行的解释器是一种让其他程python浏览器能运行python吗
python浏览器能运行python吗,代码,平台,智能,培训,灵活,项目,文件,语法,插件,浏览器,py文件不是html文件,当然不能在浏览器里打开。py文件可以python怎么在c中运行程序
python怎么在c中运行程序,培训,代码,系统,程序,语言,手段,以上,测试,更多,内容,C语言中运行python程序C语言使用popen/system或者直接以系统