3个嵌套日志循环的Java大O表示法(n)
对于以下嵌套循环,大O表示法是什么3个嵌套日志循环的Java大O表示法(n),java,loops,complexity-theory,big-o,nested-loops,Java,Loops,Complexity Theory,Big O,Nested Loops,对于以下嵌套循环,大O表示法是什么 for (int i = n; i > 0; i = i / 2){ for (int j = n; j > 0; j = j / 2){ for (int k = n; k > 0; k = k / 2){ count++; } } } 我的想法是: 每个循环都是O(log2(n))所以它就像乘法一样简单吗 O(lo
for (int i = n; i > 0; i = i / 2){
for (int j = n; j > 0; j = j / 2){
for (int k = n; k > 0; k = k / 2){
count++;
}
}
}
我的想法是:
每个循环都是O(log2(n))
所以它就像乘法一样简单吗
O(log2(n)) * O(log2(n)) * O(log2(n)) = O(log2(n)^3)
是的,没错
计算嵌套循环(其边界不会立即相互依赖)的大O复杂性的一种方法是从内到外工作。最里面的循环执行O(logn)工作。第二个循环运行O(logn)次,每次都运行O(logn),所以它运行O(log2n)。最后,最外层的循环运行O(logn)次,并且在每次迭代中都执行O(log2n)工作,因此完成的总工作是O(log3n)
希望这有帮助 是的,你是对的
简单的计算方法-
for(int i=0; i<n;i++){ // n times
for(int j=0; j<n;j++){ // n times
}
}
在嵌套循环中,每个循环的Big-O都是
O(log(n))
,所以所有的复杂度都是O(log(n)^3)
事实上,你的假设是正确的。您可以按如下方式有条不紊地显示它:
我的假设也是
O(log2(n)^3)
。正确的表示法是什么?O(log2(n)^3)或您的方式?还是两者都可以接受?我已经看到了这两种写法。我个人喜欢sin^2 x样式的log^3 n,尽管它与上下文中使用的任何约定一致。log2 n
的符号可能会与log n
混淆
for (int i = n; i > 0; i = i / 2){ // log(n)
for (int j = n; j > 0; j = j / 2){ // log(n)
for (int k = n; k > 0; k = k / 2){ // log(n)
count++;
}
}
}