【问题标题】:For Loop with Multiplication Implementer Complexity具有乘法实现复杂性的 For 循环
【发布时间】:2011-04-05 05:51:03
【问题描述】:
for(int i=1; i<n; i=2*i)
// simple addition performed here...

我了解 O(n) 运行时单 for 循环和 O(n^2) 嵌套 for 循环,但是这个循环上的运行时是否也是 n log n 自乘法?

谢谢,

【问题讨论】:

  • JVM 很可能会将其优化为i+ii &lt;&lt; 1,这两者都更有效。如果n 大于 2^30,这将永远循环。 ;)

标签: java runtime complexity-theory


【解决方案1】:

不,你说得对,这里正在进行乘法运算,但它的作用是减少增加的运行时间,而不是增加它。

您必须根据输入值n 查看循环完成的速度。对于n = 128,您将获得i = 1, 2, 4, 8, 16, 32, 64, 128。如果将n 加倍,则不会像 O(n) 那样将时间加倍,而且肯定不会像 O(n2) 那样将其乘以 4。它只是在循环中增加了一次迭代。

这就是所谓的 O(log N) 时间复杂度。运行时间随着输入值的对数而增加,这在诸如平衡二叉树搜索之类的事情中很常见,您可以在每次迭代中删除一半的剩余搜索空间。

【讨论】:

    【解决方案2】:

    正如@paxdiablo 所说,这是一个 O(log n) 的循环

    O(n log n) 将是

    for(int i=0;i<n;i++) 
       for(int j=i;j>0;j/=2)
    

    何时是 O(n) 和 O(log n) 的嵌套循环

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-05
      • 2022-08-12
      • 2013-12-19
      • 1970-01-01
      • 2013-09-26
      • 2021-11-17
      • 1970-01-01
      相关资源
      最近更新 更多