mirror of
https://github.com/handsomezhuzhu/handsomezhuzhu.github.io.git
synced 2026-02-20 11:50:14 +00:00
136 lines
7.0 KiB
Markdown
136 lines
7.0 KiB
Markdown
# 第四章:图论
|
||
|
||
## 4.1 图的基本概念
|
||
|
||
### 4.1.1 定义与术语
|
||
- **图 $G=(V, E)$**:$V$ 为顶点集,$E$ 为边集。
|
||
- **度 (Degree)**:$\deg(v)$ 为关联的边数 (自环算 2 度)。
|
||
- **握手定理**:$\sum_{v \in V} \deg(v) = 2|E|$。
|
||
- **推论**:奇度顶点的个数必为偶数。
|
||
- **子图**:$V' \subseteq V, E' \subseteq E$。
|
||
- **补图**:$\bar{G}$,顶点相同,边互补 (完全图 $K_n$ 减去原图的边)。
|
||
|
||
### 4.1.2 图的连通性
|
||
- **路径 (Path)**:$v_0, e_1, v_1, \dots, v_k$。
|
||
- **简单路径**:不经过重复边。
|
||
- **基本路径 (Elementary Path)**:不经过重复顶点。
|
||
- **连通图**:任意两点间均有路径。
|
||
- **割点 (Cut Vertex)**:删去该点及关联边,图分量增加。
|
||
- **割边 (Bridge)**:删去该边,图分量增加。
|
||
- **连通度**:
|
||
- **点连通度 $\kappa(G)$**:使图不连通所需删除的最少顶点数。
|
||
- **边连通度 $\lambda(G)$**:使图不连通所需删除的最少边数。
|
||
- **不等式关系**:$\kappa(G) \le \lambda(G) \le \delta(G)$ (最小度)。
|
||
|
||
### 4.1.3 图的矩阵表示
|
||
- **邻接矩阵 $A(G)$**:$n \times n$ 矩阵,$a_{ij}$ 表示 $v_i, v_j$ 间的边数。
|
||
- 性质:$A^k$ 的元素 $a_{ij}^{(k)}$ 表示从 $v_i$ 到 $v_j$ 长度为 $k$ 的路径条数。
|
||
- **关联矩阵 $M(G)$**:顶点与边的关系。
|
||
|
||
### 4.1.4 图的同构 (Isomorphism)
|
||
判断 $G_1 \cong G_2$ 的必要条件 (若不满足则必不同构):
|
||
1. 顶点数、边数相同。
|
||
2. 度数列相同 (将所有点度数排序后一致)。
|
||
3. 连通分量数相同。
|
||
4. 对应长度的回路数相同 (如都有或都没有三角形)。
|
||
*充分性证明通常需要构造双射函数。*
|
||
|
||
## 4.2 特殊图类
|
||
|
||
### 4.2.1 欧拉图 (Euler) 与 哈密顿图 (Hamilton)
|
||
| 特性 | 欧拉图 (Euler) | 哈密顿图 (Hamilton) |
|
||
| :--- | :--- | :--- |
|
||
| **定义** | 经过**每条边**恰好一次的回路 | 经过**每个顶点**恰好一次的回路 |
|
||
| **判定(充要)** | 连通 + **所有点度为偶数** | 无简单充要条件 |
|
||
| **判定(充分)** | - | (Dirac) $n \ge 3, \forall v, \deg(v) \ge n/2$ |
|
||
| **半图(路径)** | 连通 + **恰有 0 或 2 个奇度点** | - |
|
||
**哈密顿图常用判定方式 (充分/必要)**:
|
||
- **必要条件**:$\delta(G) \ge 2$;且无割点 (2-连通)。
|
||
- **Dirac 定理 (充分)**:$n \ge 3, \delta(G) \ge n/2$。
|
||
- **Ore 定理 (充分)**:$n \ge 3$ 且任意非邻接顶点 $u,v$ 满足 $\deg(u)+\deg(v) \ge n$。
|
||
|
||
### 4.2.2 树 (Trees)
|
||
- **定义**:连通且无回路的无向图。
|
||
- **等价性质**:
|
||
1. 无回路且 $E = V - 1$。
|
||
2. 连通且 $E = V - 1$。
|
||
3. 任意两点间存在**唯一**路径。
|
||
- **度数和**:$\sum_{v \in V} \deg(v) = 2E = 2(V-1)$。
|
||
- **叶子与内部点关系**:设 $L$ 为叶子数,则
|
||
$L = 2 + \sum_{\deg(v)\ge 2}(\deg(v) - 2)$。
|
||
- **树中心 (Center)**:
|
||
- 反复删除所有叶子,最终剩下 1 个或 2 个顶点,这些顶点即中心。
|
||
- 等价表述:中心是到其他顶点最大距离最小的顶点(们)。
|
||
- **二叉树常用关系**:
|
||
- 满二叉树:若内部结点数为 $I$,叶子数为 $L$,则 $L = I + 1$。
|
||
- 完全二叉树:$n$ 个结点时高度 $h = \lfloor \log_2 n \rfloor + 1$。
|
||
- **最小生成树 (MST) 算法**:
|
||
- **Kruskal** (加边法):按权值排序,从小到大选边,不构成回路就加入。
|
||
- **Prim** (加点法):从任意点开始,每次选离当前生成树集合最近的点加入。
|
||
|
||
### 4.2.3 平面图 (Planar Graphs)
|
||
- **欧拉公式**:$V - E + R = 2$ ($R$ 为面数,包含无限面)。
|
||
- **定理**:连通简单平面图 ($V \ge 3$) 满足 $E \le 3V - 6$。
|
||
- **证明要点**:每个面至少 3 条边,故 $3R \le 2E$,与欧拉公式联立得 $E \le 3V - 6$。
|
||
- **性质**:简单平面图 ($V \ge 3$) 满足 $E \le 3V - 6$。
|
||
- **重要证明:存在度数 $\le 5$ 的顶点**
|
||
- 假设所有顶点度数 $\deg(v) \ge 6$。
|
||
- 由握手定理:$2E = \sum \deg(v) \ge 6V \Rightarrow E \ge 3V$。
|
||
- 这与平面图性质 $E \le 3V - 6$ 矛盾。
|
||
- 故必然存在 $\deg(v) \le 5$ 的顶点。
|
||
- 推论:$K_5$ ($E=10, 3V-6=9$) 不是平面图。
|
||
- 推论:$K_{3,3}$ ($E=9, 3V-6=12$, 但它是二分图无三角形,需用 $E \le 2V-4$, $9 \not\le 8$) 不是平面图。
|
||
- **常用等价与应用**:
|
||
- 连通简单平面图:$E \le 3V - 6 \iff V \ge (E+6)/3$。
|
||
- 平均度:$\overline{d} = 2E/V < 6$,因此必存在度 $\le 5$ 的顶点。
|
||
- 判否:若某简单图满足 $E > 3V - 6$,则必非平面图。
|
||
- 若无三角形 (如二分图),改用 $E \le 2V - 4$。
|
||
- **库拉图斯基定理 (Kuratowski)**:图是平面图 $\iff$ 不含同胚于 $K_5$ 或 $K_{3,3}$ 的子图。
|
||
|
||
### 4.2.4 二分图 (Bipartite Graphs)
|
||
- **定义**:顶点集可划分为 $X, Y$,且所有边都在 $X$ 与 $Y$ 之间。
|
||
- **判定**:图是二分图 $\iff$ 图中**没有奇数长度的回路**。
|
||
- **完全二分图**:$K_{m,n}$,$|X|=m, |Y|=n$,边数 $E = mn$。
|
||
- **度数与边数**:$\sum_{x \in X}\deg(x)=\sum_{y \in Y}\deg(y)=|E|$。
|
||
- **平面图推论**:连通简单二分平面图 ($V \ge 3$) 满足 $E \le 2V - 4$。
|
||
- **二染色判定 (BFS/DFS)**:
|
||
1. 对每个连通分量,任选起点染色为 0。
|
||
2. 进行 BFS/DFS,对每条边 $(u,v)$ 要求 $color[u] \ne color[v]$。
|
||
3. 若遇到冲突 (已染且相同) 则非二分图;无冲突则是二分图。
|
||
- **匹配**:Hall 定理 (相异代表系)。
|
||
|
||
## 4.3 核心算法逻辑
|
||
|
||
### 4.3.1 最短路径 (Dijkstra)
|
||
*适用于非负权图。*
|
||
1. 初始化:$S=\{start\}$, $dist[start]=0$, 其他无穷大。
|
||
2. 循环:
|
||
- 在 $V-S$ 中找 $dist$ 最小的点 $u$。
|
||
- 加入 $S$。
|
||
- 松弛 (Relax) $u$ 的所有邻居 $v$:若 $dist[u] + w(u,v) < dist[v]$,则更新。
|
||
|
||
### 4.3.2 图着色 (Graph Coloring)
|
||
- **点色数 $\chi(G)$**:相邻顶点不同色所需的最少颜色数。
|
||
- **布鲁克定理 (Brooks)**:若 $G$ 不是奇环也不是完全图,则 $\chi(G) \le \Delta(G)$ (最大度)。
|
||
- **平面图四色定理**:平面图 $\chi(G) \le 4$。
|
||
- **色多项式 $P_k(G)$**:用 $k$ 种颜色染色的方案数。
|
||
- 递推公式:$P_k(G) = P_k(G-e) - P_k(G \cdot e)$
|
||
- $G-e$:删边。
|
||
- $G \cdot e$:收缩边 (合并端点)。
|
||
|
||
### 4.3.3 最优二叉树 (Huffman Coding)
|
||
*常考题型:给定一组权值,构造哈夫曼树并计算带权路径长度 (WPL)。*
|
||
|
||
1. **算法步骤**:
|
||
- **初始化**:将所有权值看作独立的单节点树森林 $F = \{T_1, T_2, \dots\}$。
|
||
- **循环**:
|
||
1. 在 $F$ 中选出**根节点权值最小**的两棵树 $T_1, T_2$。
|
||
2. 构造新树:根权值为 $W(T_1) + W(T_2)$,左右子树分别为 $T_1, T_2$。
|
||
3. 从 $F$ 中删除 $T_1, T_2$,加入新树。
|
||
4. 重复直到 $F$ 中只剩一棵树。
|
||
2. **带权路径长度 (WPL)**:
|
||
- $WPL = \sum_{i=1}^n w_i \times l_i$
|
||
- $w_i$:第 $i$ 个叶子的权值。
|
||
- $l_i$:第 $i$ 个叶子到根的路径长度(边数)。
|
||
- *简便算法*:WPL = 所有非叶子节点的权值之和。
|