我最近阅读了一篇关于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)。任何高于此值且高于此值都会破坏整个算法的线性度。
所以简而言之,这个算法是如何线性的?
答案 0 :(得分:2)
O(n + n / 2)是线性的,O(n + n / 2)~O(n)
时间仍然与n成正比。
或者,更准确地说,当n变为无穷大时(n + n / 2)/ n的极限变为无穷大(并且当它没有变化时)是有限常数。所以O(n + n / 2)和O(n)是等价的。