图论:连接世界的数学语言
图论:连接世界的数学语言
图论是研究图的数学分支,图由顶点(节点)和连接它们的边(连线)组成。这门学科起源于1736年欧拉解决柯尼斯堡七桥问题,如今已成为计算机科学、网络分析、生物信息学等领域的核心工具。
文章目录
一、图的基本概念
1.1 图的定义与类型
定义:一个图 G = ( V , E ) G = (V, E) G=(V,E) 由:
- 顶点集 V V V(非空有限集)
- 边集 E E E( V V V 中元素的无序对或多重集)
基本类型:
- 无向图:边没有方向, ( u , v ) (u,v) (u,v) 和 ( v , u ) (v,u) (v,u) 表示同一条边
- 有向图:边有方向, ( u , v ) (u,v) (u,v) 表示从 u u u 到 v v v 的弧
- 简单图:无自环(顶点到自身的边)且无平行边
- 多重图:允许平行边
- 加权图:边带有权重(距离、成本等)
1.2 基本术语
度数:
- 无向图:顶点 v v v 的度数 d e g ( v ) deg(v) deg(v) 是与 v v v 关联的边数
- 有向图:出度 d e g + ( v ) deg^+(v) deg+(v)(从 v v v 出发的边数),入度 d e g − ( v ) deg^-(v) deg−(v)(进入 v v v 的边数)
握手定理(图论第一定理):
对任意无向图
G
=
(
V
,
E
)
G = (V, E)
G=(V,E),
∑
v
∈
V
d
e
g
(
v
)
=
2
∣
E
∣
\sum_{v \in V} deg(v) = 2|E|
v∈V∑deg(v)=2∣E∣
证明:每条边贡献2度(两个端点各1度)。
推论:任何图中奇度顶点的个数为偶数。
路径与回路:
- 路径:顶点序列 v 0 , v 1 , … , v k v_0, v_1, \ldots, v_k v0,v1,…,vk,其中 ( v i − 1 , v i ) ∈ E (v_{i-1}, v_i) \in E (vi−1,vi)∈E
- 简单路径:顶点不重复(边自然也不重复)
- 回路:起点=终点的路径
- 简单回路:起点外顶点不重复的回路
连通性:
- 连通图:任意两顶点间存在路径
- 连通分量:极大连通子图
- 强连通(有向图):任意两顶点双向可达
二、图的表示与基本算法
2.1 图的表示方法
-
邻接矩阵: n × n n \times n n×n 矩阵 A A A, A i j = 1 A_{ij} = 1 Aij=1 如果 ( v i , v j ) ∈ E (v_i, v_j) \in E (vi,vj)∈E(有权图则为权重)
- 空间: O ( n 2 ) O(n^2) O(n2)
- 查边: O ( 1 ) O(1) O(1)
- 适合稠密图
-
邻接表:每个顶点维护一个邻居列表
- 空间: O ( n + m ) O(n + m) O(n+m)
- 查边: O ( d e g ( v ) ) O(deg(v)) O(deg(v))
- 适合稀疏图
-
关联矩阵: n × m n \times m n×m 矩阵, B v e = 1 B_{ve} = 1 Bve=1 如果边 e e e 关联顶点 v v v
- 主要用于理论分析
2.2 图的遍历
深度优先搜索(DFS)
DFS(v):
标记 v 为已访问
for 每个邻居 u of v:
if u 未访问:
DFS(u)
性质:
- 时间复杂度:邻接表 O ( n + m ) O(n+m) O(n+m),邻接矩阵 O ( n 2 ) O(n^2) O(n2)
- 形成DFS树/森林
- 可检测回路、求连通分量
广度优先搜索(BFS)
BFS(s):
队列 Q ← {s}
标记 s 为已访问
while Q 非空:
v ← Q.dequeue()
for 每个邻居 u of v:
if u 未访问:
标记 u 为已访问
Q.enqueue(u)
性质:
- 时间复杂度和DFS相同
- 求无权图最短路径
- 按层次遍历
三、树与生成树
3.1 树的基本性质
定义:树是连通无环图。
等价定义(对 n n n 个顶点的图):
- 连通且 m = n − 1 m = n-1 m=n−1
- 无环且 m = n − 1 m = n-1 m=n−1
- 任意两顶点间有唯一路径
- 连通但删除任意边后不连通
- 无环但添加任意边后产生环
证明思路(归纳法):
基础:
n
=
1
n=1
n=1,
m
=
0
m=0
m=0,成立
归纳:对
n
>
1
n>1
n>1 的树,必有一度顶点(叶子),删除它得
n
−
1
n-1
n−1 顶点的树,由归纳假设有
n
−
2
n-2
n−2 条边,故原树有
(
n
−
2
)
+
1
=
n
−
1
(n-2)+1 = n-1
(n−2)+1=n−1 条边。
3.2 生成树
定义:图 G G G 的生成树是包含 G G G 所有顶点的树( G G G 的子图)。
存在性: G G G 有生成树 ⇔ G G G 连通
最小生成树(MST)问题
给定连通加权无向图,找权重和最小的生成树。
Kruskal算法(贪心,按边权重排序):
Kruskal(G):
将边按权重升序排序
T ← ∅
for 每条边 e (按序):
if T ∪ {e} 无环:
T ← T ∪ {e}
if |T| = n-1: break
使用并查集高效检测环,时间复杂度 O ( m log m ) O(m \log m) O(mlogm)
Prim算法(贪心,从顶点扩张):
Prim(G, s):
T ← {s}
while |T| < n:
选连接 T 与 V\T 的最小权重边 e
T ← T ∪ {e 的另一个端点}
使用优先队列,时间复杂度 O ( m log n ) O(m \log n) O(mlogn)
正确性证明(切割性质):
对图的任意切割(划分顶点为两个集合),最小横跨边一定在某个MST中。
反证:若某MST不含最小横跨边
e
e
e,添加
e
e
e 会产生环,环中必有另一横跨边
f
f
f(权重≥
e
e
e),用
e
e
e 替换
f
f
f 得权重更小的生成树,矛盾。
四、最短路径问题
4.1 单源最短路径(SSSP)
Dijkstra算法(非负权重)
Dijkstra(G, s):
dist[s] ← 0, 其他 dist[v] ← ∞
Q ← 所有顶点(按dist)
while Q 非空:
u ← Q中dist最小的顶点
Q.remove(u)
for 每个邻居 v of u:
alt ← dist[u] + w(u,v)
if alt < dist[v]:
dist[v] ← alt
prev[v] ← u
Q.decrease_key(v, alt)
时间复杂度:
- 数组: O ( n 2 ) O(n^2) O(n2)
- 二叉堆: O ( ( n + m ) log n ) O((n+m)\log n) O((n+m)logn)
- 斐波那契堆: O ( m + n log n ) O(m + n\log n) O(m+nlogn)
正确性证明(归纳法):
归纳假设:每次从Q取出的顶点
u
u
u,其dist值已是最短距离。
基础:
u
=
s
u=s
u=s,dist=0正确
归纳:设下个取出的是
u
u
u,假设存在更短路径
s
→
⋯
→
x
→
y
→
u
s \to \cdots \to x \to y \to u
s→⋯→x→y→u,其中
x
x
x 在已处理集,
y
y
y 在Q中。
由三角不等式和贪心选择矛盾。
Bellman-Ford算法(允许负权重,检测负环)
Bellman-Ford(G, s):
dist[s] ← 0, 其他 dist[v] ← ∞
for i = 1 to n-1:
for 每条边 (u,v):
if dist[u] + w(u,v) < dist[v]:
dist[v] ← dist[u] + w(u,v)
prev[v] ← u
# 检测负环
for 每条边 (u,v):
if dist[u] + w(u,v) < dist[v]:
存在负环
时间复杂度:
O
(
n
m
)
O(nm)
O(nm)
原理:松弛操作进行
n
−
1
n-1
n−1 轮(最长无环路径最多
n
−
1
n-1
n−1 条边)
4.2 所有顶点对最短路径
Floyd-Warshall算法(动态规划)
定义
d
i
j
(
k
)
d_{ij}^{(k)}
dij(k) =
i
i
i 到
j
j
j 只经过
{
1
,
…
,
k
}
\{1,\ldots,k\}
{1,…,k} 的最短路径长度
递推:
d
i
j
(
k
)
=
min
(
d
i
j
(
k
−
1
)
,
d
i
k
(
k
−
1
)
+
d
k
j
(
k
−
1
)
)
d_{ij}^{(k)} = \min(d_{ij}^{(k-1)},\ d_{ik}^{(k-1)} + d_{kj}^{(k-1)})
dij(k)=min(dij(k−1), dik(k−1)+dkj(k−1))
Floyd-Warshall(G):
初始化 d[i][j] = w(i,j) 或 ∞
for k = 1 to n:
for i = 1 to n:
for j = 1 to n:
d[i][j] = min(d[i][j], d[i][k] + d[k][j])
时间复杂度:
O
(
n
3
)
O(n^3)
O(n3)
空间优化:可原地更新
应用:求传递闭包、检测负环(对角线出现负值)
五、匹配与网络流
5.1 二分图匹配
二分图:顶点可划分为 X , Y X,Y X,Y,所有边连接 X X X 和 Y Y Y 中的顶点。
匹配:边集 M ⊆ E M \subseteq E M⊆E,其中任意两边不共享顶点。
- 最大匹配:含边数最多的匹配
- 完美匹配:覆盖所有顶点的匹配( ∣ M ∣ = n / 2 |M| = n/2 ∣M∣=n/2)
增广路径定理(Berge定理)
M M M 是最大匹配 ⇔ 不存在 M M M-增广路径
证明思路:
- ⇒:若存在增广路径,可翻转匹配/非匹配边,得到更大匹配
- ⇐:若 M M M 不是最大,设 M ′ M' M′ 是最大匹配,考虑对称差 M ⊕ M ′ M \oplus M' M⊕M′,由度数和连通性分析必存在增广路径
匈牙利算法(求二分图最大匹配)
Hungarian(G):
M ← ∅
while 存在增广路径:
找增广路径 P
M ← M ⊕ P
return M
时间复杂度:
O
(
n
m
)
O(nm)
O(nm)
应用:任务分配、婚姻问题
Hall婚姻定理
二分图
G
=
(
X
∪
Y
,
E
)
G=(X∪Y,E)
G=(X∪Y,E) 有匹配覆盖
X
X
X ⇔ 对任意
S
⊆
X
S \subseteq X
S⊆X,
∣
N
(
S
)
∣
≥
∣
S
∣
|N(S)| \ge |S|
∣N(S)∣≥∣S∣
其中
N
(
S
)
N(S)
N(S) 是
S
S
S 的邻居集。
证明:
- 必要性:若匹配覆盖 X X X, S S S 中顶点匹配不同的 Y Y Y 中顶点
- 充分性:对 ∣ X ∣ |X| ∣X∣ 归纳,分 N ( S ) = ∣ S ∣ N(S)=|S| N(S)=∣S∣ 和 N ( S ) > ∣ S ∣ N(S)>|S| N(S)>∣S∣ 两种情况处理
5.2 网络流
最大流问题
给定有向图 G = ( V , E ) G=(V,E) G=(V,E),源点 s s s,汇点 t t t,边容量 c ( u , v ) c(u,v) c(u,v),求从 s s s 到 t t t 的最大流量。
流函数 f : V × V → R f: V×V → ℝ f:V×V→R 满足:
- 容量限制: 0 ≤ f ( u , v ) ≤ c ( u , v ) 0 \le f(u,v) \le c(u,v) 0≤f(u,v)≤c(u,v)
- 流量守恒: ∑ v f ( u , v ) = ∑ v f ( v , u ) \sum_{v} f(u,v) = \sum_{v} f(v,u) ∑vf(u,v)=∑vf(v,u)( u ≠ s , t u \neq s,t u=s,t)
剩余网络 G f G_f Gf:边 ( u , v ) (u,v) (u,v) 容量为 c ( u , v ) − f ( u , v ) c(u,v)-f(u,v) c(u,v)−f(u,v),添加反向边 ( v , u ) (v,u) (v,u) 容量为 f ( u , v ) f(u,v) f(u,v)
Ford-Fulkerson方法
Ford-Fulkerson(G, s, t):
f ← 零流
while G_f 中存在 s-t 路径:
找增广路径 P
augment ← P上最小剩余容量
沿P推送augment单位流量
return f
Edmonds-Karp算法(BFS找最短增广路)
时间复杂度:
O
(
n
m
2
)
O(nm^2)
O(nm2)
实际更快:
O
(
n
m
)
O(nm)
O(nm) 次增广,每轮BFS
O
(
m
)
O(m)
O(m)
最大流最小割定理
最大流值 = 最小割容量
证明:
- 任何流 ≤ 任何割容量(显然)
- 当FF算法终止时,剩余网络无s-t路径
设 S S S = s s s 在 G f G_f Gf 中可达的顶点集
则 ( S , V \ S ) (S, V\backslash S) (S,V\S) 是割,且割边流量=容量,反向边流量=0
故当前流值 = 割容量,达到最大
应用:二分图最大匹配可转化为最大流(添加源汇,容量设为1)
六、图的着色
6.1 顶点着色
正常着色:相邻顶点颜色不同
色数
χ
(
G
)
\chi(G)
χ(G):最小所需颜色数
性质:
- χ ( G ) ≥ ω ( G ) \chi(G) \ge \omega(G) χ(G)≥ω(G)(团数)
- χ ( G ) ≤ Δ ( G ) + 1 \chi(G) \le \Delta(G) + 1 χ(G)≤Δ(G)+1(最大度+1)
- 对任意图, χ ( G ) ≤ Δ ( G ) \chi(G) \le \Delta(G) χ(G)≤Δ(G)(Brooks定理,除完全图和奇环)
五色定理(Heawood,1890)
任何平面图可用5种颜色着色。
证明思路(归纳法):
- 平面图有顶点 v v v, d e g ( v ) ≤ 5 deg(v) \le 5 deg(v)≤5(欧拉公式推论)
- 删除 v v v,5-着色剩余图(归纳假设)
- 若邻居用了≤4色, v v v 用第5色
- 若5个邻居用5色,找颜色交替路径调整
四色定理(Appel & Haken,1976)
任何平面图可用4种颜色着色。
证明概要(计算机辅助):
- 寻找不可避免集:任何平面图必含某构型(约1500种)
- 证明可约性:这些构型可缩小而不增加色数
- 用计算机检查所有情况
6.2 边着色
正常边着色:相邻边颜色不同
边色数
χ
′
(
G
)
\chi'(G)
χ′(G):最小所需颜色数
Vizing定理:
对简单图,
Δ
(
G
)
≤
χ
′
(
G
)
≤
Δ
(
G
)
+
1
\Delta(G) \le \chi'(G) \le \Delta(G) + 1
Δ(G)≤χ′(G)≤Δ(G)+1
二分图的König定理:
对二分图,
χ
′
(
G
)
=
Δ
(
G
)
\chi'(G) = \Delta(G)
χ′(G)=Δ(G)
应用:课程安排、任务调度
七、平面图
7.1 平面图基本定理
定义:可在平面上绘制且边仅在顶点相交的图。
欧拉公式(连通平面图):
n
−
m
+
f
=
2
n - m + f = 2
n−m+f=2
其中
f
f
f 是面数(包括外无限面)。
证明(归纳法):
基础:树,
m
=
n
−
1
m=n-1
m=n−1,
f
=
1
f=1
f=1,满足
归纳:添加边将面一分为二,
m
+
1
m+1
m+1,
f
+
1
f+1
f+1,
n
−
m
+
f
n-m+f
n−m+f 不变
推论:
- m ≤ 3 n − 6 m \le 3n - 6 m≤3n−6( n ≥ 3 n \ge 3 n≥3,简单无环图)
- m ≤ 2 n − 4 m \le 2n - 4 m≤2n−4(无三角形, n ≥ 3 n \ge 3 n≥3)
- 存在顶点 v v v, d e g ( v ) ≤ 5 deg(v) \le 5 deg(v)≤5
7.2 Kuratowski定理
定理:图是非平面图 ⇔ 它包含 K 5 K_5 K5 或 K 3 , 3 K_{3,3} K3,3 的细分。
细分:在边上添加顶点。
应用:判定平面性的理论基础(实际用线性时间算法如PQ树)
八、特殊图类与算法
8.1 欧拉图与哈密顿图
欧拉图(一笔画问题)
欧拉回路:经过每条边恰好一次的回路
欧拉路径:经过每条边恰好一次的路径
欧拉定理(无向图):
- 连通图有欧拉回路 ⇔ 所有顶点度数为偶数
- 连通图有欧拉路径 ⇔ 恰有0或2个奇度顶点
证明思路:
- 必要性:进入次数=离开次数
- 充分性:归纳法,拼接回路
Fleury算法(避免桥)和Hierholzer算法( O ( m ) O(m) O(m))
哈密顿图
哈密顿回路:经过每个顶点恰好一次的回路
哈密顿路径:经过每个顶点恰好一次的路径
判定是NP完全问题,但有一些充分条件:
- Dirac定理: n ≥ 3 n \ge 3 n≥3, δ ( G ) ≥ n / 2 \delta(G) \ge n/2 δ(G)≥n/2 ⇒ 有哈密顿回路
- Ore定理:任意不相邻顶点 u , v u,v u,v, d e g ( u ) + d e g ( v ) ≥ n deg(u)+deg(v) \ge n deg(u)+deg(v)≥n ⇒ 有哈密顿回路
8.2 有向无环图(DAG)
拓扑排序:将顶点线性排列,使所有边从前指向后。
算法(Kahn算法):
TopologicalSort(G):
L ← 空列表
S ← 所有入度为0的顶点
while S 非空:
v ← S.pop()
L.append(v)
for 每个邻居 u of v:
删除边 (v,u)
if u入度变为0:
S.push(u)
if 还有边剩下: 有环
return L
时间复杂度: O ( n + m ) O(n+m) O(n+m)
应用:任务调度、依赖解析
九、图的连通性
9.1 顶点连通度
点割集:删除后使图不连通的顶点集
连通度
κ
(
G
)
\kappa(G)
κ(G):最小点割集大小(完全图
κ
(
K
n
)
=
n
−
1
\kappa(K_n)=n-1
κ(Kn)=n−1)
Menger定理(点形式):
κ
(
G
)
≥
k
\kappa(G) \ge k
κ(G)≥k ⇔ 任意两顶点间有
k
k
k 条内部不相交的路径
9.2 边连通度
边割集:删除后使图不连通的边集
边连通度
λ
(
G
)
\lambda(G)
λ(G):最小边割集大小
Menger定理(边形式):
λ
(
G
)
≥
k
\lambda(G) \ge k
λ(G)≥k ⇔ 任意两顶点间有
k
k
k 条边不相交的路径
不等式: κ ( G ) ≤ λ ( G ) ≤ δ ( G ) \kappa(G) \le \lambda(G) \le \delta(G) κ(G)≤λ(G)≤δ(G)
9.3 强连通分量(有向图)
Kosaraju算法:
- DFS遍历,记录完成时间
- 反转所有边
- 按完成时间降序DFS
Tarjan算法(单次DFS, O ( n + m ) O(n+m) O(n+m)):
Tarjan(v):
index[v] = low[v] = ++time
stack.push(v)
onStack[v] = true
for 每个邻居 u of v:
if index[u] 未定义:
Tarjan(u)
low[v] = min(low[v], low[u])
else if onStack[u]:
low[v] = min(low[v], index[u])
if low[v] == index[v]:
创建新SCC
repeat:
u = stack.pop()
onStack[u] = false
将u加入当前SCC
until u == v
十、现代应用与前沿
10.1 社交网络分析
-
中心性度量:
- 度中心性: C D ( v ) = d e g ( v ) / ( n − 1 ) C_D(v) = deg(v)/(n-1) CD(v)=deg(v)/(n−1)
- 接近中心性: C C ( v ) = ( n − 1 ) / ∑ u d ( u , v ) C_C(v) = (n-1)/\sum_u d(u,v) CC(v)=(n−1)/∑ud(u,v)
- 介数中心性:
C
B
(
v
)
=
∑
s
≠
v
≠
t
σ
s
t
(
v
)
/
σ
s
t
C_B(v) = \sum_{s\neq v\neq t} \sigma_{st}(v)/\sigma_{st}
CB(v)=∑s=v=tσst(v)/σst
σ s t \sigma_{st} σst: s s s 到 t t t 的最短路径数
σ s t ( v ) \sigma_{st}(v) σst(v):经过 v v v 的最短路径数
-
社区检测:模块度最大化、谱聚类
-
小世界现象:六度分隔、高聚类系数、短平均路径
10.2 网络科学
- 无标度网络(幂律度分布):BA模型(优先连接)
- 随机图:Erdős–Rényi 模型
G
(
n
,
p
)
G(n,p)
G(n,p)
- 阈值现象: p = ln n / n p = \ln n/n p=lnn/n 时从几乎不连通到几乎连通
- 渗流理论:边的随机删除对连通性的影响
10.3 算法设计与复杂性
P与NP问题:
- 哈密顿回路、旅行商问题(TSP)、图着色是NP完全问题
- 最大匹配、最大流、最短路径是P问题
近似算法:
- 顶点覆盖:2-近似(取最大匹配的端点)
- TSP:Christofides算法(1.5-近似,若满足三角不等式)
参数复杂性:固定参数可解(FPT)问题,如顶点覆盖参数化为解大小
10.4 图神经网络(GNN)
基本思想:将深度学习扩展到图结构数据
- 消息传递:顶点聚合邻居信息
- 图卷积网络(GCN):谱域方法
- 应用:分子性质预测、推荐系统、知识图谱
结语:图论的统一视角
图论提供了一种统一的语言来描述离散结构中的关系。从欧拉的七桥问题到现代的万维网分析,图论始终在连接着数学的各个分支和现实世界的复杂系统。
图论的独特魅力在于:
- 直观与抽象的平衡:图形表示直观易懂,但背后是严谨的数学理论
- 理论与应用的紧密联系:最纯粹的数学问题(如四色定理)催生了实际的算法和技术
- 跨学科的影响力:从物理学(Ising模型)到社会学(社交网络),从计算机科学(算法设计)到生物学(蛋白质相互作用网络)
“图论的美在于它能够用简单的点和线,捕捉到世界复杂关系的本质。” —— Paul Erdős
随着大数据和复杂网络时代的到来,图论的重要性只增不减。它不仅帮助我们理解现有的网络结构,更为我们设计更高效、更鲁棒的未来系统提供了数学基础。从社交媒体的朋友推荐到物流网络的路径优化,从大脑神经元的连接到全球互联网的拓扑,图论都在默默地描绘着连接世界的数学蓝图。
更多推荐
所有评论(0)