时间复杂度的计算
2017-08-08 12:29
211 查看
时间复杂度可分为以下几种类型:
常数阶,对数阶,线性阶,线性对数阶,平方阶,立方阶,幂次阶(按照幂从小到大),指数阶.我们一一讨论.
其中时间复杂度从小到大为:Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)<…<Ο(2^n)
不同的时间复杂度可用下面的图表详细表示:
当问题规模n是可确定时,可根据情况选取不同的时间复杂度算法进行计算.
例如:对于一个问题有两种算法A和B他们的时间分别为O(n)和O(n^2).他们的时间频数的关系可用图来表示:
红色表示算法A蓝色表示算法B.
当n<100时用算法A比较快,当n>100时使用算法B比较快.但是在数量级较小时,他们的时间差可忽略.所以算法A较优.
常数阶,对数阶,线性阶,线性对数阶,平方阶,立方阶,幂次阶(按照幂从小到大),指数阶.我们一一讨论.
其中时间复杂度从小到大为:Ο(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) ,所以是对数阶. }
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) . }
5.幂次阶
幂次阶一般是循环嵌套的形式,循环越多,次数越高,对于嵌套了k次的循环,他的时间复杂度为O(k^n).
#include "iostream" using namespace std; const int n = 100; int main(int argc, char const *argv[]) { int array ; 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.
当n<100时用算法A比较快,当n>100时使用算法B比较快.但是在数量级较小时,他们的时间差可忽略.所以算法A较优.
相关文章推荐
- 如何计算时间复杂度
- 判断链表是否带环?若带环求环的长度?若带环求环的入口点?并计算以上每个问题的时间复杂度?
- 二分法的时间复杂度+算法的时间复杂度计算
- 1分钟学会计算算法的时间复杂度
- 时间复杂度的计算
- 【数据结构与算法】【时间复杂度】如何计算时间复杂度
- 数据结构(2)--计算时间复杂度
- 二分查找时间复杂度的计算
- 如何计算时间复杂度
- 计算时间复杂度 -- 写程序需瞻前顾后
- 算法的时间复杂度(计算实例)
- 时间复杂度的计算
- 数据结构时间复杂度的计算
- 如何计算一个算法的时间复杂度
- 浅谈时间复杂度及空间复杂度的计算。
- 算法-计算时间复杂度
- 如何计算时间复杂度
- 关于大整数的乘法的算法时间复杂度的计算过程推导(纯属个人推测,请高人指正)
- 计算一个算法的时间复杂度
- 如何计算时间复杂度(转)