【发布时间】:2016-12-23 02:47:10
【问题描述】:
如果您有一个包含 m 个节点的 DFA,并且您在一个包含 n 个字符的字符串上运行它,那么在每个步骤中,您不仅要测试从上一步继承的状态,还要再次测试 DFA 的第一个状态。所以在字符串中的 m 个字符之后(假设 m
举个例子,考虑 a{l}b 正则表达式(所有单词以 a 开头重复 l 次,后跟 a b),它的 DFA 有 m = l + 1 个节点。将其与带有 k>l 的字符串 a{k}b 进行匹配意味着您将遇到最坏的情况,即在字符串中的 l 个字符之后具有 (m - 1) 个活动状态。
我错过了什么?或者文献是否将实际实现仅仅关注于知道给定的完整字符串(即不是其中的一个子字符串)是否与正则表达式匹配的理论问题。
从我所在的位置运行 NFA 或 DFA 将花费 O(nm) 次(m 是 NFA 或 DFA 中的节点数和 n 个字符)。唯一的问题是 NFA 比 DFA 有更多的节点。
【问题讨论】: