算法的时间复杂度
2017-04-08 18:43
134 查看
如何推导大O阶:
1、用常数1取代运行时间中的所有加法常数。
2、在修改后的运行次数函数中,只保留最高阶项。
3、如果最高阶项存在且不是1,则去除与这个项相乘的常数。
结果就是大O阶。
常数阶:
eg:
高斯算法:f(n)
int a = 0,b=n;
sum = (a+b)*b/2
syso(sum)
这个时间复杂度是O[1]
因为真正耗费时间的是中间这句算法,剩下两句跟n没有关系
如果变成
int a = 0,b=n;
sum = (0+n)*n/2
sum = (0+n)*n/2
sum = (0+n)*n/2
sum = (0+n)*n/2
sum = (0+n)*n/2
syso(sum)
这个时间复杂度还是O[1]
为什么:因为执行的代码次数,与n的大小并无关系。
线性阶:
对数阶:
平方阶:
常用的时间复杂度耗费时间从小到大依次是:
O[1] < O[logn] < O
< O[nlogn] < O[n^2] < O[n^3] < O[2^n] < O[n!] < O[n^n]
1、用常数1取代运行时间中的所有加法常数。
2、在修改后的运行次数函数中,只保留最高阶项。
3、如果最高阶项存在且不是1,则去除与这个项相乘的常数。
结果就是大O阶。
常数阶:
eg:
高斯算法:f(n)
int a = 0,b=n;
sum = (a+b)*b/2
syso(sum)
这个时间复杂度是O[1]
因为真正耗费时间的是中间这句算法,剩下两句跟n没有关系
如果变成
int a = 0,b=n;
sum = (0+n)*n/2
sum = (0+n)*n/2
sum = (0+n)*n/2
sum = (0+n)*n/2
sum = (0+n)*n/2
syso(sum)
这个时间复杂度还是O[1]
为什么:因为执行的代码次数,与n的大小并无关系。
线性阶:
对数阶:
平方阶:
常用的时间复杂度耗费时间从小到大依次是:
O[1] < O[logn] < O
< O[nlogn] < O[n^2] < O[n^3] < O[2^n] < O[n!] < O[n^n]
相关文章推荐
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 斐波那契数的 O(lgn) 时间复杂度算法
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- C/C++面试之算法系列--1~n无序数组时间复杂度为O(n)排序
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 语句频度问题和算法得时间复杂度。
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- C/C++面试之算法系列--时间复杂度为o(N)查找1至N-1构成的a[N]重复元素
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)