Java 大O表示法中算法的复杂性

Java 大O表示法中算法的复杂性,java,big-o,complexity-theory,Java,Big O,Complexity Theory,考虑以下代码段: for(int index = 1;index < N;index*=2){ int counter = 0; while(counter < N){ counter++; } } for(int index=1;index

考虑以下代码段:

for(int index = 1;index < N;index*=2){
    int counter = 0;
    while(counter < N){
       counter++;
    }
}
for(int index=1;index
以大θ表示法确定其最佳和最坏情况下的运行时,作为N的函数。 选项:

a) 最佳情况:O(对数(N))-最坏情况:O(N²)

b) 最佳情况:O(N.log(N))-最坏情况:O(N.log(N))

c) 最佳情况:O(N.log(N))-最坏情况:O(N²)

d) 最佳情况:O(N)-最坏情况:O(N)

我在Java评估中看到了这个问题,我真的不知道正确的答案。 我回答了选项D,但我不知道它是否正确。 你能帮我吗?

这是
O(NlogN)
最好和最坏的情况

内部循环每次启动的次数都完全相同,即
N

外部循环重复自身
logN

因此,如果将这些组合起来,则
计数器
增加的总次数为:

T(n) = N + N + ... + N = N*logN

这将为您提供总的
O(NlogN)
时间。

内循环运行
N
次,因此外循环的每个循环都是
O(N)
。 外循环的索引呈指数增长,那么我们可以说它需要
log(N)
周期


把它们放在一起,在这两种情况下你都会有
N log(N)
,因为没有任何“最好”或“更差”的情况,除了把它们都做出来,没有办法退出这个循环。

我相信,无论是最好的还是最坏的情况,答案都是N log N

首先,没有短路。这意味着最佳情况必须与最坏情况相同

第二,外部循环将运行log(N)次,因为每个循环中的索引都是原来的两倍

第三,内部循环从0累加到N-1,每次累加1。这就是N操作


因此,最好和最差的N log N

由于外部循环中的
*=2
,它会迭代
log(N)
次。内部循环应该是显而易见的,它循环了
N次。你应该解释一下为什么你认为这样可以获得更好的学习效果。这样人们就能够解决和纠正你的误解。额外的好处:如果内环是
而(counter
,那么答案就会改变,现在是
O(N)
对于这两个函数,由于现在的总重复次数是:
1+2+4+8+…+N/2+N
,也就是
我认为logN总是在递归函数中。谢谢你的回答。递归决不会比迭代快,有时它只是一种“更干净”的方式。