时间复杂度的计算
来源:互联网 发布: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.
当n<100时用算法A比较快,当n>100时使用算法B比较快.但是在数量级较小时,他们的时间差可忽略.所以算法A较优.
阅读全文
1 0
- 时间复杂度的计算
- 时间复杂度的计算
- 时间复杂度的计算
- 时间复杂度的计算
- 时间复杂度的计算
- 时间复杂度的计算
- 时间复杂度的计算。
- 时间复杂度的计算
- 时间复杂度的计算
- 时间复杂度的计算
- 时间复杂度的计算
- 时间复杂度的计算
- 时间复杂度的计算
- 时间复杂度的计算
- 时间复杂度的计算
- 时间复杂度的计算
- 时间复杂度的计算
- 时间复杂度的计算
- 浅谈回溯与深度优先搜索
- 获取SpringMvc对应的子容器
- 基于Flume的美团日志收集系统
- POJ1003算法解析
- spring boot 配置文件(application.yml)中的属性值配置
- 时间复杂度的计算
- 自动生成.gitignore文件
- Netflix Conductor微服务编排平台基于docker容器化安装步骤
- mysql主从复制与读写分离
- Android学习之本地广播的使用
- 【QT】Qt 5.9 QWidget程序执行过程分析
- 球冠面积
- 欢迎使用CSDN-markdown编辑器
- 【c++】模板为什么不支持分离编译