证明这个双循环的时间复杂度是O(n)

时间:2012-10-23 00:32:12

标签: complexity-theory time-complexity

你如何证明这整个循环序列是O(n)?或者是O(n)?乍一看,只看一下双循环可能会认为它是O(n ^ 2),但我认为不是......

int i = 0;
int arr[N];
int idx = 0;
for (i = 0; i < 2; i++)
{
    for (j = 0; j < N/2; j++)
    {
      idx = (i * N/2) + j;
      foo(arr[idx]);
    }
 }

1 个答案:

答案 0 :(得分:2)

外部循环是常量,因此循环与执行:

相同
for (j = 0; j < N/2; j++)
{
  idx = (0 * N/2) + j;
  foo(arr[idx]);
  idx = (1 * N/2) + j;
  foo(arr[idx]);
}

这实际上使代码的意图更加清晰,但正如您所看到的,操作量与N成线性关系,因此它是O(N)复杂度而不是指数增长。我不能解释得更好,因为它是早上8点30分,我没有睡觉,但我想你得到了我的要点。