我们收到了一段代码来找到它的大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。我可能会对此提出质疑 任何帮助和解释将不胜感激!
答案 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。
但我知道什么!?