具有嵌套循环的代码片段的大O.

时间:2016-04-26 10:00:37

标签: java time-complexity big-o asymptotic-complexity

我们收到了一段代码来找到它的大O:

for(int i = 1;i ≤ n;i = 2 ∗ i)
    for(int j = 1;j ≤ i;j = 2 ∗ j)
        for(int k = 0; k ≤ j; k++)
             //do something elementary

第一行应该是O(log(n))但是第二行会变得复杂,第三行更是如此。我最初认为第二行也可以是O(logn)但是上限j <1。我可能会对此提出质疑 任何帮助和解释将不胜感激!

1 个答案:

答案 0 :(得分:-1)

这就像家庭作业一样。没关系,我会试一试。

我的逻辑说第二级是log(log n),也许是log(log n)/ 2。 第三个将是log(log(log n))。最终结果是:

log(n)* log(log(n))* log(log(log(n)))。

由此我会说大O是log(n),因为这是最重要的因素。

为什么:

第二个循环迭代多少次。第一次迭代:i = 1,j = 1.它将循环1次。最后一次:i = n,它将循环log(n)次。平均而言,它将循环log(n)/ 2次。所以我的直觉是错误的......

编辑:

第三个循环平均运行n / 2次。

因此,总而言之,log(n)* log(n) n = n log(n)^ 2。

但我知道什么!?