算法(1)时间复杂度 和 空间复杂度
2016-08-11 08:34
204 查看
•算法时间复杂度的定义:在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作:T(n)=O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度。其中f(n)是问题规模n的某个函数。
•好长好长,没想到定义这个概念的老家伙比小甲鱼还罗嗦。(关键需要知道执行次数==时间)
•那么如何分析一个算法的时间复杂度呢?即如何推导大O阶呢?我们给大家整理了以下攻略:
–用常数1取代运行时间中的所有加法常数。
–在修改后的运行次数函数中,只保留最高阶项。
–如果最高阶项存在且不是1,则去除与这个项相乘的常数。
–得到的最后结果就是大O阶。
对数阶
inti = 1, n = 100;
while(i < n )
{
i= i*2;
}
•由于每次i*2之后,就举例n更近一步,假设有x个2相乘后大于或等于n,则会退出循环。
•于是由2^x = n得到x = log(2)n,所以这个循环的时间复杂度为O(logn)。
•其实理解大O推导不算难,难的是对数列的一些相关运算,这更多的是考察你的数学知识和能力。
常见的时间复杂度
•常用的时间复杂度所耗费的时间从小到大依次是:O(1) < O(logn)< (n) < O(nlogn) < O(n^2)
< O(n^3) < O(2^n) < O(n!) < O(n^n)
•好长好长,没想到定义这个概念的老家伙比小甲鱼还罗嗦。(关键需要知道执行次数==时间)
•那么如何分析一个算法的时间复杂度呢?即如何推导大O阶呢?我们给大家整理了以下攻略:
–用常数1取代运行时间中的所有加法常数。
–在修改后的运行次数函数中,只保留最高阶项。
–如果最高阶项存在且不是1,则去除与这个项相乘的常数。
–得到的最后结果就是大O阶。
对数阶
inti = 1, n = 100;
while(i < n )
{
i= i*2;
}
•由于每次i*2之后,就举例n更近一步,假设有x个2相乘后大于或等于n,则会退出循环。
•于是由2^x = n得到x = log(2)n,所以这个循环的时间复杂度为O(logn)。
•其实理解大O推导不算难,难的是对数列的一些相关运算,这更多的是考察你的数学知识和能力。
常见的时间复杂度
例子 | 时间复杂度 | 装逼术语 |
5201314 | O(1) | 常数阶 |
3n+4 | O(n) | 线性阶 |
3n^2+4n+5 | O(n^2) | 平方阶 |
3log(2)n+4 | O(logn) | 对数阶 |
2n+3nlog(2)n+14 | O(nlogn) | nlogn阶 |
n^3+2n^2+4n+6 | O(n^3) | 立方阶 |
2^n | O(2^n) | 指数阶 |
< 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)
- 一道看上去很吓人的算法面试题:如何对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)