我觉得跟随功能的运行时间
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 =外环运行的次数
我的理解是否正确?
答案 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)