两个叠加循环的复杂性

时间:2017-01-12 02:21:27

标签: algorithm time-complexity

我有这个算法(为方便起见,在c代码中):

int algo(int *T, int size)
{
   int n = 0;

   for (int i = 1; i < size; i++) {
       for (int j = i; j < size; j++) {
           n += (T[i] * T[j]);
       }
   }

   return n;
}

这个算法的时间复杂度是多少?

我的赌注是n * log (n),因为我们在size长度上有两次叠加迭代,第二次在size - i,但我不确定。

欢迎复杂的正式证明!

1 个答案:

答案 0 :(得分:3)

这是一个O(N 2 )算法。

  • 外循环的第一次迭代运行N-1次
  • 外循环的第二次迭代运行N-2次
  • 外循环的第三次迭代运行N-3次
  • ...
  • 外循环的最后一次迭代运行一次

总次数是(N)+(N-1)+(N-2)+ ... + 1,即sum of arithmetic progression。计算和的公式是N *(N-1)/ 2,即O(N 2 )。