algorithm - 两个叠瓦环的复杂性

标签 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 第二次,但我不确定。

欢迎提供复杂性的正式证明!

最佳答案

这是一个 O(N2) 算法。

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

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

关于algorithm - 两个叠瓦环的复杂性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41604103/

相关文章:

java - LinkedHashMap 复杂度

python - 迭代字符串追加的时间复杂度实际上是 O(n^2) 还是 O(n)?

algorithm - 如何使用 FFT 实际实现多项式乘法?

c# - 如何比较 2 组数组的不同匹配项

清空所有 'bad' 列和行的算法

algorithm - 确定该算法的 Big-O

algorithm - T(n) >= T(n-1) 总是正确的吗?

algorithm - 两个二叉搜索树的简单合并的时间复杂度

algorithm - 好的线性代数包

c - 文件中的奇怪行为计数行