麻烦找到这个循环的大O时间

时间:2013-06-07 14:31:21

标签: big-o

我试图找到以下代码段的Big O运行时间:

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

由于n的乘法,或者只是O(n ^ 2),我不确定它是否是O(n ^ 3)。一些帮助将不胜感激:))

3 个答案:

答案 0 :(得分:7)

内部循环将完全执行0 + 1 + ... + n ^ 2 - 2 + n ^ 2 - 1 =(n ^ 2)(n ^ 2 - 1)/ 2次(见{{3} }),所以它实际上是O(n ^ 4)。

答案 1 :(得分:2)

for(i:= 1 - &gt; n){
   for(j:= 1 - &gt; i){
      某物    
}
}

在O(n ^ 2)中运行[内部循环运行1,2,3 ...... n次随着n的值增加,因此总计运行总和为1 + 2 + 3 ... + n = O(n ^ 2)]

你的示例代码中的

让i:= 1 - &gt; p其中p = O(n ^ 2) 那么由于代码在O(p ^ 2)中运行,其运行时间将为O(n ^ 4)

使用Big-O表示法可以帮助您完成某些情况。考虑一下:
for(i = n / 2; i&lt; n; i ++){
for(j = 2; j 东西
}
}

外部循环运行 O(n)并且内部循环运行 O(log(n)) [将其视为不断地将n除以2:日志的定义]
因此总运行时间为: O(n(logn))

答案 2 :(得分:1)

找出算法迭代次数的精确而正式的方法:

enter image description here