时间复杂度 n^2

Time complexity n^2

本文关键字:时间复杂度      更新时间:2023-10-16

这是O(N^2(还是O(nlogn(。当有嵌套循环时不是 n^2 吗?

int a[], N;
int f1(){ int i, j, sum=0;
    for (i=1;; i=2*i)
    {
        If (i>=N)  return sum;
        for (j=1; j<2*i;j++) sum+=a[i];
    }
这是O(N log N)

因为外部循环在每次迭代中都会使i的值加倍。所以外循环的复杂性是O(log N)而不是O(N)

如果您有i++或类似的而不是i=2*i那么两个循环的时间复杂度将O(n^2)

编辑:这是一个简化的分析。请参阅R Sahu的答案以进行更严格的分析。

这是 O(N^2( 还是 O(nlogn(。

都不是。

当有嵌套循环时不是 n^2 吗?

当您线性迭代项目时,情况确实如此。在你的情况下,情况并非如此。

在您的情况下...

i的值为:1 2 4 8 16 ...N

内部循环执行 2 + 4 + 8 + 16 + 32 ...N次。

这是一个几何系列。几何级数的总和为 a(1 - r^n)/(1 - r)

在您的情况下,a2r2nlog2(N)(以 2 为基数的日志(。因此,经过一些简化后,总和是2*2^(log2(N)),这与2*N相同。

即您的算法复杂性O(N).

感谢@LedHead纠正初始帖子中的错误。