n log n是O(n)?

时间:2011-10-20 03:15:35

标签: algorithm recurrence

我正在尝试解决这种复发问题

T(n)= 3T(n / 2)+ n lg n ..

我已经得出它属于主人定理案例2的解决方案,因为n lg n是O(n ^ 2)

但在参考解决方案手册后,我注意到他们有这个解决方案

enter image description here

解决方案说,对于0到0.58之间的e,n lg n = O(n ^(lg 3 - e))

所以这意味着n lg n是O(n)..这是对的吗?我在这里错过了什么吗?

不是nlgn O(n ^ 2)?

3 个答案:

答案 0 :(得分:78)

这将更好地解释事情 enter image description here

答案 1 :(得分:14)

n*log(n)不是O(n^2)。它被称为准线性,它比O(n^2)生长得慢得多。实际上n*log(n)小于多项式。

换句话说:

O(n*log(n)) < O(n^k)

其中k > 1

在你的例子中:

3*T(2n) -> O(n^1.585)

由于O(n^1.585)是多项式并支配O(n*log(n)),后一项会下降,因此最终的复杂性仅为O(n^1.585)

答案 2 :(得分:6)

n lg3 不是O(n)。它超过了O(n)......实际上,n上任何大于1的指数都会导致渐近时间比O(n)更长。由于lg(3)约为1.58,只要从指数中减去小于.58,它就渐近地大于O(n)。