我如何计算这部分代码的时间复杂度或T(n)?
j=1;
while(j<=n/2){
i=1;
while(i<=j){
cout<<j<<i;
i++;
}
j++
}
我认为你可以假设n可被2整除。
答案 0 :(得分:4)
除以常数不会改变O(...)
。确切的可分性也无关紧要。就像j
一直到n
的算法一样,这是O(N^2)
算法。
答案 1 :(得分:1)
while(j<=n/2){ | n/2+1
i=1; | n/2
while(i<=j){ | 1+n/2(n/2+1)/2 =1+n(n+1)/8
cout<<j<<i; | n(n+1)/8
i++; | n(n+1)/8
} |
j++ | n/2
} |
总体而言:O(n 2 )
答案 2 :(得分:0)
计算迭代总数并不难。 j的范围是j = 1,2,...,n / 2。对于j的每个值,i的范围是i = 1,2,...,j。因此,对于外循环的每个值,存在内循环的j次迭代。这意味着迭代总数为:
T(n)= 1 + 2 + 3 + ... + n / 2 =(1/2)(n / 2)(n / 2 + 1)=(1/8)(n ^ 2 + 2n个)。
[注意:我在这里使用身份1 + 2 + ... + k = k(k + 1)/ 2。]
如上所述,该函数是O(n ^ 2)。