【问题标题】:O(n^2) vs O (n(logn)^2)O(n^2) 与 O (n(logn)^2)
【发布时间】:2012-11-22 12:50:16
【问题描述】:

时间复杂度是O(n^2) 还是O (n(logn)^2) 更好?

我知道当我们简化它时,它变成了

O(n) vs O((logn)^2)

还有logn n,但是logn^2呢?

【问题讨论】:

    标签: algorithm math data-structures big-o time-complexity


    【解决方案1】:

    对于每个常数 k 渐近 log(n)^k < n

    证明很简单,对等式两边都做log,你会得到:

    log(log(n))*k < log(n)
    

    很容易看出,渐近,这是​​正确的。


    语义说明:假设这里是 log(n)^k == log(n) * log(n) * ... * log(n) (k times) 而不是 log(log(log(...log(n)))..) (k times),因为它有时也被使用。

    【讨论】:

      【解决方案2】:

      O(n(logn)^2) 对于较大的 n 更好(更快)!

      从双方获取日志:

      Log(n^2)=2log(n)

      Log(n(logn)^2)=Log(n)+2log(Log(n))=Log(n)+2log(Log(n))

      lim n--> 无穷大 [(Log(n)+2log(Log(n)))/2log(n)/]=0.5(使用 l'Hôpital 规则)(http://en.wikipedia.org /wiki/L'H%C3%B4pital's_rule)]

      【讨论】:

      • 我相信 OP 在 (log(n))^2 之后而不是 log(n^2)
      • 你说得对:log(n(log(n)^2)=log(n)+log(log(n)^2)=log(n)+2(log(log( n))
      【解决方案3】:

      (logn)^2 也是 n。

      举个例子:

       n = 5
       log n = 0.6989....
       (log n)^ 2 = 0.4885..
      

      可以看到,(long n)^2 进一步缩小了。

      即使你取更大的 n 值,例如100,000,000 ,然后

         log n = 9
         (log n)^ 2 = 81
      

      远远小于n

      【讨论】:

      • log(100) n==5 是一个不好的例子。
      • 尝试一百万。 log n = 13.8155... ,它的平方是 190.8683... 。请记住,O(N 的某些函数)处理 N 的 值。
      • @amit 我在示例中使用了更大的数字。我已经在更新答案了。
      • @cHao 我已经拿了一个更大的数字,我认为这已经足够了。
      【解决方案4】:
      对于 n 的值,

      n 仅小于 (log n)2强> 小于 0.49...

      所以一般 (log n)2 对于较大的 n...

      但由于这些 O(something) 符号总是忽略常数因素,在您的情况下,可能无法确定哪种算法更好。 .

      这是一个图表:

      (蓝线是n,绿线是(logn)2

      请注意,n 的小值的差异如何并没有那么大,并且可能很容易被未包含在 Big-O 表示法中的常数因子相形见绌。

      但对于较大的 n(log n)2 胜出:

      【讨论】:

      • Notice how the green line shoots up to infinity for tiny values of n asymptotics 不是关于是否某事物会走向无穷大,而是关于它以多快的速度接近无穷大。 log(n)^2 也进入无穷大。
      • @phant0m 我想指出的是,(log n)^2 对于 n 的小值也趋于无穷大,而不仅仅是大值。但这更多的是纯粹的数学观察,因为无论如何 n 通常不小于 1...我将摆脱这条线。它并没有真正添加任何有用的东西......
      【解决方案5】:

      (Log n)^2 更好,因为如果您通过 exp m 对 n 进行变量更改,则 m^2 比 exp m 更好

      【讨论】:

        【解决方案6】:
        O(n^2) vs. O(n*log(n)^2)
        <=> O(n) vs. O(log(n)^2) (divide by n)
        <=> O(sqrt(n)) vs. O(log(n)) (square root)
        <=> polynomial vs. logarithmic
        

        对数获胜。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多