数据结构、算法复杂度一览表
搜索算法(来源)
| 算法 | 数据结构 | 时间复杂度 | 空间复杂度 | |||
|---|---|---|---|---|---|---|
| 平均 | 最差 | 最差 | ||||
| 深度优先搜索 | 图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实现
	
 
		 评论加载中,请稍后...
    评论加载中,请稍后...