数据结构与算法:速成包

公式表、每个专题的关键方法步骤和 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.算法与复杂度中等

一个问题具有最优子结构是什么意思?

  1. A最优解可以由其子问题的最优解构造出来
  2. B该问题可以在常数时间内求解
  3. C该问题恰好有一个最优解,所有子问题共享这个解
  4. D每个子问题的规模都相同
2.算法与复杂度困难

为什么在有序数组中任何基于比较的查找在最坏情况下都需要 Ω(log n) 次比较?

  1. A每个元素都必须至少比较一次
  2. B二分查找是唯一可能的算法,它需要 log₂ n 次比较
  3. C每次比较都需要对数时间
  4. D有 n 种可能结果的决策树,其深度至少为 log₂ n
3.数据结构中等

二叉搜索树中的某个节点有右子树。它的中序后继在哪里?

  1. A总是它的右子节点
  2. B其左子树中最右边的节点
  3. C总是它的父节点
  4. D其右子树中最左边的节点
4.数据结构困难

原地反转一个单链表的时间和额外空间代价各是多少?

  1. AO(n) 时间和 O(n) 额外空间
  2. BO(n) 时间和 O(1) 额外空间
  3. CO(1) 时间和 O(1) 额外空间
  4. DO(n log n) 时间和 O(1) 额外空间
5.图论中等

完全图 K5 有多少条不同的哈密顿回路 H?只是起点或方向不同的回路算作同一条。

K5
H =
6.图论困难
ABCDE

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

M = 邻接矩阵L = 2
N =

3溶液

1.算法与复杂度

答案: A · 最优解可以由其子问题的最优解构造出来

为什么是这个答案

贪心算法和动态规划要得出正确答案,都需要问题具有最优子结构。

答案

A · 最优解可以由其子问题的最优解构造出来
2.算法与复杂度

答案: D · 有 n 种可能结果的决策树,其深度至少为 log₂ n

为什么是这个答案

每次比较至多把剩余的可能性减半,因此要区分 n 个位置至少需要 log₂ n 次比较。

答案

D · 有 n 种可能结果的决策树,其深度至少为 log₂ n
3.数据结构

答案: D · 其右子树中最左边的节点

为什么是这个答案

所有比该节点大且与之相近的键都在它的右子树中,其中最小的就是那里最左边的节点。

答案

D · 其右子树中最左边的节点
4.数据结构

答案: B · O(n) 时间和 O(1) 额外空间

为什么是这个答案

保持三个指针(previous、current、next),就可以在一次遍历中反转每个链接,而无需分配新节点。

答案

B · O(n) 时间和 O(1) 额外空间
5.图论

答案: H = 12

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

计数

H = (5 − 1)!/2 = 24/2 = 12

答案

H = 12
6.图论

答案: N = 1

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

邻接矩阵

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

公共邻点

(M²)BC = 1·0 + 0·1 + 1·0 + 1·0 + 1·1 = 1

答案

N = 1

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