以下代码的时间复杂度

时间:2017-09-17 12:58:28

标签: c algorithm time-complexity

我想找到以下代码的时间复杂度,但我不确定我是否做得对。 Printf是基本过程。由于i*j or i*k

,printf的时间复杂度发生了变化
i=0;              //c1
while (i<n){      //c2*(n+1)
     for(j=i; j<n; j++)  // c3*n*(n+1)
         printf("The product of %d and %d is %d\n",i,j,i*j);   //c4*n*n
     for(k=n; k>i; k--)    //c5*n*(n-1)
         printf("The product of %d and %d is %d\n",i,k,i*k);   //c6*n*n
      i++;  //c7*n 
}

所以时间复杂度= c1 + c2 *(n + 1)+ c3 *(n ^ 2 + n)+ c4 * n ^ 2 + c5 *(n ^ 2 -n)+ c6 * n ^ 2 + c7 * n = c8 * n ^ 2 + c9 * n + c10

1 个答案:

答案 0 :(得分:1)

要查找代码的时间复杂度,

    i=0;
    while (i<n){      // a loop will run n times
            for(j=i; j<n; j++)  // a loop will run n - i times
                     printf("The product of %d and %d is %d\n",i,j,i*j);  
            for(k=n; k>i; k--)    //a loop will run n -i times
                     printf("The product of %d and %d is %d\n",i,k,i*k);
            i++;
    }

因此总数约为n *((n-i)+(n -i))。但是当n变为无穷大时,我们只需关心术语增长最快。所以它是O(n^2)