计算时间复杂度(输入可被2整除)

时间:2013-09-09 16:57:36

标签: performance algorithm time complexity-theory

我如何计算这部分代码的时间复杂度或T(n)?

j=1;
while(j<=n/2){
   i=1;
   while(i<=j){
      cout<<j<<i;
      i++;
   }
   j++
}

我认为你可以假设n可被2整除。

3 个答案:

答案 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)。