24

我正在尝试解决这种重复

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

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

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

在此处输入图像描述

该解决方案说 n lg n = O ( n ^(lg 3 - e)) 对于 e 在 0 和 0.58 之间

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

不是 nlgn O(n^2) 吗?

4

3 回答 3

92

这将更好地解释事情 在此处输入图像描述

于 2011-10-20T03:28:17.687 回答
15

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).

于 2011-10-20T03:22:20.383 回答
6

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

于 2011-10-20T03:21:49.797 回答