O(n ^ c)〜= O(n * log n),哪个值有c?

时间:2018-02-13 03:48:34

标签: algorithm math complexity-theory asymptotic-complexity

我想知道,n的指数必须低于n*log(n)(换句话说,n^cn * log(n, 2)的渐近线,有多低c算法必须使用n^c算法效率而不是n log n算法。我看到它是 + - 高于 1.10,但我想知道如何解决这个问题。

我试过,我在数学上很糟糕,我希望能有一个数学解释。谢谢!

1 个答案:

答案 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))