我对此代码的Big O表示法有疑问:
public static void printItA(int n){
for(int i=0; i< n; i++){
for (int j = 1; j<n; j*=2){
System.out.println("Something");
}
}
}
在我看来,大O应该是O(n ^ 2),但for循环的j * = 2部分对我来说是困惑的。任何人都可以为我解决这个问题吗?
答案 0 :(得分:4)
举一个N = 16
的例子您的外循环将迭代16次。 O(N)
即与您的输入呈线性关系。
你的内循环将为每个外循环迭代4(1,2,4,8,16)次。你的内部循环在每次迭代时将工作量减少2。 O(log n)
最后的运行时复杂度O(n * log(n))