代码片段的复杂性

时间:2011-07-19 18:27:04

标签: algorithm complexity-theory

for(int i = 0; i < N; i++)
  if(i < 2 || i > N - 3)
    for(int j = 1; j <= 10N; j++)
      a[i] = a[j - 1] / 2;

答案是N(1 + 10N(1)) = n + 10n^2对吗?还是n? 请解释一下。

3 个答案:

答案 0 :(得分:4)

这看起来O(N)给我。

if语句适用于i = 0,1,N-1,N-2,这是一个固定数量的案例。

答案 1 :(得分:4)

你的结论是错误的。虽然外部for循环 N 次,但if条件仅在4种情况下为真(0,1, N -2,ñ -1)。所以总的运行时间是 N + 4·10· N ,它位于O( n )中。

答案 2 :(得分:2)

如果你想要一个渐近上界... O(n ^ 2)。如果你想要比这更挑剔,我们需要为各个指令定义计算权重。

编辑:是的,这是O(n)。我第一次看错了。