对不起,我是大O分析的新手。我需要一些帮助:
我有以下代码段:
int sum;
for (int i = 0; i < n; ++i) {
if (n < 1000)
sum++;
else
sum += foo(n);
}
解决方案密钥说这是O(n ^ 2)分析,但我不明白为什么。循环只进行一次,所以n ^ 2来自哪里?
另一个我遇到问题的人:
for (int i = 0; i < n + 100; ++i) {
for (int j = 0; j < i * n ; ++j)
sum = sum + j;
}
for (int k = 0; k < n + n + n; ++k){
c[k] = c[k] + sum;
}
这些是O(n ^ 3),但我也不确定这是怎么发生的。我知道有3个循环,但它们没有嵌套,所以n ^ 3来自哪里?
答案 0 :(得分:3)
1)这可能与foo()
的实施有关。如果foo()
为O(n)
,则此方法为O(n^2)
2)内部循环转到i*n
,其中i
也转到n
,因此在n
中是二次的,使得两个循环O(n^3)
进入总。第三个循环仅为O(n)
,因此在分析中可以忽略。