一个功能的运行时间

时间:2013-12-19 21:37:26

标签: performance time-complexity

我觉得跟随功能的运行时间

int sum = 0;
for (int i = 1; i < 1000; i ++) {
    for (int j = 0; j < i; j++){
        sum++;
    }
}

O(N^2) N =外环运行的次数 和

int sum = 0;
for (int i = 1; i < 1000; i*=2){
    for (int j = 0; j < i; j++){
        sum++;
    }
}

O(2^N) N =外环运行的次数 我的理解是否正确?

2 个答案:

答案 0 :(得分:0)

第一个是O(N ^ 2),因为它的作用是将所有数字从1加到N,正如你所知,用以下公式求解:

(N + 1) N / 2 which has O(N^2) time complexity.

第二个将2的所有幂从1加到1000,由此函数求解:

2^(n + 1) - 2

但是,在这个公式中n是系列中2的最大功率,2 ^ n实际上是由N支配的数字,所以我们需要用N来表示: / p>

2^(n+1) - 2 <= N * 2 - 2 which has O(N) time complexity.

答案 1 :(得分:0)

通过让N=10,外部循环运行i=1..N和内部循环运行j=1..i来简化第一个问题。

每行代表外循环的一次迭代,点数表示内循环为该迭代运行的次数。

 i | j
 1 | .
 2 | . .
 3 | . . .
 4 | . . . .
 5 | . . . . .
 6 | . . . . . .
 7 | . . . . . . .
 8 | . . . . . . . .
 9 | . . . . . . . . .
10 | . . . . . . . . . .

将所有j加起来给出了内部块执行的总次数:

1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10.

1..N的连续和的公式为:

N*(N+1)/2 = 0.5N^2 + 0.5N = O(N^2)