《图论与应用》课堂笔记 · 通俗复盘版
整理自 6 页课堂手写笔记:连通度与割集 → 图的矩阵表示 → 欧拉图 → 哈密顿图。然后这个主要的内容是根据书上的要求来的。
原稿符号跳跃、图示多,这里按知识依赖重新排序,并把省略的推导补齐。
个别潦草符号(如 ω(G−S)\omega(G-S)ω(G−S)、aij(k)a_{ij}^{(k)}aij(k))按标准定义还原,若与老师板书不同,以课堂原话为准。
0. 一页看懂这节课
| 模块 | 一句话记住 | 解决什么问题 |
|---|---|---|
| 图与度 | 边有两个端点,所以度数总和是边数的两倍 | 图怎么描述、怎么数 |
| 连通性 | 删点比删边狠,所以 κ≤λ≤δ\kappa \le \lambda \le \deltaκ≤λ≤δ | 图结不结实 |
| 矩阵表示 | 矩阵就是图的"电子档案" | 计算机怎么存、怎么算 |
| 欧拉图 | 每条边只走一次 | 能不能一笔画完 |
| 哈密顿图 | 每个点只去一次 | 能不能一圈跑遍全国 |
一句话区分最后两个:
欧拉管边,哈密顿管点。
欧拉关心"路有没有重复走",哈密顿关心"城市有没有漏掉"。
欧拉图和欧拉回路是这节课比较重要的知识点;然后这个是一个核心的要求;
1. 图的基本语言:先把"点线"说清楚
1.1 定义
图记作 G=(V,E)G=(V,E)G=(V,E):
- VVV 是顶点集,n=∣V∣n=|V|n=∣V∣ 叫阶;
- EEE 是边集,m=∣E∣m=|E|m=∣E∣ 叫边数;
- 边写作 e={u,v}e=\{u,v\}e={u,v}(无向)或 e=(u,v)e=(u,v)e=(u,v)(有向,从 uuu 指向 vvv)。
1.2 几个必须分清的名词
| 名词 | 含义 | 提醒 |
|---|---|---|
| 无向图 | 边没有方向,uuu 认识 vvv 等于 vvv 认识 uuu | 邻接矩阵对称 |
| 有向图 | 边有箭头,u→vu\to vu→v 不代表 v→uv\to uv→u | 要分入度、出度 |
| 简单图 | 无自环、无重边 | 本课默认都是简单图 |
| 完全图 KnK_nKn | 任意两点之间都有边 | 边数 n(n−1)2\dfrac{n(n-1)}{2}2n(n−1) |
| 零图 / 平凡图 | 没有边 / 只有一个点 | 讨论连通性时容易漏掉 |
K5K_5K5 的边数:每个点连 4 条,共 5×4=205\times4=205×4=20 个"端点",每条边被数两次,所以是 20/2=1020/2=1020/2=10 条。
1.3 度:一个点的"人脉数"
顶点 vvv 的度 d(v)d(v)d(v) = 与它关联的边数。
- 最大度 Δ(G)\Delta(G)Δ(G),最小度 δ(G)\delta(G)δ(G);
- 把各点度数从大到小排一列,叫度序列;
- 有向图分出度 d+(v)d^+(v)d+(v) 和入度 d−(v)d^-(v)d−(v)。
通俗易懂的讲就是握手定理,要两两之间有一个对接的要求;
1.4 握手定理(本节核心)
∑v∈Vd(v)=2m \sum_{v\in V} d(v) = 2m v∈V∑d(v)=2m
为什么? 每条边有两个端点,统计度数时被算了两次。就像握手:每次握手让两个人的"握手次数"各加一,总次数一定是握手次数的两倍。
两条立刻能用的推论:
- 奇度顶点的个数一定是偶数。 (否则总和是奇数,不可能等于 2m2m2m)
- 不可能存在"每个点度数都是 3、共 5 个点"的图:总和会是 15,是奇数。
经典应用:一群人里,和奇数个人握过手的人,人数一定是偶数。
1.5 必有两个度相同的点
定理 :n≥2n\ge 2n≥2 的简单图,至少有两个顶点的度相同。
证明(抽屉原理) :度数只能取 0,1,...,n−10,1,\dots,n-10,1,...,n−1 这 nnn 个值,看起来刚好一人一个。但 000 度和 n−1n-1n−1 度不能同时出现 ------有一个孤立点,就不可能有人连满其余所有点。所以实际最多只有 n−1n-1n−1 种度数,却要分给 nnn 个点,必有两个点同度。
2. 连通性:这张网结不结实
2.1 通路与连通
- 通路 :顶点与边交替出现、首尾相接的序列;边不重复叫迹 ,点不重复叫简单路径。
- 连通:任意两点之间都有通路。
- 连通分支数 ω(G)\omega(G)ω(G):图被分成几块"互不相通"的部分。
ω(G)=1\omega(G)=1ω(G)=1 就是连通图;ω(G)=k\omega(G)=kω(G)=k 说明图碎成了 kkk 块。
2.2 割点与割边(桥)
- 割点:删掉这个点(连同它的边),连通分支数变多;
- 割边(桥):删掉这条边,连通分支数变多。
这个概念很容易搞混;
直观理解:割点像"唯一的一座换乘站",桥像"唯一的一座桥"。它们都是网络的单点故障。
判定小技巧:
- 边 eee 是桥 ⟺ \iff⟺ eee 不属于任何一个回路;
- 树里每条边都是桥,每个非叶顶点都是割点。
这个概念的话是这节课比较难懂的。
2.3 连通度:用"最少删几个"来量化
| 记号 | 名称 | 定义 |
|---|---|---|
| κ(G)\kappa(G)κ(G) | 点连通度 | 最少删几个点能让图不连通(或只剩一点) |
| λ(G)\lambda(G)λ(G) | 边连通度 | 最少删几条边能让图不连通 |
| δ(G)\delta(G)δ(G) | 最小度 | 最"孤单"的点的度数 |
Whitney 不等式:
κ(G) ≤ λ(G) ≤ δ(G) \kappa(G)\ \le\ \lambda(G)\ \le\ \delta(G) κ(G) ≤ λ(G) ≤ δ(G)
怎么记 :删点会连带删掉它所有的边,所以"删点"永远比"删边"更省事,点连通度最小;而每个点最多只有 δ\deltaδ 条边可删,所以边连通度不超过最小度。
几个例子:
- 树(n≥2n\ge2n≥2):κ=λ=1\kappa=\lambda=1κ=λ=1,因为删任何一个非叶点或任何一条边都会断;
- 完全图 KnK_nKn:κ=λ=n−1\kappa=\lambda=n-1κ=λ=n−1;
- 圈 CnC_nCn:κ=λ=2\kappa=\lambda=2κ=λ=2。
2.4 kkk-连通与 Menger 定理
若 κ(G)≥k\kappa(G)\ge kκ(G)≥k,称 GGG 是 kkk-连通图 ,意思是"删掉任意 k−1k-1k−1 个点,图依然连通"。
Menger 定理(点形式) :若 u,vu,vu,v 不相邻,则 uuu 与 vvv 之间内部不相交通路的最大条数 ,等于分离 u,vu,vu,v 所需删去的最少点数。
边形式:把"点"换成"边",结论同样成立。
它的意义在于把"连通度"这个看似抽象的数,翻译成了"有几条独立的路可走"------网络有几条备用线路,就有多抗打。
笔记里出现的 ω(G−S)\omega(G-S)ω(G−S),指删掉点集 SSS 后的连通分支数。用它写连通性很省字:GGG 连通就是 ω(G)=1\omega(G)=1ω(G)=1。
3. 矩阵表示:把图交给计算机
3.1 邻接矩阵 AAA
A=(aij)n×nA=(a_{ij})_{n\times n}A=(aij)n×n,其中
aij={1,vi 与 vj 相邻0,否则 a_{ij}=\begin{cases}1,& v_i\text{ 与 }v_j\text{ 相邻}\\ 0,&\text{否则}\end{cases} aij={1,0,vi 与 vj 相邻否则
(重边时 aija_{ij}aij 就记成边数,笔记里写作 "aij=ka_{ij}=kaij=k,以 viv_ivi 为起点、vjv_jvj 为终点的边有 kkk 条"。)
性质:
- 无向图:AAA 是对称矩阵 ,第 iii 行元素之和 = d(vi)d(v_i)d(vi);
- 有向图:AAA 一般不称,第 iii 行和 = 出度 d+(vi)d^+(v_i)d+(vi),第 iii 列和 = 入度 d−(vi)d^-(v_i)d−(vi);
- 对角线元素表示自环。
3.2 关联矩阵 MMM
M=(mij)n×mM=(m_{ij})_{n\times m}M=(mij)n×m,行是点、列是边。
- 无向图 :viv_ivi 与 eje_jej 关联记 1,否则记 0;每列恰有两个 1。
- 有向图 :viv_ivi 是 eje_jej 的起点 记 +1+1+1,是终点 记 −1-1−1,无关记 000;每列之和为 000(一进一出)。
所以关联矩阵天然能读出"每条边的方向",邻接矩阵天然能读出"点与点之间的关系",用途不同。
3.3 用 AkA^kAk 数通路
核心结论 :AkA^kAk 的第 (i,j)(i,j)(i,j) 个元素,等于从 viv_ivi 到 vjv_jvj、长度为 kkk 的通路条数。
为什么:矩阵乘法
aij(k)=∑l=1nail(k−1) alj a_{ij}^{(k)}=\sum_{l=1}^{n} a_{il}^{(k-1)}\,a_{lj} aij(k)=l=1∑nail(k−1)alj
的意思就是"先走 k−1k-1k−1 步到某个中间点 lll,再从 lll 一步到 jjj",把所有可能的 lll 累加,正好把路径全部数完。这里的意思是让l累加起来然后把路径全部重整一下。
例:A2A^2A2 的对角线元素 aii(2)a_{ii}^{(2)}aii(2) 是经过 viv_ivi 的长度 2 回路数,也等于 viv_ivi 的度数。
3.4 可达矩阵 PPP
这个可达矩阵什么意思上。
P=A(1)∨A(2)∨⋯∨A(n−1) P=A^{(1)}\lor A^{(2)}\lor\cdots\lor A^{(n-1)} P=A(1)∨A(2)∨⋯∨A(n−1)
其中 ∨\lor∨ 是布尔"或"(有路记 1,不管几条)。pij=1p_{ij}=1pij=1 表示 viv_ivi 能走到 vjv_jvj。
为什么只算到 n−1n-1n−1 次方? 在 nnn 个点的图里,一条不重复经过点的简单路径最多含 n−1n-1n−1 条边。如果有路可走,就一定有不超过 n−1n-1n−1 步的简单路径。所以 AnA^nAn 以后不会再带来新的可达信息。
严格写法还可补上 A(n)A^{(n)}A(n) 与单位阵 III(自己到自己总可达),得到 P=I∨A∨⋯∨A(n−1)P=I\lor A\lor\cdots\lor A^{(n-1)}P=I∨A∨⋯∨A(n−1)。
用途 :判断有向图强连通(PPP 全 1)、求传递闭包、做编译器的依赖分析、数据库的递归查询。
4. 欧拉图:一笔画完所有边
4.1 起源
哥尼斯堡七桥问题:能不能走遍七座桥,每座只走一次再回到起点?欧拉把陆地抽象成点、桥抽象成边,证明不可能,图论由此诞生。
4.2 定义
- 欧拉通路 :经过每条边恰好一次的通路;
- 欧拉回路 :经过每条边恰好一次、且回到起点的回路;
- 有欧拉回路的图叫欧拉图 ,只有欧拉通路的叫半欧拉图。
经过这个欧拉通路 ,
注意:欧拉图允许重复经过顶点,只要求边不重复。
4.3 判定(背这三句就够)
设 GGG 连通:
- GGG 是欧拉图 ⟺ \iff⟺ 所有顶点的度都是偶数;
- GGG 存在欧拉通路 ⟺ \iff⟺ 奇度顶点恰有 0 个或 2 个(2 个时必须从其中一个奇点出发、另一个奇点结束);
- 有向图版本:弱连通 + 每个点入度等于出度 ⇒\Rightarrow⇒ 欧拉回路;若恰有一个点出度比入度大 1(起点)、一个点入度比出度大 1(终点),其余平衡,则有欧拉通路。
为什么是"偶度"? 走到一个点就必须走出去,进与出要配对。除了起点和终点可以"多出一次",其余每个点被使用的次数必须成对出现,所以度数必须是偶数。
4.4 两个算法
Fleury(避桥法) :从起点出发,每走一条边就把它删掉;除非没有别的选择,绝不走桥。
"避桥"到底在避什么? 先把"桥"说清楚:图论里的桥也叫割边 ,指的是删掉它之后,整个图会直接裂成两块互不连通的区域的那条边。放到现实里,它就是连接两个区域的唯一一座独木桥------没有第二条路可以绕过去。
于是 Fleury 的规则就有了很直白的解释:走欧拉路径时,只要还有别的边可走,就绝对不要踏上这座独木桥;只有当所有其他选择都用尽、实在无路可走时,才不得不走它。
为什么必须这样? 因为桥只有一条,走过去就回不来了(欧拉路径要求每条边只走一次,走过的边不能重走)。一旦你提前踏上桥,桥另一边那些还没逛的边就被彻底"锁"在对岸------你人已经在这边,桥又不能再走一遍,剩下的边永远走不完,欧拉路径也就断了。
举个最小的例子 :两个三角形 ABCABCABC 和 DEFDEFDEF,中间用一条边 CDCDCD 连起来。这条 CDCDCD 就是桥。假设你从 AAA 出发,如果一上来就冲过 CDCDCD 去了右边,那么左边的 ABABAB、BCBCBC、CACACA 里必然还剩没走的边,而你再也回不到左边了。正确做法是:先把左边这个三角形绕完,回到 CCC,最后再走 CDCDCD 过去,把右边也绕完。
一句话总结:桥是"单程票",能留到最后再走就留到最后;先把所有能绕圈的边消耗掉,桥自然就成了收尾的那一步。这也正是 Fleury 算法"能不走桥就不走桥"的直觉来源。
直觉:桥是"唯一通道",一旦走进去就回不来,会把剩下的边永远留在对岸。
Hierholzer(回路拼接法):随便找一个回路,走掉;如果还有没走过的边,就从当前回路上某个点出发再找一个回路,拼进去;重复到所有边用完。
复杂度 O(m)O(m)O(m),比 Fleury 更适合编程实现。
4.5 中国邮递员问题
邮递员要从邮局出发,走遍所有街道再回来,怎样最省力?
- 如果图本来就是欧拉图(全偶度),直接走欧拉回路,不用重复;
- 如果有奇点,就必须把某些边走两遍。做法:把奇点两两配对 ,用最短路把它们连起来,重复这些路径上的边,使所有点变偶度。配对方案要选总长度最小的。
这是"欧拉回路 + 最小权完美匹配"的组合,也是欧拉理论最经典的应用。
5. 哈密顿图:一圈跑遍所有点
5.1 定义
- 哈密顿通路 :经过每个顶点恰好一次的通路;
- 哈密顿回路:经过每个顶点恰好一次、最后回到起点的回路;
- 有哈密顿回路的图叫哈密顿图。
和欧拉的区别:这里不要求走完所有边,只要求点不重复。
那这里的具体的要求式神?
5.2 一个必要条件
定理 :若 GGG 是哈密顿图,则对任意非空点集 S⊂VS\subset VS⊂V,都有
ω(G−S) ≤ ∣S∣ \omega(G-S)\ \le\ |S| ω(G−S) ≤ ∣S∣
理解 :一个哈密顿回路本身是一个大圈。从圈上删掉 ∣S∣|S|∣S∣ 个点,最多把它切成 ∣S∣|S|∣S∣ 段;而 GGG 比这个圈多了边,只会连得更紧,分支数不会更多。
最好用的推论 :若 GGG 有割点 ,取 S={S=\{S={割点}\}},则 ω(G−S)≥2>1=∣S∣\omega(G-S)\ge 2>1=|S|ω(G−S)≥2>1=∣S∣,所以有割点的图一定不是哈密顿图。
还有一条常见的:二分图若两部点数不相等,一定没有哈密顿回路(回路必须在两部之间交替,点数必须一样)。
这个条件只是必要的,不满足一定不是,满足也未必是。
5.3 两个充分条件
Dirac 定理 :n≥3n\ge3n≥3 的简单图,若
δ(G) ≥ n2 \delta(G)\ \ge\ \frac{n}{2} δ(G) ≥ 2n
则 GGG 是哈密顿图。
哈密顿图的核心就是:能找到一条路径,不重复地走完图里所有顶点,最后还能回到起点,形成闭合回路。
一句话秒懂本质
把图里的每个顶点当成一个城市,哈密顿图就是你能规划出一条路线,每个城市只去一次,逛完所有城市后直接回到出发点,全程不走回头路、不重复经过任何城市。
简答的说一下哈密顿图是什如何和快理解?
别和欧拉图搞混:
欧拉图:盯着边走,要求每条边只走一次,核心是"遍历所有边"
哈密顿图:盯着顶点走,要求每个顶点只去一次,核心是"遍历所有点"
Ore 定理 :n≥3n\ge3n≥3 的简单图,若对任意一对不相邻 的顶点 u,vu,vu,v 都有
哪儿这里应该怎么理解呢?
所以的话我们再这里的理解的这个问题的核心是什么?
核心拆解成3个关键点
核心目标只盯顶点:全程所有规则都围绕"每个顶点恰好走1次"展开,完全不关心边有没有被重复走、有没有被用到,这是和欧拉图最本质的区别。
只要求存在一条路径:不需要图里所有路径都满足条件,只要能找到至少1条不重复遍历所有顶点的闭合回路,它就是哈密顿图。
判定逻辑的特殊性:它没有像欧拉图那样简单的"充要条件",我们学的所有定理,要么是"满足就一定是"的充分条件,要么是"不满足就一定不是"的必要条件,没有能100%精准判定所有图的通用简单规则。
d(u)+d(v) ≥ n d(u)+d(v)\ \ge\ n d(u)+d(v) ≥ n
则 GGG 是哈密顿图。
怎么记:Dirac 是 Ore 的特例。"每个点的朋友都够多"或者"任意两个陌生人加起来朋友够多",就一定能绕一圈。
顺带一个笔记里的连通性结论:若对任意不相邻的 u,vu,vu,v 都有 d(u)+d(v)≥n−1d(u)+d(v)\ge n-1d(u)+d(v)≥n−1,则 GGG 连通。
反证:若不连通,取 u,vu,vu,v 分属两个分支,则 d(u)≤∣V1∣−1d(u)\le |V_1|-1d(u)≤∣V1∣−1,d(v)≤∣V2∣−1d(v)\le |V_2|-1d(v)≤∣V2∣−1,相加 ≤n−2\le n-2≤n−2,矛盾。
5.4 闭包:把图"补"到能判定
Bondy--Chvátal 闭包 :只要存在一对不相邻的 u,vu,vu,v 满足 d(u)+d(v)≥nd(u)+d(v)\ge nd(u)+d(v)≥n,就把边 uvuvuv 添上;反复操作直到无法再添,得到的图叫闭包 c(G)c(G)c(G)。
得到的图叫闭包。
结论 :GGG 是哈密顿图 ⟺ \iff⟺ c(G)c(G)c(G) 是哈密顿图。
特别地,若闭包是完全图,则 GGG 一定是哈密顿图 。这把 Ore 定理变成了一个可执行的算法:不断加边,加不动了再看是不是 KnK_nKn。
5.5 反例:Petersen 图
Petersen 图是 3-正则、3-点连通、没有割点的图,满足 ω(G−S)≤∣S∣\omega(G-S)\le|S|ω(G−S)≤∣S∣ 这个必要条件,却不是哈密顿图。
它说明:必要条件不够用,判断哈密顿性本质上很难------这也是为什么至今没有像欧拉图那样简洁的充要条件。
它说明的意思是什么?
5.6 TSP:旅行商问题
给一个带权完全图(权是城市间距离),求总长度最短的哈密顿回路。
- 精确求解是 NP-难 的,nnn 大时枚举 n!n!n! 条回路不可行;
- 常用近似:最近邻法(快,但可能差很多)、2-opt 局部改进、Christofides 算法(满足三角不等式时保证不超过最优解的 1.51.51.5 倍);
- 实际中还用分支定界、整数规划、Lin--Kernighan 等启发式。
6. 一张表分清欧拉与哈密顿
| 对比项 | 欧拉图 | 哈密顿图 |
|---|---|---|
| 关注对象 | 边(每条边走一次) | 点(每个点去一次) |
| 能否重复 | 点可重复,边不可 | 边可重复,点不可 |
| 判定难度 | 很简单,看度数 | 很难,NP-完全 |
| 充要条件 | 连通 + 全偶度 | 至今没有简洁充要条件 |
| 典型充分条件 | 无(本身即充要) | Dirac、Ore、闭包 |
| 典型应用 | 一笔画、邮递员、扫雪车 | TSP、排班、电路板钻孔 |
| 经典例子 | 七桥问题、正十二面体(无欧拉回路) | Petersen 图(反例)、KnK_nKn |
7. 六个容易踩的坑
- 完全图每个点的度是 n−1n-1n−1,不是 nnn------自己不和自己连。
- 握手定理是 2m2m2m,不是 mmm------忘记每条边被数两次是最常见错误。
- 欧拉图要求"连通"------不连通时就算全是偶度也走不完全部边。
- κ≤λ≤δ\kappa\le\lambda\le\deltaκ≤λ≤δ 的方向别写反 ------删点最狠,所以 κ\kappaκ 最小。
- ω(G−S)≤∣S∣\omega(G-S)\le|S|ω(G−S)≤∣S∣ 只是必要条件------满足它不代表是哈密顿图(Petersen 图就是反例)。
- 可达矩阵算到 n−1n-1n−1 次方就够 ------简单路径最多 n−1n-1n−1 条边,再高次不会产生新的可达关系。
8. 三分钟自测
- 一个图有 6 个顶点,度数分别是 5,4,3,3,2,15,4,3,3,2,15,4,3,3,2,1,可能吗?
- K3,3K_{3,3}K3,3 是欧拉图吗?是哈密顿图吗?
- 树有哈密顿回路吗?
参考答案
- 可能。度数总和 =18=2m=18=2m=18=2m,所以 m=9m=9m=9,握手定理先过关。构造:设 v1v_1v1 度为 5,与其余各点全连;再让 v2v_2v2 连 v3,v4,v5v_3,v_4,v_5v3,v4,v5,让 v3v_3v3 连 v4v_4v4。此时度数依次为 5,4,3,3,2,15,4,3,3,2,15,4,3,3,2,1。用 Havel--Hakimi 逐步剥离也能化到全零,说明这组度数确实可图化。
- K3,3K_{3,3}K3,3 每个点度数为 3,是奇度,且奇点有 6 个,所以不是欧拉图 (也没有欧拉通路);但它两部各 3 个点,存在哈密顿回路,是哈密顿图。
- 没有(n≥2n\ge2n≥2 时)。树的所有边都是桥,且叶子度为 1,删掉叶子后图就断,必然存在割点,由 ω(G−S)≤∣S∣\omega(G-S)\le|S|ω(G−S)≤∣S∣ 可知非哈密顿图。
如果课上还讲了树与生成树(Kruskal / Prim)、平面图与欧拉公式 n−m+f=2n-m+f=2n−m+f=2、图的着色(四色定理),这些是同一门课紧接的内容,可以按同样的结构再补一章。