对字符串执行正则表达式比较所需的字符串长度的复杂性是什么?
答案 0 :(得分:54)
答案取决于“正则表达式”究竟是什么意思。经典正则表达式可以是compiled到Deterministic Finite Automata,可以在N
时间内匹配长度为O(N)
的字符串。正则表达式语言的某些扩展会改变这种情况。
您可以找到以下感兴趣的文件:Regular Expression Matching Can Be Simple And Fast。
答案 1 :(得分:8)
unbounded - 您可以在空输入字符串上创建一个永不终止的正则表达式。
答案 2 :(得分:6)
如果你使用普通(TCS:没有反向引用,连接,交替,Kleene星)regexp和regexp已经编译,那么它是O(n)。
答案 3 :(得分:1)
如果你在RegEx上寻找紧密的渐近边界(不考虑表达式本身),那么就没有。正如亚历克斯指出的那样,你可以创建一个正则表达式,即O(1)或正则表达式,即欧米茄(无穷大)。作为一种纯粹的数学算法,正则表达式引擎太复杂,无法执行任何形式的渐近分析(除了这样的分析基本上没有价值的事实)。
特定表达式的增长率(因此,实际上构成一种算法,无论如何)将更有意义,但不一定更容易分析。