以下循环的时间复杂度是多少?
for(int i=1; i<=n; i=i*2){
System.out.println("*");
}
是对数吗?
答案 0 :(得分:5)
显示的算法为O(log n)
由于迭代次数为log2(n)
或log10(n)/log10(2)
答案 1 :(得分:3)
它是O(log n)因为你在每次迭代时将i的值加倍:1,2,4,8 ......
如果n是2 x ,则循环将在log 2 (2 x )+ 1 = x + 1次迭代后终止。
答案 2 :(得分:1)
是的,您将经历log_2(n)
次。这意味着Ω(log(n)
的复杂性必须准确 - 即O(log(n))
和o(log(n))
如果增量中的操作数应该是+
而不是*
,则复杂性为O(log(n))
,因为循环的次数是n/2
,这是一个函数由函数n
支配。