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总是在递归函数中。谢谢你的回答。递归决不会比迭代快,有时它只是一种“更干净”的方式。