时间复杂度的计算

来源:互联网 发布:vb.net app.path 编辑:程序博客网 时间:2024/05/18 07:39

时间复杂度可分为以下几种类型:
常数阶,对数阶,线性阶,线性对数阶,平方阶,立方阶,幂次阶(按照幂从小到大),指数阶.我们一一讨论.
其中时间复杂度从小到大为:Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)<…<Ο(2^n)

1.常数阶

其中时间复杂度是一个与问题规模n无关的常数,不会趋近于无穷大,有一个确定的值,时间复杂度为O(1).
#include "iostream"using namespace std;int main(int argc, char const *argv[]){    int x = 10, y = 100;    int count = 0;    while (x < 100)    {        if (x < y)        {            y--;            count++;        }        else        {            break;        }    }    cout << count << endl;    return 0;}

2.对数阶

时间复杂度为对数阶是,一般为算法循环时出现指数的逆运算,时间复杂度为O(log(n)).
#include "iostream"using namespace std;const int n = 100;int main(int argc, char const *argv[]){    int num = 1, count = 0;    while (num < n)    {        num *= 2;        count++;    }    cout << count << endl;    return 0;    //其中对于num*=2的循环.可以得到2^num=n --->num=log(2)[n],所以是对数阶.}

3.线性阶

线性阶是一个和n成正比的复杂度.时间复杂度表示为O(n).
#include "iostream"using namespace std;const int  n = 100;int main(int argc, char const *argv[]){    int count = 0;    for (int i = 0; i < n; ++i)    {        count++;    }    cout << count << endl;    return 0;}

4.线性对数阶

线性对数阶的时间复杂度为O(nlog(n))
#include "iostream"using namespace std;const int n = 100;int main(int argc, char const *argv[]){    int num=1,count=0;    for (int i = 0; i < n; ++i)    {        while(num<n){            num*=2;            count++;        }    }    cout<<count<<endl;    return 0;    //其中2^num=n^n  ----> num=nlog(2)[n].}

5.幂次阶

幂次阶一般是循环嵌套的形式,循环越多,次数越高,对于嵌套了k次的循环,他的时间复杂度为O(k^n).
#include "iostream"using namespace std;const int n = 100;int main(int argc, char const *argv[]){    int array[n][n];    int count = 0;    for (int i = 0; i < n; ++i)    {        for (int j = 0; j < n; ++j)        {            array[i][j] = 1;            count++;        }    }    cout << count << endl;    return 0;}

不同的时间复杂度可用下面的图表详细表示:
图片来自维基百科

当问题规模n是可确定时,可根据情况选取不同的时间复杂度算法进行计算.
例如:对于一个问题有两种算法A和B他们的时间分别为O(n)和O(n^2).他们的时间频数的关系可用图来表示:
红色表示算法A蓝色表示算法B
红色表示算法A蓝色表示算法B.
当n<100时用算法A比较快,当n>100时使用算法B比较快.但是在数量级较小时,他们的时间差可忽略.所以算法A较优.

原创粉丝点击