面对分析此代码段以查找BigO的问题

时间:2018-09-24 18:37:46

标签: java big-o

for (int i = 1; i <= Math.pow(2, n); i = i * 2) {
    for (int j = 0; j <= Math.log(i); j++) {
        sum = i + j;
        System.out.println(sum); // we would like to print the sum..
    }
}

我如何计算我的代码具有的原始操作数?

1 个答案:

答案 0 :(得分:0)

分析第一个循环,您可以看到限制为 2 ^ n ,但是您可以看到增量步长为 i = ix 2 ,因此有多少个乘法直到达到极限?答案显然是 n

内部循环,在最坏的情况下将执行多少次迭代?由于它取决于第一个循环变量( i )取的最大值,因此它是该值的自然对数,换句话说就是 log(2 ^ n)< / em>。

总而言之,该算法的总复杂度为O(n * log(2^n)),通过取出指数将其简化为O(n*n)(如@Andreas迅速建议的那样)。