- 算法基础
- 时间复杂度
- 排序算法
- 数据结构
- 递归公式
- 主定理
- 表达式
- 链表
- 单向链表
- 双向链表
- 二叉树
- 类型
- 遍历方式
- 位运算
- 待定
- 图论
- 基础
- BFS
- DFS
- 算法对比
- 参考资料
- Algorithms and Data Structures Cheatsheet
| 类型 | 表达式 | 例子 | 代码示例 |
|---|---|---|---|
| 常数 | O(1) |
|
add() |
| 对数 | O(logn) |
|
for (i = 1 to Array.length, i = 2*i) |
| 线性 | O(n) |
|
for (i = 1 to Array.length, i += 1) |
| 线性方程 | O(nlogn) |
|
for (i = 1 to Array.length, i += 1) |
| 二次方 | O(n^2) |
|
for (i = 1 to Array.length, i += 1) |
| 多项式 | O(n^c) |
|
for (i = 1 to Array.length, i += 1) |
| 指数 | O(2^n) |
|
func recursion() |
| 类型 | 最好时间 | 平均时间 | 最坏时间 | 空间 | 稳定性 |
|---|---|---|---|---|---|
| 快速排序 | O(nlogn) | O(nlogn) | O(n^2) | O(logn) | 不稳定 |
| 归并排序 | O(nlogn) | O(nlogn) | O(nlogn) | O(n) | 稳定 |
| 堆排序 | O(nlogn) | O(nlogn) | O(nlogn) | O(1) | 不稳定 |
| 冒泡排序 | O(n) | O(n^2) | O(n^2) | O(1) | 稳定 |
| 插入排序 | O(n) | O(n^2) | O(n^2) | O(1) | 稳定 |
| 桶排序 | O(n) | O(n) | O(n^2) | O(n) | 稳定 |
| 类型(平均) | 获取元素 | 查找元素 | 插入元素 |
|---|---|---|---|
| 数组 | O(1) | O(n) | O(n) |
| 链表 | O(n) | O(n) | O(1) |
| 双向链表 | O(n) | O(n) | O(1) |
| 栈 | O(1) | O(n) | O(1) |
| 堆 | O(1) | O(n) | O(logn) |
| 队列 | O(1) | O(n) | O(1) |
| 哈希表 | O(1) | O(1) | O(1) |
| 二叉搜索树 | O(logn) | O(logn) | O(logn) |
| 跳表 | O(logn) | O(logn) | O(logn) |
| 类型 | T(n) | 例子 |
|---|---|---|
| T(n)=T(n/2)+1 | O(logn) | 二分查找 |
| T(n)=2T(n/2)+1 | O(n) | 二叉树遍历 |
| T(n)=2T(n/2)+n | O(nlogn) | 归并排序 |
| T(n)=T(n−1)+n | O(n^2) | 插入排序 |
| T(n)=2T(n−1)+1 | O(2^n) | 回溯算法 |
当 a≥1, b≥2, c>0 且 T(n) 在非负区间内满足 T(n) = aT(n/b)+O(nc),假定 T(0)=0,T(1)=O(1),则
| 类型 | T(n) |
|---|---|
| c<log(b)a | O(n * log(b)a) |
| c=log(b)a | O(n^c * logn) |
| c>log(b)a | O(n^c) |
| 类型 | 表达式 | 结果 |
|---|---|---|
| 调和级数 | 1+1/2+1/3+…+1/n | log(e)n |
| 自然对数 | (1+1/n)^n | e |
| 等差数列 | n1+n2+n3+n4..n | n(n1+n)/2 |
| 等比数列 | n1+n2+n3+n4..n | n1(1-q^n)/(1-q) |
| 卡特兰数 |
| 类型 | 简介 |
|---|---|
| 完全二叉树 | 除了最后一层的右边,其他节点都已经填满 |
| 满二叉树 | 每个节点有零或者两个子节点 |
| 完美二叉树 | 所有节点都被填满 |
| 类型 | 例子 |
|---|---|
| 前序遍历 | 父节点 -> 左节点 -> 右节点 |
| 中序遍历 | 左节点 -> 父节点 -> 右节点 |
| 后序遍历 | 左节点 -> 右节点 -> 父节点 |
| 层序遍历 | 第一层 -> 第二层 -> 第三层 |
| 问题类型 | 算法 | 要求 | 时间复杂度 |
|---|---|---|---|
| 判断无向图是否有环 |
|
- | O(E+V) |
| 判断有向图是否有环 | - | - | - |
| 无向图最短路径 | - | - | - |
| 有向图最短路径 | - | - | - |
| 所有结点对最短路径 | - | - | - |
| 最小生成树 | - | - | - |
| 强连通分量 | - | - | - |
| 拓扑排序 | - | - | - |



