1、基础概念
1)对数 对数阶
2)线性对数阶(排序的最快算法也就是nlogn)
3)平均时间复杂度和最坏时间复杂度
平均时间复杂度是指所有可能的输入实例均以等概率出现的情况下,该算法的运行时间。
最坏情况下的时间复杂度称最坏时间复杂度。一般讨论的时间复杂度均是最坏情况下的时间复杂度。
2、复杂度总结
算法 | 时间复杂度 | 描述 |
---|---|---|
常量(Constant) | O(1) | 操作的数量为常数,与输入的数据的规模无关。 |
对数(Logarithmic) | O(log n) | 操作的数量与输入数据的规模 n 的比例是 log2 (n)。二分法 |
线性(Linear) | O(n) | 操作的数量与输入数据的规模 n 成正比。循环 |
平方(Quadratic) | O(n2) | 操作的数量与输入数据的规模 n 的比例为二次平方。双重循环 |
立方(Cubic) | O(n3) | 操作的数量与输入数据的规模 n 的比例为三次方。三重循环 |
指数(Exponential) | O(2n) O(kn) O(n!) | 指数级的操作,快速的增长。n = 20 -> 1048576 operations |
3、排序的时间复杂度
4、常用数据结构的时间复杂度
下图中树的操作时间都是平均时间,最坏时间是O(n);
hashMap调整容量:O(n)。其他都是O(1)
Data Structure | Add | Find | Delete | GetByIndex** ** |
---|---|---|---|---|
Linked list | O(1) | O(n) | O(n) | O(n) |
Array list | O(1) | O(n) | O(n) | O(1) |
Stack | O(1) | - | O(1) | - |
Queue | O(1) | - | O(1) | - |
HashSet、table、map | O(1) | O(1) | O(1) | - |
Tree based set (SortedSet) | O(log n) | O(log n) | O(log n) | - |
AVL树 | O(log n) | O(log n) | O(log n) | |
红黑树 | O(log n) | O(log n) | O(log n) | |
Btree 、B+ tree | O(log n) | O(log n) | O(log n) | |
堆 | O(log n) | O(n) | O(n) |
堆 Heap/PriorityQueue
插入:O(log n)
删除最大/小值:O(log n)
抽取最大/小值:O(log n)
查找最大/小值:O(1)
查找其他值:O(n)
删除:O(n)