我试图找到以下代码段的Big O运行时间:
for( i = 0; i < n * n; i++ )
for( j = 0; j < i; j++ )
k++;
由于n的乘法,或者只是O(n ^ 2),我不确定它是否是O(n ^ 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)
找出算法迭代次数的精确而正式的方法: