Algorithms to Remember
递归主定理
,
- :
- :
- , (正则条件):
AVL 树(平衡二叉搜索树)
- 旋转:左旋/先右旋后左旋/右旋/先左旋后右旋(根据失衡节点与子节点的平衡因子决定)
- 插入、删除:自底向上解决失衡节点
红黑树
WIP
图的遍历
DFS 和 BFS 均有 时间复杂度和 空间复杂度
搜索算法
- 暴力搜索:线性搜索、BFS、DFS
- 自适应搜索:二分查找、哈希表、二叉搜索树、AVL 树

排序算法
计数排序:计算计数数组的前缀和,从后往前填充

图论算法
- 并查集:第一次查询操作(包括
find和join),后续趋近于 - DFS、BFS:(使用栈/队列实现,注意标记和检测
visited数组的时间) - 最小生成树:Prim (距离数组实现)/(优先队列实现)(这个关系与Dijkstra算法一致),Kruskal (优先队列、并查集实现)
- 拓扑排序:(本质上与BFS相同)
- 通用搜索算法总结:(栈/队列)、(优先队列,如果可以修正队列元素则为)、(距离数组)
- DFS、BFS:使用栈与队列,指定起点(优先级/距离均为1)
- 拓扑排序:使用队列,起点为入度为0的节点(优先级/距离均为1)
- Dijkstra:使用节点到起点的距离作为距离数组元素/边的优先级
- Prim:使用节点到生成树到距离作为距离数组元素/边的优先级
- 最短路径:
- Dijkstra:单源、权值非负,(稠密图)/(稀疏图)
- A*可用于权值修正,更快找到首个有效解
- 要添加边数限制,则不适用于Dijkstra,只能采用二维距离数组(动态规划思想,同时考虑不同边数的路径),
- Bellman-Ford:单源、负权边、检测负权回路,(可使用队列优化稀疏图平均情况、最优情况的时间复杂度)
- Floyd-Warshall:多源、负权边、检测负权回路(算法结束后检测
dist[i][i]),(矩阵可压缩为二维)
- Dijkstra:单源、权值非负,(稠密图)/(稀疏图)