数据结构、算法复杂度一览表
搜索算法(来源)
算法 | 数据结构 | 时间复杂度 | 空间复杂度 | |||
---|---|---|---|---|---|---|
平均 | 最差 | 最差 | ||||
深度优先搜索 | 图G(V,E), V为顶点集, E为边集 | - |
O(|E| + |V|) |
O(|V|) |
||
广度优先搜索 | 图G(V,E), V为顶点集, E为边集 | - |
O(|E| + |V|) |
O(|V|) |
||
二分搜索 | n元已排数组 | O(log(n)) |
O(log(n)) |
O(1) |
||
线性搜索(暴力法) | 数组 | O(n) |
O(n) |
O(1) |
||
Dijkstra最短路径算法(最小堆作为优先队列) | 图G(V,E), V为顶点集, E为边集 | O((|V| + |E|) log |V|) |
O((|V| + |E|) log |V|) |
O(|V|) |
||
Dijkstra最短路径算法(未排数组作为优先队列) | 图G(V,E), V为顶点集, E为边集 | O(|V|^2) |
O(|V|^2) |
O(|V|) |
||
Bellman-Ford最短路径算法 | 图G(V,E), V为顶点集, E为边集 | O(|V||E|) |
O(|V||E|) |
O(|V|) |
排序算法(来源)
算法 | 数据结构 | 时间复杂度 | 辅助空间复杂度 | ||||
---|---|---|---|---|---|---|---|
最优 | 平均 | 最差 | 最差 | ||||
快速排序 | 数组 | O(n log(n)) |
O(n log(n)) |
O(n^2) |
O(log(n)) |
||
归并排序 | 数组 | O(n log(n)) |
O(n log(n)) |
O(n log(n)) |
O(n) |
||
堆排序 | 数组 | O(n log(n)) |
O(n log(n)) |
O(n log(n)) |
O(1) |
||
冒泡排序 | 数组 | O(n) |
O(n^2) |
O(n^2) |
O(1) |
||
插入排序 | 数组 | O(n) |
O(n^2) |
O(n^2) |
O(1) |
||
选择排序 | 数组 | O(n^2) |
O(n^2) |
O(n^2) |
O(1) |
||
桶排序 | 数组 | O(n+k) |
O(n+k) |
O(n^2) |
O(nk) |
||
基数排序 | 数组 | O(nk) |
O(nk) |
O(nk) |
O(n+k) |
数据结构(来源)
数据结构 | 时间复杂度 | 空间复杂度 | |||||||
---|---|---|---|---|---|---|---|---|---|
平均 | 最差 | 最差 | |||||||
索引 | 查找 | 插入 | 删除 | 索引 | 查找 | 插入 | 删除 | ||
基本数组 | O(1) |
O(n) |
- |
- |
O(1) |
O(n) |
- |
- |
O(n) |
动态数组 | O(1) |
O(n) |
O(n) |
- |
O(1) |
O(n) |
O(n) |
- |
O(n) |
单向链表 | O(n) |
O(n) |
O(1) |
O(1) |
O(n) |
O(n) |
O(1) |
O(1) |
O(n) |
双向链表 | O(n) |
O(n) |
O(1) |
O(1) |
O(n) |
O(n) |
O(1) |
O(1) |
O(n) |
跳表 | O(n) |
O(log(n)) |
O(log(n)) |
O(log(n)) |
O(n) |
O(n) |
O(n) |
O(n) |
O(n log(n)) |
散列表 | - |
O(1) |
O(1) |
O(1) |
- |
O(n) |
O(n) |
O(n) |
O(n) |
二叉查找树 | - |
O(log(n)) |
O(log(n)) |
O(log(n)) |
- |
O(n) |
O(n) |
O(n) |
O(n) |
B树 | - |
O(log(n)) |
O(log(n)) |
O(log(n)) |
- |
O(log(n)) |
O(log(n)) |
O(log(n)) |
O(n) |
红黑树 | - |
O(log(n)) |
O(log(n)) |
O(log(n)) |
- |
O(log(n)) |
O(log(n)) |
O(log(n)) |
O(n) |
AVL树 | - |
O(log(n)) |
O(log(n)) |
O(log(n)) |
- |
O(log(n)) |
O(log(n)) |
O(log(n)) |
O(n) |
堆(来源)
堆 | 时间复杂度 | ||||||
---|---|---|---|---|---|---|---|
堆调整 | 最大值查找 | Extract Max | Increase Key | 插入 | 删除 | 合并 | |
链表(已排序) | - |
O(1) |
O(1) |
O(n) |
O(n) |
O(1) |
O(m+n) |
链表(未排序) | - |
O(n) |
O(n) |
O(1) |
O(1) |
O(1) |
O(1) |
二叉堆 | O(log(n)) |
O(1) |
O(log(n)) |
O(log(n)) |
O(log(n)) |
O(log(n)) |
O(m+n) |
二项堆 | - |
O(log(n)) |
O(log(n)) |
O(log(n)) |
O(log(n)) |
O(log(n)) |
O(log(n)) |
斐波那契堆 | - |
O(1) |
O(log(n))* |
O(1)* |
O(1) |
O(log(n))* |
O(1) |
图(来源)
表示方法 | 存储 | 增加顶点 | 增加边 | 移除顶点 | 移除边 | 查询 |
---|---|---|---|---|---|---|
邻接表 | O(|V|+|E|) |
O(1) |
O(1) |
O(|V| + |E|) |
O(|E|) |
O(|V|) |
Incidence list | O(|V|+|E|) |
O(1) |
O(1) |
O(|E|) |
O(|E|) |
O(|E|) |
邻接矩阵 | O(|V|^2) |
O(|V|^2) |
O(1) |
O(|V|^2) |
O(1) |
O(1) |
关联矩阵 | O(|V| ⋅ |E|) |
O(|V| ⋅ |E|) |
O(|V| ⋅ |E|) |
O(|V| ⋅ |E|) |
O(|V| ⋅ |E|) |
O(|E|) |
渐近符号(来源)
letter | 界限 | growth | 性能 |
---|---|---|---|
(theta) Θ | upper and lower, tight | equal | = n |
(big-oh) O | upper, tightness unknown | less than or equal | ≤ n |
(small-oh) o | upper, not tight | less than | < n |
(big omega) Ω | lower, tightness unknown | greater than or equal | ≥ n |
(small omega) ω | lower, not tight | greater than | > n |
大O复杂度图表(来源)
上一篇:Http长连接200万尝试及调优
下一篇:栈和队列的面试题Java实现