关于for循环的更新如何影响BIG O,我有点困惑
在这样的代码上:
public static void bigO(int n){
for(int i=n; i>1; i=i/2){
for (int j=n; j>1; j=j/2){
sum++;
}
}
}
我不确定更新(j=j/2)
会如何影响它。
两个for
循环彼此独立,因此总复杂度应该大致是两个循环的复杂性的乘积。每个循环都是O(lgN)
,其中lg
表示“log base 2”。因此,将这两者相乘会产生O(lgN*lgN)
的整体复杂性。
要了解更好的O(lgN)
,请考虑n=16
的输入值。然后for
中的外部i
循环将进行以下迭代:
i | iteration #
16 | 1
8 | 2
4 | 3
2 | 4
lg(16)
实际上等于4,因为2^4 = 16
,所以这证实了我们期望的复杂性。您也可以测试其他n
值来说服自己。 j
中的内环行为相同,并且独立于i
中的外环。