Manacher的算法真的是线性的吗?

时间:2015-03-19 14:10:44

标签: algorithm

我最近阅读了一篇关于Manacher算法的维基百科文章,在看了示例实现和其他几十个实现后...我会说实话我不知道这个算法是如何线性的。我看到它的方式,它是最好的情况O(n + n / 2),但这不是线性的,是吗?

http://en.wikipedia.org/wiki/Longest_palindromic_substring

对于原始字符串中的每个字符,我们尝试在两个方向上扩展P数组,直到我们达到字符串边界或不满足对称属性。如果它只是这样意味着O(n ^ 2),但额外的观察将小于那个。仍然最多我可以低头到O(n + n / 2)而不是O(n),因为这实际上意味着内部嵌套循环o(1)。任何高于此值且高于此值都会破坏整个算法的线性度。

所以简而言之,这个算法是如何线性的?

1 个答案:

答案 0 :(得分:2)

O(n + n / 2)是线性的,O(n + n / 2)~O(n)

时间仍然与n成正比。

或者,更准确地说,当n变为无穷大时(n + n / 2)/ n的极限变为无穷大(并且当它没有变化时)是有限常数。所以O(n + n / 2)和O(n)是等价的。