数据结构与算法:速成包

公式表、每个专题的关键方法步骤和 6 道练习题,完整解答附在最后。

新题目返回课程

在打印窗口中选择“另存为 PDF”,即可在设备上保存一份副本。

1公式与方法

图论

握手引理
Σ deg(v) = 2|E|
完全图
|E(Kn)| = n(n − 1)/2, |E(Km,n)| = m·n
正则图
|E| = n·k/2
树与森林
|E| = n − 1, |E| = n − c
树的叶子
L = 2 + Σ (deg(v) − 2) over deg(v) ≥ 3
欧拉
回路:所有顶点度数为偶数; 通路:恰有 2 个奇度顶点
Kn 中的哈密顿回路
(n − 1)!/2
迪杰斯特拉更新
d(v) = min(d(v), d(u) + w(u, v))
长度为 L 的途径
(Mᴸ)ij

方法

  1. 写出每个顶点的度数;所有度数之和等于边数的两倍。
  2. 对于欧拉问题,先检查图是否连通,再数一数奇度顶点的个数。
  3. 对于树,利用 n − 1 条边和握手引理。
  4. 对于迪杰斯特拉算法,保留一张暂定距离表,每一轮确定未确定顶点中距离最小的那个。
  5. 对于最小生成树,把边按权重排序,跳过每条会形成圈的边(克鲁斯卡尔算法),或者从一个起点出发扩展一棵树(普里姆算法)。

2练习题

1.算法与复杂度中等

递推式 T(n) = T(n − 1) + O(n) 的解是什么?

  1. AO(2ⁿ)
  2. BO(n²)
  3. CO(n log n)
  4. DO(n)
2.算法与复杂度困难

停机问题(halting problem)表明:

  1. A每个程序最终都会停机
  2. B应当避免使用循环
  3. C不存在一种算法能对所有程序和输入判定其是否会停机
  4. D有些程序在更快的计算机上运行得更快,所以是否停机取决于硬件
3.数据结构中等

在从下标 0 开始存储于数组中的二叉堆里,下标为 i 的节点的父节点在哪里?

  1. A下标 ⌊(i − 1) / 2⌋
  2. B下标 i − 1
  3. C下标 ⌊i / 2⌋ + 1
  4. D下标 2i + 1
4.数据结构困难

采用按秩合并(union by rank)和路径压缩(path compression)的并查集(union-find,不相交集合),每次操作的均摊代价为:

  1. A恰好 O(log n)
  2. BO(n²)
  3. CO(α(n)),即反阿克曼函数,实际上可视为常数
  4. DO(n)
5.图论中等
ABCDEFG欧拉回路有欧拉通路,无回路都不是

这个连通图有欧拉回路、有不是回路的欧拉通路,还是两者都没有?点选你的答案。

|V| = 7|E| = 8
  1. 1欧拉回路
  2. 2有欧拉通路,无回路
  3. 3都不是
6.图论困难
ABCDEF

从 C 到 E 的长度为 3 的途径有多少条?途径可以重复顶点和边。把这个数记作 N。

M = 邻接矩阵L = 3
N =

3溶液

1.算法与复杂度

答案: B · O(n²)

为什么是这个答案

工作量之和约为 n² / 2,这是选择排序的递推式,也是基准最差时快速排序的递推式。

答案

B · O(n²)
2.算法与复杂度

答案: C · 不存在一种算法能对所有程序和输入判定其是否会停机

为什么是这个答案

Turing 证明了停机问题是不可判定的(undecidable):假设存在判定器,就会与一个做相反行为的程序产生矛盾。

答案

C · 不存在一种算法能对所有程序和输入判定其是否会停机
3.数据结构

答案: A · 下标 ⌊(i − 1) / 2⌋

为什么是这个答案

i 的子节点位于 2i + 1 和 2i + 2,因此 i 的父节点位于 ⌊(i − 1) / 2⌋;若下标从 1 开始,则为 ⌊i / 2⌋。

答案

A · 下标 ⌊(i − 1) / 2⌋
4.数据结构

答案: C · O(α(n)),即反阿克曼函数,实际上可视为常数

为什么是这个答案

同时使用两种优化后,操作的均摊时间为 O(α(n));对于任何实际的 n,α(n) ≤ 4。

答案

C · O(α(n)),即反阿克曼函数,实际上可视为常数
5.图论

答案: 有欧拉通路,无回路

欧拉、哈密顿与树:连通图在每个顶点度数都为偶数时有欧拉回路(每条边经过一次,回到起点),在恰有两个顶点度数为奇数时有不是回路的欧拉通路;此时通路从一个奇度顶点走到另一个奇度顶点。哈密顿回路恰好经过每个顶点一次;Kn 有 (n − 1)!/2 条。n 个顶点的树有 n − 1 条边,有 m 条边的连通图在去掉 m − n + 1 条边后保留一棵生成树。

度

deg(A) = 1, deg(B) = 2, deg(C) = 2, deg(D) = 2, deg(E) = 4, deg(F) = 1, deg(G) = 4

奇度顶点

A, F → 2
有欧拉通路,无回路

答案

有欧拉通路,无回路

欧拉通路从一个奇度顶点出发,在另一个奇度顶点结束。

6.图论

答案: N = 8

度:顶点的度是与它相连的边的条数。每条边有两个端点,所以度数之和等于边数的两倍:Σ deg(v) = 2|E|(握手引理)。因此奇度顶点的个数是偶数。Kn 有 n(n − 1)/2 条边,n 个顶点的 k-正则图有 nk/2 条边,n 个顶点的树有 n − 1 条边。

邻接矩阵

A: 0 1 1 0 0 0
B: 1 0 1 1 1 0
C: 1 1 0 0 1 0
D: 0 1 0 0 1 1
E: 0 1 1 1 0 1
F: 0 0 0 1 1 0

再走一步

(M³)CE = 1·0 + 2·1 + 3·1 + 2·1 + 1·0 + 1·1 = 8

答案

N = 8

ExamProblems · examproblems.com/courses/data-structures-and-algorithms