繁体   English   中英

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

[英]DFA to regular expression time complexity

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

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

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

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

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

我想你的疑问是关于N 3时间复杂度。

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

那么R ij k的迭代公式如下所示,

R ij k = R ik k-1 (R kk k-1* R kj k-1 + R ij k-1

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM