为什么这段代码的运行时效率为O(n ^ 2)?

时间:2014-10-08 20:47:22

标签: c performance algorithm runtime big-o

对不起,我是大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来自哪里?

1 个答案:

答案 0 :(得分:3)

1)这可能与foo()的实施有关。如果foo()O(n),则此方法为O(n^2)

2)内部循环转到i*n,其中i也转到n,因此在n中是二次的,使得两个循环O(n^3)进入总。第三个循环仅为O(n),因此在分析中可以忽略。