1、课程定位
算法设计与分析训练的是“把问题变成可计算方案”的能力。数据结构更偏向组织数据,算法设计更偏向选择策略、证明正确性、估计复杂度,并判断一个问题到底能不能高效求解。
| 项目 |
内容 |
| 课程 |
算法设计与分析 |
| 教师 |
王振波 |
| 院校 |
清华大学 |
| 资料来源 |
清华/学堂在线公开课程大纲 + 常见算法设计课程内容 |
| 学习定位 |
408 主干入门后的算法能力补强,衔接刷题、AI、网络安全和系统项目 |
| 笔记范围 |
0401~0411,对应算法设计与分析 11 个主题 |
这一组笔记先按“算法范式”整理,而不是按题库刷题顺序整理。每章保留问题模型、核心算法、正确性证明思路、复杂度和复盘清单,后面做题时再把错题和代码实验补进对应章节。
2、参考大纲
| 来源 |
采用内容 |
| 清华大学 / 学堂在线《算法设计与分析》 |
算法基础、图、贪心、分治、动态规划、网络流、NP、近似算法、局部搜索、随机算法 |
| 国家高等教育智慧教育平台课程页 |
课程简介、教师和 11 章大纲 |
| 中国科学院大学《计算机算法设计与分析》大纲 |
分治、贪心、动态规划、回溯、分支限界、NP、概率算法、近似算法等常见算法课模块 |
| 中国大学 MOOC 算法设计与分析专题课 |
分而治之、动态规划、贪心策略和算法建模训练 |
3、学习主线
| 部分 |
章节 |
核心问题 |
后续连接 |
| 建模与分析 |
Chap 1-2 |
如何描述问题、算法和复杂度 |
伪代码、证明、渐进分析 |
| 图与贪心 |
Chap 3-4 |
如何用局部选择解决结构化问题 |
BFS/DFS、最短路、MST、调度 |
| 分治与 DP |
Chap 5-6 |
如何把问题拆开,如何复用子问题 |
归并、快排、FFT、背包、序列比对 |
| 网络流 |
Chap 7 |
如何用流量守恒描述匹配和割 |
最大流、最小割、二分图匹配 |
| 困难问题 |
Chap 8 |
如何判断问题可能没有多项式精确算法 |
规约、NP、NP 完全 |
| 应对策略 |
Chap 9-11 |
精确算法太难时如何近似、局部搜索或随机化 |
近似比、局部最优、概率界 |
4、章节索引
| 编号 |
Chap |
主题 |
复盘重点 |
笔记 |
| 0401 |
1 |
算法导论与稳定匹配 |
问题形式化、稳定匹配、Gale-Shapley、正确性和复杂度 |
查看 |
| 0402 |
2 |
算法分析基础 |
可处理性、渐进增长、常见时间复杂度、递推与摊还入口 |
查看 |
| 0403 |
3 |
图算法基础 |
图建模、遍历、二分图、连通性、DAG 与拓扑序 |
查看 |
| 0404 |
4 |
贪心算法 |
区间调度、延迟最小化、缓存、最短路、最小生成树、聚类 |
查看 |
| 0405 |
5 |
分治策略 |
归并、逆序数、最近点对、大整数乘法、矩阵乘法、FFT |
查看 |
| 0406 |
6 |
动态规划 |
加权区间调度、分段最小二乘、背包、RNA、序列比对、最短路 |
查看 |
| 0407 |
7 |
网络流 |
流与割、最大流最小割、Ford-Fulkerson、增广路、二分图匹配 |
查看 |
| 0408 |
8 |
NP 与计算困难性 |
多项式规约、NP、NP 完全、典型规约、co-NP |
查看 |
| 0409 |
9 |
近似算法 |
负载均衡、中心选择、顶点覆盖、LP rounding、背包近似 |
查看 |
| 0410 |
10 |
局部搜索 |
优化地形、最大割、局部最优、Nash 均衡和稳定性代价 |
查看 |
| 0411 |
11 |
随机算法 |
随机化思想、期望线性性、MAX 3-SAT、Chernoff Bounds |
查看 |
5、复盘顺序
| 场景 |
建议顺序 |
| 快速补算法主线 |
0401 -> 0402 -> 0404 -> 0405 -> 0406 -> 0408 |
| 刷题前置 |
0402 -> 0403 -> 0404 -> 0405 -> 0406 -> 0407 |
| 图算法专题 |
0403 -> 0404 -> 0407 |
| 困难问题专题 |
0408 -> 0409 -> 0410 -> 0411 |
| 面试复盘 |
0402 -> 0404 -> 0405 -> 0406 -> 0409 |
6、统一复盘模板
| 复盘项 |
要回答的问题 |
| 问题模型 |
输入、输出、约束、目标函数是什么? |
| 算法策略 |
属于贪心、分治、DP、流、近似还是随机化? |
| 正确性 |
用交换论证、归纳、不变式、割性质还是规约证明? |
| 复杂度 |
时间、空间、最坏、平均、期望或近似比是多少? |
| 边界 |
空输入、重复元素、不可行实例、退化图如何处理? |
| 实现 |
能否写出伪代码,并说明关键数据结构? |
7、整理口径
算法设计与分析内容跨度很大,博客这里先整理成可复习的知识框架。每章优先保留“为什么这样设计算法”和“怎么证明它对”,代码细节后续结合题目慢慢补。