目录
一.时间复杂度&&空间复杂度的定义
二.使用时间复杂度的优势
三.判断时间复杂度的实用方法&&计算窍门
四.时间复杂度的常见类型
五.时间复杂度的细分
一,时间复杂度&&空间复杂度的定义:
1.时间复杂度的定义:
时间复杂度的称是渐进时间复杂度,表示算法的执行时间与数据模型之间的增长关系。
2.空间复杂度的定义:
空间复杂度的全称是渐进空间复杂度,表示算法的存储空间与数据模型之间的关系。
二,使用时间复杂度的优势:
古人云:“反者,道之动。”
与实现判断(时间复杂度)相反的就是:用事后统计法
那么事后统计法有什么问题呢?
1.测试结果非常依赖测试环境
2.测试结果受数据规模的影响很大
综上:我们更偏向使用时间复杂度来判断一个程序的运行时间。
三.判断时间复杂度的实用方法&&计算窍门
1.首先需要知道:所有代码的执行时间T(n)与每行代码的执行次数f(n)成正比
2.有三个实用方法:
(1).只关注循环执行次数最多的一段代码
(2).加法法则:总复杂度等于量级最大的那段代码的复杂度
(3)乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积
3.计算窍门:
(1)一个for循环的时间复杂度等于循环次数乘以循环体代码的复杂度。
(2)if-else结构的复杂度取决于if的条件判断复杂度和两个分枝部分的复杂度,总体复杂度取三者最大。
四.时间复杂度的常见类型
1.O(1):一般情况下,只要代码中不存在循环语句,递归语句,即使有成千上万行的代码,其时间复杂度也是O(1)
2.O(logn),O(nlogn):归并排序,快速排序的时间复杂度都是O(nlogn).
3.O(n^2)一般是两个循环产生的。
4.O(n^3)依此类推,是三个循环产生的。
五.时间复杂度的细分
1.最好,最坏,平均,均摊时间复杂度
(1)最好情况的时间复杂度:
最理想情况下,执行这段代码的时间复杂度
(2)最坏情况的时间复杂度:
最糟糕情况下,执行这段代码的时间复杂度
(3)平均情况的时间复杂度:
这个值是概率论中的加权平均值,也叫作期望值,所以平均时间复杂度的全称应该叫加权平均时间复杂度或者期望时间复杂度
(4)均摊时间复杂度