首页课程小红花墙

算法进阶 · 小纸条

选一章打印。双面打印(按长边翻页)后沿虚线剪开,每张卡片正面题目、背面答案。

第 1 章30第 2 章30第 3 章30第 4 章30第 5 章30第 6 章30第 7 章30第 8 章30第 9 章30第 10 章30第 11 章30第 12 章30第 13 章30第 14 章30第 15 章30第 16 章30第 17 章30第 18 章30第 19 章30第 20 章30第 21 章30第 22 章30第 23 章30第 24 章30第 25 章10
只印题目
第 1 页 · 正面(题目)
1map用法

m["banana"] 在从未赋值时取出的值是多少?

2用map计数

序列 2 2 3 处理后,cnt[2] 和 cnt[3] 各是多少?

3并查集直觉

判断两个元素是否在同一组,靠比较它们的什么?

4find操作

如果 fa[x]==x,说明 x 是什么?

5union操作

合并两个本来就在同一组的元素会发生什么?

6路径压缩

路径压缩优化的是并查集的哪个操作?

7图的概念

互相为好友的关系,更适合用有向图还是无向图?

8邻接表

一条无向边 u—v 要往邻接表里加几次?

9邻接矩阵

n=1000 个点,邻接矩阵大约要多少个格子?

10BFS直觉

BFS 是先访问离起点近的还是远的点?

第 1 页 · 背面(答案)

参考答案(家长):cnt[2]=2,cnt[3]=1。

参考答案(家长):0(int 默认初始化为 0)。

参考答案(家长):它是自己这组的代表(根)。

参考答案(家长):各自的代表(根)是否相同。

参考答案(家长):find(以及依赖它的合并),让后续查找更快。

参考答案(家长):根相同,fa[根]=根,等于没变化(安全)。

参考答案(家长):两次(g[u] 加 v,g[v] 加 u)。

参考答案(家长):无向图(关系是双向的)。

参考答案(家长):先近后远(按层扩散)。

参考答案(家长):约 100 万个(1000×1000)。

第 2 页 · 正面(题目)
11BFS用队列

为什么第一次到达某点就是最短步数?

12DFS直觉

DFS 走到死路后会怎么做?

13DFS用递归

vis[] 数组在 DFS 里起什么作用?

14拓扑排序

能做拓扑排序的图必须满足什么条件?

15最短路问题

边权都相等时,求最短路可以直接用什么?

16Dijkstra直觉

Dijkstra 每一步选择哪个点来“确定”?

17为何要非负

图里有负权边时还能直接用 Dijkstra 吗?

18最小生成树

n 个点的生成树恰好有几条边?

19全排列

3 个不同数字一共有几种排列?

20八皇后直觉

两个皇后在同一条斜线上,它们的行差和列差有什么关系?

第 2 页 · 背面(答案)

参考答案(家长):退回上一个岔路口,尝试别的方向。

参考答案(家长):BFS 按距离从小到大扩散,先到的一定最近。

参考答案(家长):有向且无环(有环就排不出先后)。

参考答案(家长):标记已访问,避免重复访问导致死循环。

参考答案(家长):当前距离最小且尚未确定的点。

参考答案(家长):BFS(按层扩散即最短步数)。

参考答案(家长):n-1 条。

参考答案(家长):不能,需要换能处理负权的最短路算法。

参考答案(家长):行差的绝对值等于列差的绝对值。

参考答案(家长):6 种(3×2×1)。

第 3 页 · 正面(题目)
21回溯剪枝

正确的剪枝会不会漏掉真正的答案?

22分治思想

分治的三个步骤分别叫什么?

23归并排序

合并两个各含 3 个数的有序段,最多比较几次?

24快排直觉

一次划分后,基准这个元素的位置还会再变吗?

25二分答案

二分答案的关键前提是什么?

26取模规则

(7-9)%5 直接算可能是负数,正确写法算出来等于几?

27快速幂

算 2^10 用快速幂大约要几轮乘法(数量级)?

28组合数直觉

C(4,2) 等于多少?

29STL小结

需要“自动去重并保持有序”,该用哪个容器?

30进阶总复习

给“求带权图单源最短路”和“列出所有排列”各选一个最合适的算法。

第 3 页 · 背面(答案)

参考答案(家长):分、治、合(拆分、递归解决、合并)。

参考答案(家长):不会,它只砍掉不可能的分支。

参考答案(家长):不会,它已在最终正确位置上了。

参考答案(家长):最多 5 次(每次比较至少定下一个数,共 6 个数)。

参考答案(家长):((7-9)%5+5)%5=(-2+5)%5=3。

参考答案(家长):答案具有单调性(可行的取值连成一段)。

参考答案(家长):6。

参考答案(家长):约 log₂10≈4 轮,远少于 10 次。

参考答案(家长):最短路用 Dijkstra;列出所有排列用回溯(DFS)。

参考答案(家长):set(自动排序且不含重复元素)。

op599 课程