关于Big O时间复杂度分析我已经坚持了几天的测试得到了这个问题:
以下是C代码:
if ( A > B ) {
for ( i=0; i<n^2/100; i++ ){ //1
for ( j=n^2; j>i; j-- ){ //2
A += B;}}
}
else {
for ( i=0; i<2n; i++ ){ //3
for ( j=3n; j>i; j-- ){ //4
A += B;}}
}
我的第一直觉是这个算法会有一个大的O O(n 2 )和嵌套的for循环等等但它不是多个选择答案。试图手动计算每个循环迭代,但在每个内循环(2和4)中考虑到变化i的问题。也难以将其作为求和来写。
答案 0 :(得分:0)
考虑A > B
的第一种情况。对于由外循环迭代的每个n^2 - i
值,内循环执行等于i
的多次迭代。考虑n = 2
和i = 1
。 n^2 = 4
和内循环迭代j = 4, j = 3, j = 2
,三次迭代,与我们的发现一致。
因此,内环的迭代总数是所有n^2 - i
的总和,其中i
从0
变为floor(n^2/100) - 1
。我们来定义k := floor(n^2/100) - 1
。然后这个总和等于kn^2 - k(k+1)/2
。替换k
代表的表达式,我们恢复[floor(n^2/100) - 1]n^2 - [floor(n^2/100) - 1][floor(n^2/100)]/2
。这不超过(n^2/100 - 1)n^2 - (n^2/100 - 1)(n^2/100)/2
。我们可以通过乘以n^4/100 - n^2 - n^4/20000 + n^2/200 = n^4(1/100 - 1/20000) - n^2(1 - 1/200)
。由此可以看出,第一种情况的时间复杂度为O(n^4)
。实际上,它也是Omega(n^4)
和Theta(n^4)
。
在A <= B
的情况下,分析类似。很容易证明第二种情况的时间复杂度为O(n^2)
,Omega(n^2)
,因此Theta(n^2)
。
因此,我们可以自信地说:
O(n^4)
; Omega(n^2)
; Theta
边界给出。