我想知道,n
的指数必须低于n*log(n)
(换句话说,n^c
?n * log(n, 2)
的渐近线,有多低c
算法必须使用n^c
算法效率而不是n log n
算法。我看到它是 + - 高于 1.10
,但我想知道如何解决这个问题。
我试过,我在数学上很糟糕,我希望能有一个数学解释。谢谢!
答案 0 :(得分:5)
如果~=
表示等效,那么
O(n^c) ~= O(n*log(n))
表示
lim ((n^c) / (n * log(n)) = const <> 0
n -> +inf
请注意,log2(n) = logK(n) / logK(2)
其中1 / logK(2)
是常数因素;这就是O(n*log2(n)) == O(n*logK(n))
的原因,我们可以选择我们喜欢的任何基础 K
。使用自然对数(K = e
)是很方便的。
当上面的限制是非零 c
时,让我们找出相应的const
(实际上,const
是正值):
lim ((n^c) / (n * log(n)) = lim n^(c - 1) / log(n) =
n -> +inf n -> +inf
现在让我们使用L'Hôpital's rule。
提供c <> 0
(在这种特殊情况下为d(n^(c - 1))/dn = d(n^-1)/dn = log(n)
的衍生物)
lim (c - 1) * n^(c - 2) / (1 / n) = lim (c - 1) * n^(c - 1) = (c - 1) * lim n^(c - 1) =
n -> +inf n -> +inf n -> +inf
限制lim n^(c - 1)
是
0 if c < 1
const if c = 1 <- we want this case
+inf if c > 1
所以我们想要c = 1
个案,最后我们有
(c - 1) * lim n^(c - 1) = /* c = 1 */ = (1 - 1) * const = 0
n -> + inf
唉! 没有c
持有的 O(n^c) ~= O(n*log(n))
。我们有
O(n^c) < O(n*log(n)) // when c <= 1
O(n^c) > O(n*log(n)) // when c > 1
请注意,c
...
O(n^c) ~= O(n*log(n))