Files
handsomezhuzhu.github.io/otherdocs/离散/04_图论.md
2026-01-07 00:27:21 +08:00

136 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 第四章:图论
## 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 = 所有非叶子节点的权值之和。