⚠ 当前无法加载公式渲染库(KaTeX),请检查网络连接后刷新。

《算法设计与分析》电子笔记

以课件(CH01–CH06 + Review + P/NP 科普)与 2021 复习大纲为基准 · 已按模块合并为 4 篇 HTML:页顶有模块切换条、左侧目录可跳转,打印自动分页。
教师:刘瑶 · 教材:王晓东《计算机算法设计与分析》(参考屈婉玲第 3 版)· 考核:平时(考勤/报告/讲座)+ 期末(两届分别记为开卷 40% / 卷面 50%,以当年通知为准)。
模块 2

动态规划与贪心(CH03 + CH04)

四步法矩阵连乘LCS最大子段和三角剖分图像压缩0-1背包(伪多项式)最优BST贪心两要素活动安排+证明背包 vs 0-1背包Dijkstra多机调度 LPT

大题主力章:DP/贪心各一道构造题;贪心正确性证明模板(交换论证)务必背熟。

CH03 动态规划 CH04 贪心
模块 3

回溯与分支限界(CH05 + CH06)

解空间树子集树/排列树框架(算法填空原题)剪枝函数TSP/0-1背包/装载/n皇后/最大团/批处理/m着色分支限界三区别FIFO/优先队列布线附 NP 完全性入门

“解空间树 + 剪枝函数 + 搜索过程”是固定答题格式。

CH05 回溯 CH06 分支限界
模块 4

NP 理论 · 网络流 · 近似算法 · 考试要点

P/NP/NPC/NPH归约方向判断题清单NPC 证明模板大纲归约链自身归约最大流最小割负载均衡/定价算法/取整法考试题型与答题四注意事项

2021 年历史复习大纲涉及的拓展专题:本笔记根据旧大纲与教材补写。相关分值不是 2026 年预测;网络流练习应完整写出增广路径。

怎么从忘记基础学到能独立答题?

第一遍(听懂与记忆):补数学基础 → 分治的递归式 → DP 五步法 → 贪心证明 → 解空间树 → NPC 归约,学完一节就做该模块展开题。

第二遍(亲自写答案):拿往年题,先不看解析,写“输入与约束 / 算法思想 / 正确性证明 / 时间空间复杂度”,然后对照答案。书面算法题与 Python 编程题分开训练。

求职并行:Python 算法衔接 · 可运行示例 · 教材、视频与题库。

自检:学会动态规划应该能做什么?

不看答案独立说出状态的物理含义、初值与转移,说明遍历次序,手算小规模 DP 表,分析 \(O(nC)\) 等复杂度的适用条件,并写一个反例解释为什么不能用相似的贪心替代。

怎么用这套笔记

场景建议
上课跟进CH 课件对应模块对照读;每章写一段“适用条件 + 复杂度”小结(README 建议,期末直接复用)。
课后题独立完成;卡住看 作业/ 历届类似题;尽量用 Python 实现(与求职笔试题高度重叠)。
期末冲刺① 复习资料/2021年算法设计与分析复习大纲.pptx(16 页历史复习范围,先与本学期通知核对)→ ② 模拟题1(中文计算)→ ③ 2018 秋(有答案)→ ④ B2 无答案 PDF 限时 → ⑤ B1/C/A 查漏;判断题对照 B1/B2 差异表订正。
概念补漏什么是P问题、NP问题和NPC问题.ppt + Final-v2/Review-v2(本笔记模块 4 已浓缩)。

历年卷使用提示(重要勘误)

卷提示
B1 vs B2同一题库两份卷,判断前 7 题相同;第 2 题(A≤pB 且 A 是 NP 难 ⟹ B 也是 NP 难)B1 打 √ 正确、B2 有误——以数学推导为准。
年份不详 A / 模拟题 2同源(前 5 题相同),英文命题,判断题 + 增长率排序,两份都做。
来自知博的试题手写拍照 3 套,加练用。
配色说明:本课程笔记用深绿系,与两门随机课的深蓝系区分;模板、导航、打印行为完全一致。前置数学(求导/积分/级数/ODE/矩阵/复数)见 ../学习导航.html#math-foundation——算法课的主定理、递推式求解同样用得上。

Python 实践与求职衔接

从原专题文件整合而来,直接在本课程目录内阅读。

目标:课内能证明、Python 能实现、面试能解释。适用于后端、测试开发、软件开发等岗位的通用算法能力培养;实际考核依公司、岗位而定。

一、课程知识 → Python → 高频面试场景

课程主题 Python 做法 面试迁移 容易错的边界
渐近分析 list/dict/set 时间代价对比 解释空间换时间、均摊复杂度 list.insert(0,x) 通常 O(n)
二分与分治 bisect_left、自己写二分、归并排序 有序数组边界、二分答案 左闭右开 / 死循环 / 重复元素
动态规划 LCS、0-1 背包、最长递增子序列 子问题状态设计、滚动数组 初始化、容量正序误用
贪心 无权活动安排、区间排序、堆 证明策略正确的反例/交换论证 带权活动不能直接贪心
回溯 n 皇后、子集、组合 重复去重、剪枝、搜索顺序 修改路径后必须回退
图和网络流 BFS、DFS、heapq、Dijkstra、残量网络 最短路径、依赖关系、路由 Dijkstra 要求非负边权
NP 理论 归约写出 iff 证明 说明不可扩展性、精确与近似权衡 归约必须从已知难问题指向目标

二、8 周可调整路线(每周 3–4 次,每次 30–60 分钟)

三、Python 标准库速查与正确使用

from collections import Counter, defaultdict, deque
from bisect import bisect_left, bisect_right
from heapq import heappush, heappop
from functools import lru_cache

q = deque([0]); q.append(1); q.popleft()    # 两端操作 O(1)
idx = bisect_left([1, 2, 2, 4], 2)          # 最左 2,下标 1

四、做一道题的 5 句话(面试答题模板)

  1. 澄清输入:空数组、重复值、边界、是否有负数,约束范围是什么?
  2. 说朴素法:明确它为什么太慢,时间空间各多少。
  3. 提出优化:为什么选择某数据结构或状态转移,给出不变量。
  4. 分析复杂度:最坏/平均/均摊不要混用;说明额外空间。
  5. 举例测试:空集、单元素、重复值、极端值、无解/多解;必要时与暴力解交叉验证。

五、与项目和岗位结合

后端侧:可将优先队列用于异步任务调度、最短路用于路径搜索;测试开发侧:用随机对照测试与性质测试验证算法;数据方向:把随机过程仿真结果与数学期望对照,强调模型假设。项目叙述不要只说“用了 DP”,应说清数据规模、算法选择、测试覆盖与性能改善是否有实测证据。

六、随附代码

七、资料推荐

↑ 返回本课目录 · 课程资源与视频