第 21 讲:图的表示与广度优先搜索
图的术语与两种表示的完整取舍(邻接表 vs 邻接矩阵)、稀疏与稠密的分界、BFS 的三色不变式与正确性证明、最短路径树、二分图判定,以及双向 BFS 与 0-1 BFS 这两个实用变体。
图的术语与两种表示的完整取舍(邻接表 vs 邻接矩阵)、稀疏与稠密的分界、BFS 的三色不变式与正确性证明、最短路径树、二分图判定,以及双向 BFS 与 0-1 BFS 这两个实用变体。
DFS 的时间戳与括号定理、四类边与环检测、拓扑排序的两种实现及其正确性、Kosaraju 与 Tarjan 求强连通分量的完整推导,以及缩点后的凝聚图为什么一定是 DAG。
不相交集合 ADT、按秩合并与路径压缩两种优化各自的界、组合后 O(α(n)) 的含义与反 Ackermann 函数、带权并查集与可撤销并查集,以及为什么它在 Kruskal 和连通性问题中不可替代。
割性质与环性质这两条定理如何一次性证明所有 MST 算法的正确性、Kruskal 与 Prim 的实现与复杂度对比、边权唯一时 MST 唯一的证明,以及 MST 与最短路径树的本质区别。
松弛操作与最优子结构、Dijkstra 的贪心正确性证明与「为什么怕负权」、Bellman-Ford 的动态规划视角与负环检测、DAG 上的线性最短路,以及 A* 如何用启发式把 Dijkstra 加速几个数量级。
Floyd-Warshall 的动态规划推导与「为什么 k 必须是最外层循环」、路径重构、传递闭包与 Warshall 算法、Johnson 用重赋权把负权图转成非负权图的完整技巧,以及三种全源方案的选型。
流网络与残量网络、Ford-Fulkerson 与增广路定理、最大流最小割定理的完整证明、Edmonds-Karp 与 Dinic 的复杂度、König 定理与二分匹配的三个等价问题,以及如何把看似无关的问题归约为流。
分治的三步框架与适用判据、最大子数组、Karatsuba 大整数乘法、Strassen 矩阵乘法为什么能省下一次乘法、平面最近点对的 Θ(n log n) 与「只需检查 7 个点」的证明、快速幂与快速傅里叶变换。
系统穷举的通用框架:状态-选择-撤销三要素、子集与排列的枚举与去重、N 皇后的位运算实现、剪枝的四种手段、分支限界与 A* 的关系,以及回溯、贪心与动态规划三者共同的底层结构。
贪心的两个必要条件、交换论证与「贪心保持领先」两种证明模板、活动选择与区间调度的完整证明、Huffman 编码的最优性、分数背包与 0-1 背包的分界,以及拟阵为什么是贪心正确性的统一理论。