练习:计算时间复杂

练习:计算时间复杂

注:时间复杂度是由嵌套最深层语句的频度决定的

  1. x=0;y=0;
    for(k=1;k<=n;k++)                                  //频度为n+1;k从1~n+1,k=n+1时不符合条件,不再运行for循环内的语句。
        x++;                                           //频度n
    for(i=1;i<=n;i++)                                  //频度为n+1;与第一条语句分析相同。
        for(j=1;j<=n;j++)                              //频度为n(n+1);此语句嵌套在第4条for循环内。
            y++;                                       //频度为n^2
    

    时间复杂度为O(n^2);对循环语句只需要考虑循环体中语句的执行次数,以上程序段中频度最大的语句为(6)y++。

  2. x=1;
    for(i=1;i<=n;i++)//i从1~n
        for(j=1;j<=i;j++)//j从1~i
            for(k=1;k<=j;k++)//k从1~j
                x++;//此句嵌套最深
    

练习:计算时间复杂_第1张图片
时间复杂度为O(n^3)

  1. x=90;y=100;
    while(y>0)
        if(x>100)//x的取值为90,不符合条件执行x++,直到x>100
          {x=x-10;y--;}//此语句嵌套最深,为常量级
        else x++;
    

    时间复杂度为O(1)。

  2. for(i=0;i<n;i++)//频度为n+1
        for(j=0;j<m;j++)//频度为n(m+1);i=0~n时此句执行,上层for循环执行n次,第n-1次因不符合上层for条件而终止
            a[i][j]=0;//频度为n*m;此语句嵌套最深
    

    时间复杂度为O(n*m)

  3. s=0;
    for(i=0;i<n;i++)//频度为n+1
        for(j=0;j<n;j++)//频度为n(n+1)
            s+=B[i][j];//频度为n^2
    sum=s;
    

    外层循环的执行次数为n,内层循环的执行次数也为n。时间复制度为O(n^2)

  4. i=1;
    while(i<=n)
        i=i*3;
    

    基本语句为i=i*3;递推的方法:第一次:31≤n;第二次:32≤n;第三次:33≤n;…第x次:3x≤n;

    得到x≤log(3)(n),因此时间复杂度为O(log(3)(n))

  5. x=n;//n>1
    y=0;
    while(x≥(y+1)*(y+1))
        y++;
    

    设“y++”的执行次数为f(n),x≥(f(n)+1)^2,得出f(n)≤√n-1,时间复杂度为O(√n);

    也可以用上一题递推的方法

你可能感兴趣的:(练习,算法,数据结构,考研,经验分享)