算法复杂度2 第三周补分博客

题目要求:

设 n 为正整数, 给出下列 3 个算法关于问题规模 n 的时间复杂度。

  • (1) 算法 1
    void fun1(int n)
    { i=1,k=100;
    while (i<=n)
    { k=k+1;
    i+=2;
    }
    }
  • (2) 算法 2
    void fun2(int b[], int n)
    { int i, j, k, x;
    for (i=0;i<n-1;i++)
    { k=i;
    for (j=i+1;j<n;j++)
    if (b[k]>b[j]) k=j;
    x=b[i];b[i]=b[k];b[k]=x;
    }
    }
  • (3) 算法 3
    void fun3(int n)
    { int i=0,s=0;
    while (s<=n)
    { i++;
    s=s+i;
    }
    }

答案:

(1)O(n)

(2)O(n²)

(3)O(根号n)

解题思路:

1.由题意知当i小于等于n的时候进行循环,运算的时间复杂度得出应该为n,因此O(n)

2.由题意知可以看出这是两个嵌套的循环,且每一个嵌套的时间复杂度均为n,基本步骤的执行数量为(n-1)*(n-1)/2,则总体的时间复杂度应该为O(n2)

3.由题意知可以先设n为一个具体的值,进而推导O(n2)的时间复杂度为n,所以最终复杂度就应该为根号下n。

posted @ 2017-11-22 16:53  20162312张家铖  阅读(732)  评论(0编辑  收藏  举报