计算时间复杂度

时间:2013-12-03 06:49:46

标签: c algorithm big-o time-complexity

我在算法课程中遇到了一些问题。

如何计算以下算法的时间复杂度:
我尝试使用常数而不是n,并尝试了解其复杂性 但我发现自己对Big O问题感到非常困惑。

x=0;

for(i=0;i<n*n;i++)

    for(j=0;j<i;j++)

        x=x+i;

我想知道解决问题的步骤,以便我可以解决这些问题。

4 个答案:

答案 0 :(得分:3)

渐近大O表示法中代码的时间复杂度为O(n ^ 4)。实际操作次数('x = x + 1')将接近((n ^ 4)/ 2)次。让我为你分解,第一个循环执行完全n ^ 2次,并且对于它的每个迭代,嵌套循环将迭代i次。所以在最坏的情况下它(第二个循环)将执行n ^ 2次。总计,它变为O(n ^ 4)。

答案 1 :(得分:3)

最好的办法是拿一支笔和一张纸,运行几个n的值并尝试指明方向。然后,您执行以下操作:

对于n = 0,内部循环不会被执行 对于n = 1,内循环将执行1次 对于n = 2,内循环将执行4次 对于n = 3,内部循环将执行9次。

“外循环执行多少次?”
的 “n 2

“内循环执行多少次?”
的 “n 2

因此,您得出结论,时间复杂度为O(n 4 )。

答案 2 :(得分:0)

如果变量xij是无符号整数类型,则答案为O(1),因为两个循环最多可以执行有限次数。例如,如果变量是无符号整数,则为sqrt(UINT_MAX)次。

如果变量是带符号的整数类型,则代码会为n产生未定义的行为,其大小足以产生溢出,从而使问题无法回答。

如果将变量视为理想化变量,则可以精确计算执行x=x+i语句的次数。

即,

0 + 1 + 2 + 3 + ... + (n^2 - 1)

这是(n^2 - 1) * (n^2) / 2(n^4)/2 - (n^2)/2,即O(n ^ 4)。

答案 3 :(得分:0)

推断上述算法时间复杂度的正式步骤:

enter image description here