COMP4133AADS 期末复习总纲(以 Revision 大纲 + 练习题为主线)
目标:把“会考什么”压成一份可直接背、可直接手算的清单。
建议复习顺序:先刷练习 → 总结模板 → 无计算器限时手算。
0. 考试形式与复习原则
考试形式(你需要匹配的输出能力)
- 四题全做(Answer all FOUR questions),总分 100。
- No calculators(所有题都能手算)。
- 每题常见结构:定义/解释(短答) + 手推/计算(主分) + 复杂度分析/理由(加分点)。
复习原则(效率最高)
- 每个主题先做对应练习 md(不会就回看讲义/笔记)。
- 每个主题写一张“模板卡片”(伪代码 + 关键公式 + 复杂度 + 常见坑)。
- 最后做“手算训练”:哈希表插入、旋转、BFS/DFS 顺序、Prim/Dijkstra 表、DP 表、BM/KMP 表、Trie 结构。
1. Big-O 与 Primitive Operations(基础必考)
1.1 Big-O 定义(必须会写)
是 :存在常数 与 ,使得对所有 ,
典型题型
- 证明题:如证明 是 。
- 化简题:如 是 。
- 比较增长率:。
证明模板(手写通用)
要证 :
- 对 足够大时给上界:
- 指定 和
- 写一句:因此对所有 成立。
1.2 Primitive Operations(会数操作 → 推复杂度)
常见 primitive ops:赋值、引用、算术、比较、数组按下标访问、方法调用、返回等。
典型题型
- 给一段代码:数 primitive operations 得 → 写 Big-O。
- 常见套路:
- 双层循环:
- 三层循环:
- 一层循环 + 内部常数:
- 循环边界是 、:仍是
2. Maps 与 Hash Tables(Map ADT + 冲突处理必须会算)
2.1 Map ADT(会解释 + 会复杂度)
- 基本操作:
get(k),put(k,v),remove(k)等。 - list-based map(线性表实现):
get/put/remove最坏 (线性查找)。
2.2 Hash Table(会手算插入/查找)
必会概念
- 哈希函数:h(k)\in\{0,\dots,N-1\}
- 冲突 collision:不同 key 映射到同一桶/槽
- 装载因子:(越大越容易冲突)
冲突处理(考试常考三件套)
- Separate Chaining(拉链法)
- 桶里放链表/动态数组
- 平均:,最坏:
- Linear Probing(线性探测)
- 探测序列:h(k),h(k)+1,h(k)+2,\dots \pmod N
- 常考:逐步填表、解释 clustering(主聚集)
- Double Hashing(双重散列)
- 探测:h(k)+i\cdot h_2(k)\pmod N
- 常考:给 手算插入序列
你要练到的程度(自测)
- 给定 、keys、hash 函数:写出每一次插入的探测过程 + 最终表格。
- 给定一次 search:写出探测路径直到成功/失败。
3. Sorted Map ADT 与 BST(定义 + 更新操作 + 复杂度)
3.1 Sorted Map ADT(会说“按 key 有序”)
典型操作(知道概念即可):
first/lastfloor/ceilinglower/higher
核心:依赖“有序结构”(BST/AVL)。
3.2 BST 定义(必须背)
- 左子树 key < 当前 key < 右子树 key(无重复时)。
3.3 BST 基本操作(会画树 + 会删节点)
- Search:沿左右走到底,时间
- Insert:找到外部节点插入,
- Delete(最爱考)三种情况:
- 叶子:直接删
- 一个孩子:孩子替换
- 两个孩子:用 inorder successor(右子树最小)或 predecessor 替换,再删替换节点(最终落到 1/2)
复杂度:
- 最坏:退化成链 →
- 一般写 即可。
4. AVL(旋转/三节点重构是核心)
4.1 AVL 定义(必须背)
AVL 是 BST,且任意节点左右子树高度差不超过 1:
4.2 插入后的重平衡(会找 z-y-x)
- 插入按 BST 做完
- 向上找第一个失衡点
- 令 为 的更高子树根, 为 的更高子树根
- 对 做 trinode restructuring(对应 LL/RR/LR/RL)
4.3 删除后的重平衡(会“aligned child”规则)
- 删除后可能一路向上多次重平衡
- 若 两个孩子等高,选择与 同侧 aligned 的孩子(避免错误结构)
4.4 AVL 复杂度(必须会写)
树高 ,因此 search/insert/delete:
5. Graph Algorithms(术语 + 表示 + BFS/DFS + Topo/MST/Dijkstra)
5.1 术语(必背)
vertex/edge、directed/undirected、weighted、path、cycle、connected、in-degree/out-degree
5.2 图的表示(会对比)
- Adjacency Matrix:
- 空间 ,稀疏图浪费
- 找邻居要扫整行
- Adjacency List:
- 空间
- 稀疏图更好,遍历更高效
5.3 BFS / DFS(会写伪代码 + 会给遍历序)
- BFS:Queue,按层扩展
- DFS:Stack/递归,尽可能深再回溯
复杂度(邻接表):
常考:
- 给图 + 起点:写 BFS/DFS 访问序(按题目规定的邻居顺序)
- 用 BFS/DFS 判连通/找路径/判环(概念题)
5.4 Topological Sort(DAG)
- 关键:有环则无法拓扑排序
- 常考:输出一个拓扑序或判断是否存在环
5.5 MST 与 Prim(会手推每一步)
- MST:权重总和最小的生成树
- Prim:从任意点开始,每次选跨 cut 的最小边加入
5.6 Dijkstra(非负权最短路)
- 维护
dist[]+ 优先队列 - relax:若 则更新,并可维护
prev[]输出路径
复杂度(常用写法):
6. Dynamic Programming(DP)(定义三要素 + 经典题)
6.1 DP 三要素(必背)
- Define subproblem(状态定义)
- Optimal substructure(最优子结构)
- Overlap(子问题重叠)
6.2 DP 通用解题模板(考试通杀)
必须写清楚:
- 含义
- 递推式
- base cases
- 计算顺序
- 返回值(答案在哪)
- 回溯(若要输出方案)
6.3 经典题型(Revision 明确点名)
(A) 1-D DP
- 常见:Fibonacci、爬楼梯、最大子段和等
- 形式多为:
dp[i]=\min/\max\{\dots\}
(B) Tri tiling
- 常考:写递推或算前几项(若需要辅助状态要会解释“为什么必须扩展状态”)
© 0/1 Knapsack(最爱考表格)
- 状态: 表示前 个物品、容量 的最优值
- 时间:
(D) Matrix Chain Product(最优括号)
- : 最少乘法次数
- 按链长递增计算
6.4 练习中出现过的“图上 DP / 最短路 DP”(强烈建议掌握)
- Backward(DAG 最短路):
- Forward:
7. Pattern Matching(BF / BM / KMP:算表 + 手推过程)
7.1 Brute Force
最坏:
7.2 Boyer–Moore(BM)
必会:
- last-occurrence function: 为字符 在 Pattern 中最右位置;无则
- 手推 BM:右到左比较,mismatch 用 计算跳跃
7.3 KMP
必会:
- failure function(prefix function):每个位置最长 proper prefix = suffix 长度
- 手推 KMP:mismatch 时 复用比较结果
复杂度:
8. Trie(Standard / Compressed / Suffix Trie)
8.1 为什么 Trie 快(会一句话解释)
预索引文本/词典,前缀共享;查询长度 通常:
8.2 Standard Trie(会画)
- 根无字符
- 路径拼成词
- 终止标记(terminal)
8.3 Compressed Trie(会画)
- 合并 single-child chain 为字符串边
- 内部节点度数至少 2
8.4 Suffix Trie(会构建思路)
- 把文本所有后缀插入(常加
$) - substring 查询:沿模式串走路径,走完则存在,时间
9. 用“练习题 md”反向复习(最省时间)
按考试覆盖面刷一遍(做完就能上考场):
- Lecture 2(Map & Hash Tables):
comp4133aads-lecture2-exercises.md - Lecture 3(BST / Sorted Map):
comp4133aads-lecture3-exercises.md - Lecture 4(AVL):
comp4133aads-lecture4-exercises.md - Week 6(Graph 1:ADT/表示/BFS/DFS):
comp4133aads-week6-graph-algorithms-1-exercises.md - Week 7(Graph 2:Topo/MST/Prim/Dijkstra):
comp4133aads-week7-graph-algorithms-2-exercises.md - Week 8(DP 1):
comp4133aads-week8-dp1-exercises.md - Week 9(DP 2):
comp4133aads-week9-dp2-exercises.md - Week 10(Pattern Matching):
comp4133aads-week10-pattern-matching-exercises.md - Week 11(Trie):
comp4133aads-week11-trie-exercises.md
10. 最后一小时冲刺清单(Checklist)
- Big-O:能写定义 + 完成一次证明(如 )
- 循环计数:能从代码数出 并给 Big-O
- Hash:能手推三种冲突处理填完整表
- BST:能画出 delete 三种情况(两孩子用 successor)
- AVL:能定位 z-y-x 并完成 LL/RR/LR/RL 重构;删除后会“aligned child”
- 图表示:能比较矩阵 vs 邻接表优缺点
- BFS/DFS:能给遍历序 + 写复杂度
- Prim:能一步一步构 MST
- Dijkstra:能填 dist/prev 表并写出最终路径(非负权)
- BM/KMP/Trie:能“算表 + 手推过程 + 写复杂度”
附:不需要花时间的部分
- Optimization methods(优化方法)主要针对 project,不在考试范围(别再投入时间)。