DFA到正则表达式时间复杂度

时间:2013-04-19 00:20:14

标签: regex algorithm time-complexity automata

我正在研究将DFA转换为正则表达式的时间复杂度分析 Ullman等人的“自动机理论,语言和计算简介”,第2版,第151页。此方法有时称为transitive closure method。我不明白他们是如何在O((n ^ 3)*(4 ^ n))时间复杂度中提出4 ^ n表达式的。

我理解4 ^ n表达式关于空间复杂度,但是,关于时间复杂度,似乎我们使用先前迭代的结果在每次迭代时仅对每对状态执行四次恒定时间操作。我到底错过了什么?

2 个答案:

答案 0 :(得分:2)

这是对未使用正确数据结构的算法复杂性的粗略限制。我不认为除了作者显然不关心在这里进行优化之外还有很多解释,可能是因为他们的主要观点是正则表达式至少与DFA一样具有表现力,并且因为他们认为优化这种指数是没有意义的时间算法。

每个n次迭代有三个嵌套循环;在外环的迭代k期间构造的正则表达式具有大小O(4 ^ k),因为它们是由在前一次迭代期间构造的至多四个正则表达式构造的。如果算法复制这些子表达式并且我们高估了所有迭代的O(4 ^ n)处的正则表达式大小,那么我们得到O(n ^ 3 4 ^ n)。

显然我们可以做得更好。在不消除复制的情况下,通过适当地界定几何和,我们可以得到O(sum_ {k = 1} ^ n n ^ 2 4 ^ k)= O(n ^ 2(n + 4 ^ n))。此外,正如您所指出的,我们根本不需要复制,除非在最后我们同意templatetypedef必须完全写出输出,给出O(n ^ 3)的运行时间以准备常规表达式和O(4 ^ n)写出来。此版本的空间复杂性等于时间复杂度。

答案 1 :(得分:0)

我认为您的疑问是关于 n 3 时间复杂性。

让我们假设 R ij k 表示从状态 q i转换自动机的所有字符串的集合 q j ,不经过任何高于 q k 的州。

然后 R ij k 的迭代公式如下所示:

R ij k = R ik k-1 (R kk < / sub> k-1 * R kj k-1 + R ij K-1

此技术类似于全对最短路径问题。唯一的区别是我们正在采用正则表达式的联合和连接而不是总结距离。所有对最短路径问题的时间复杂度为 n 3 。因此,对于DFARegular Expression转换,我们也可以预期相同的复杂性。也可以使用相同的方法将NFAε-NFA转换为相应的正则表达式。

transitive closure approach的主要问题是它会创建非常大的正则表达式。如此大的长度是由于连续术语的重复结合。