语句按n执行的次数

时间:2018-02-23 14:20:05

标签: java big-o analytics

我想要真正的方法来获取代码中的语句按n执行的次数。

例如:在此代码中,执行MyStatement1MyStatement2的次数是多少?为什么?

sum = 0;
for (i=1; i<=n; i*=2) {
    for (j=1; j<=i; j++) {
        sum++; // MyStatement1
    }

    for (k=1; j<=n; k++) {
        sum++; // MyStatement2
    }
}

2 个答案:

答案 0 :(得分:1)

MyStatement1 :O(n)

精确的执行次数基于geometrical progression的总和。外部循环将执行m2^m = n m = log2(n)

内循环将执行1 + 2 + 4 +... + 2^m次。这是几何级数的总和:

(1-2^m)/(1-2) = O(2^m) = O(2^log2(n)) = O(n)

MyStatement1 :无限

在执行第二内循环j=log2(n)时。由于这小于n,因此永远不会满足条件,最终成为无限循环。

答案 1 :(得分:1)

由于i的开始时间小于n且第一个for循环将j提升到i,因此第二个for循环是无限的。对于第二个循环,您需要将循环条件更改为k <= n,否则它将是一个无意义的程序。