课程简介

离散数学 研究对象:离散个体以及结构关系

图论与代数结构 的书还讨论了 平面图与图的着色、图的匹配问题、网络流、抽象代数的内容

图的基本概念

主要复习:

图的概念

图 G 是一个二元组:G=(V,E).

对任一图 G,用 V(G),E(G) 表示节点集合和边集合。

图的分类

自环和重边

节点的度

赋权图

子图

记忆:生成子图对节点集有要求,导出子图对边有要求。

图的运算

交 G1∩G2=(V1∩V2,E1∩E2)、并 G1∪G2=(V1∪V2,E1∪E2)、差(G1−G2=(V1,E1−E2),如果出现孤立点,删掉)、补(G1―=Kn−G1).

对称差(G1⊕G2=(G1−G2)∪(G2−G1))

图的运算

图的同构

定义:给定图 G1=(V1,E1) 以及图 G2=(V2,E2),如果在 V1 和 V2 之间存在双射使得

(u,v)∈E1⟺(f(u),f(v))∈E2

则 G1 和 G2 同构,记为 G1≅G2。

必要条件:

Peterson 图。

image-20240115003453344

Ramsey 定理

对于红色 Ks 或者蓝色 Kt,一定能够找一个最小的 n,使得若对完全图 Kn 中的所有线段染红色或蓝色,一定会出现红色 Ks 或者蓝色 Kt.

代数表示

邻接矩阵 (adjacency matrix)

aij={1,(vi,vj)∈E,0,otherwise

无向图的邻接矩阵是对称矩阵;无向简单图邻接矩阵的第 i 行之和为结点 vi 的度。

权矩阵

aij={wij,(vi,vj)∈E,0,otherwise

关联矩阵 (incidence matrix)

有向图 G=(V,E) 的关联矩阵是一个 n×m 矩阵 B,其元素为:

bij={1,ej=(vi,vk)∈E,−1,ej=(vk,vi)∈E,0,otherwise

图的矩阵表示:

边列表 对于每条边 ek=(vi,vj),有:

A[k]=i,B[k]=j,Z[k]=wk

正向表 有向图用 n+1 维向量 A 和 m 维向量 B 来表示。

image-20230920104330579

但是插入删除操作复杂度高。

邻接表

image-20230920110117565

道路与回路

道路与回路

有向道路 有向图 G 中边序列 P=(ei1,ei2,⋯,eiq),其中 eij=(vk,vi) 满足 vk 是 eij−1 的终点,vi 是 eij+1 的起始点。

有向回路 eiq 的终点也是 ei1 的始点。

道路/链 无向图 G=(V,E) 中, 若点边交替序列 P=(vi1,ei1,vi2,ei2,⋯,eiq−1,viq) 满足 vik,vik+1 是 eik 的两个端点, 则称 P 是 G 中的一条链, 或道路。如果 viq=vi1, 则称 P 是 G 中的一个圈, 或回路。

一个点可以成为道路,但是不能成为回路。

如果 P 中没有重复出现的边, 称之为 简单道路 或简单回路, 若其中结点也不重复, 又称之为 初级道路 或初级回路。

回路/圈

极长路径/初级道路 P 是一条初级道路(点不重复),始点和终点都不与 P 外的顶点相邻。

扩大初级道路法 求极长路径。

弦 设 C 为简单图 G 中含节点数大于 3 的一个初级回路,如果结点 vi 和 vj 在 C 中不相邻,而边 (vi,vj)∈E(G),则 (vi,vj) 是 C 的一条弦。

image-20230920112106731

联通性

二分图

道路与回路的判定

欧拉回路

欧拉:每条路都走一遍。

欧拉回路:连通图 G 中一条经过所有边的简单回路。七桥问题就是判断是否存在欧拉回路。

欧拉道路:连通图 G 中一条经过所有边的简单道路。

欧拉图:具有欧拉回路的图。

欧拉半图:具有欧拉道路但是无欧拉回路的图。


定理:无向 连通图 G 中存在欧拉回路的充要条件为 G 中各节点的度都是偶数。


定理: 无向连通图 G 中存在欧拉道路(欧拉半图)的充要条件是 G 中只有两个度为奇数的结点。

证明: 连接这两顶点,则有回路;再删去这条边。


定理:有向连通图 G 中存在欧拉回路的充要条件为 G 中节点的入度和出度相等。

定理:有向连通图 G 是 欧拉半图 的充要条件为至多有两个顶点,其中一个出度比入度大一,一个入度比出度大一。


定理:设连通图 G=(V,E) 中有 2k 个度数为奇数的节点,那么 E(G) 可以划分为 k 条简单道路。k 笔画。

证明:增加 k 条边,连接度数为奇数的节点,形成的图各个节点的度数都为偶数,在欧拉回路上增加的边一定不相邻,否则开始节点度数应该为偶数,然后在欧拉回路上去掉新增的边,即可划分为 k 条简单道路。


image-20230922150327070

哈密顿道路

哈密顿:每个顶点走一遍。


哈密顿 (H) 回路(道路):无向图 G 的一条经过全部节点的初级回路(道路)。

哈密顿图:具有 H 回路的图。Kn 是哈密尔顿图?需要 n≥3.

哈密顿半图:具有 H 道路而无 H 回路的图。

image-20231010210044639

H 回路的判定很困难,没有发现充分必要条件,只有若干充分条件:


引理: 设 P:v1,v2,⋯,vl 是简单图 G 中一条极长的初级道路,而且对于任意 vi,vj,d(vi)+d(vj)≥l,则 G 中一定存在经过节点 v1,v2,⋯,vl 的 初级回路。

image-20231006101614724


定理:若简单图 G 的任意两节点 vi 与 vj 之间恒有 d(vi)+d(vj)≥n−1,则存在 H 道路。

首先,G 是连通图,假设有 2 个联通支,即是每个联通支是完全图,

d(vi)≤n1−1,d(vj)≤n2−1⇒d(vi)+d(vj)≤n−2<n−1

因此矛盾。

其次,我们构造 H 道路,假设 P=v1v2⋯vl 是 G 中一条极大路径,l≤n。

重复以上步骤,即可得到 H 道路。


推论:若简单图 G(n≥3) 的任意两节点 vi 和 vj 都满足:

d(vi)+d(vj)≥n

则存在 H 回路。

一定存在哈密顿道路 P.

设 G 是 n≥3 的简单图,证明:若 m≥12(n−1)(n−2)+2,则 G 存在 H 回路。

若任意 vi,vj,都满足 d(vi)+d(vj)≥n,则由之前推论直到一定存在 H 回路。


推论:若简单图 G(n≥3) 的任何一个节点的度数都大于等于 n/2,则存在 H 回路。


推论:若简单图 G(n≥3) 有不相邻节点 vi 与 vj 满足

d(vi)+d(vj)≥n

则 G 中存在 H 回路当且仅当 G+(vi,vj) 有 H 回路。


闭合图 若 vi 和 vj 是简单图 G 的不相邻节点,且满足 d(vi)+d(vj)≥n,则令 G′=G+(vi,vj),对 G′ 重复以上过程,直到不再有这样的节点对为止,最终得到的图称为 G 的闭合图。

image-20231006105041185

简单表示为,在 C2(G) 构造时没发现 (u,v) 的节点对。



设 G 是哈密顿图,则对于任意的非空 V1⊂V(G),图 G−V1 中的连通支数不大于 |V1|。

考虑 G 中的任意一条哈密顿回路 C,C−V1 的连通支数不大于 |V1|,而因为 C 是 G 的生成子图,所以 C−V1 的连通支数又不大于 G−V1 的连通支数。

不能用作判断哈密顿图的条件

但是,可以证明不是哈密顿图:

image-20231010205509526

有割点的连通图不是哈密顿图。

image-20231011103410771

tips: 选择的点集贪心地考虑的话,要考虑度数大的,其次考虑和之前选的点尽量不相邻的。

image-20231011103931350

但是,对于 Peterson 图,都满足这个条件,但是也不是哈密顿图。


奇数个结点构成的二分图不是哈密顿图。

证:否则 H 圈是奇圈,而二部图无奇圈.


image-20231010210840048

树

定义


割边 若 G′=G−e 比 G 的连通支数多, 则称 e 是 G 的割边.

e=(u,v) 是割边当且仅当 e 不属于任何回路 ⇒ 树中的边都是割边


树的等价定义

设 T 是节点数 n≥2 的树,则下列性质互相等价:

  1. T 连通且无回路。

  2. T 连通且每条边都是割边。

  3. T 连通且有 n−1 条边。

  4. T 有 n−1 条边且无回路。

  5. T 的任意两节点之间有唯一道路。

  6. T 无回路,但是在任意两节点间加上一条边之后恰好有一个回路。

树是边数最少的连通图,也是边数最多的无回路图。

满足联通、无回路,n−1 条边中任意两个条件的图是树。



生成树 定义: 如果 T 是图 G 的支撑子图, 而且是树, 则称 T 是 G 的支撑树或生成树。

图 G 有支撑树当且仅当 G 是连通的,若图 G 本身不是树, 则其支撑树不唯一。

余树 图 G 删掉生成树 T 中各边后的子图。

Huffman树

二叉树

赋权二叉树

最优二叉树 给定树叶数目及其权值,构造 WPL 最小的二叉树,称为 Huffman 树。

Huffman 算法:给定 n 个带权树叶,构造最优二叉树。

  1. 排序得 wi1≤wi2≤⋯≤win.

  2. 计算 wi=wi1+wi2. 作为中间节点 vi 的权值,vi 左儿子是 vi1,右儿子是 vi2. n−=1.

  3. 若 n=1,则输出,否则继续按 1. 排序。

为什么是最优

假定 w1≤w2⋯≤wn,li 为 vi 和根节点的距离,并且设 T 是最优树。

Huffman 编码

前缀码 设 α=α1α2⋯αn−1αn 是长度为 n 的字符串,α1α2⋯αk 称为 α 的长度为 k 的前缀,k=1,2,⋯,n−1,若非空字符串 β1,β2,⋯,βm 中任意两个互不为前缀,则称 {β1,⋯,βm} 为前缀码,只出现 0,1 的前缀码称为二元前缀码。

最短树

Kruskal

将各边权重从小到大排序 while(最小生成树的边数<=总节点数-1) 找到最小的边权重,他连接的两边节点作为起始点 按从小到大的边权重顺序将节点加入图C中

定理:T=(V,E′) 是赋权连通图 G=(V,E) 的最短树,当且仅当对于任意余树边 e∈E−E′,E′+e 的回路 Ce 满足:

w(e)≥w(a),for ∀a∈Ce,a≠e

否则,T⊕(a,e) 得到的树 T′ 比 T 更小。

 

Prim

需要先指定一个起始位置 while(最小生成树的边数<=总节点数-1) 寻找该点边权重最小的节点加入图C中 将图C看做一个整体,寻找C的所有边中权重最小的边,将所连点加入图C中

定理:假设 V′ 是赋权连通图 G=(V,E) 的节点真子集,e 是端点分别属于 V′ 和 V−V′ 的最短边,则 G 中一定存在包含 e 的最短树。

如果两点集之间连边为 e′(≠e),直接取 T0⊕(e,e′)

匹配

引入:m 项工作分配给 n 个人去做,每人最多从事一项工作,每项工作最多由一人完成。

还可以在连边上做文章,比如可以限语言相通,一人领航一人驾驶等。

二分图匹配

定义匹配:令 M 是图 G 的边子集,若 M 中任意两条边都没有共同的顶点,则称 M 是 G 的一个 匹配。其中与 M 的边相关联的顶点称为饱和点,否则称为非饱和点。

最大匹配时 |M| 最大对应的匹配。

给定了 G 的一个匹配 M,G 中属于 M 和不属于 M 的边交替出现的道路称为 交互道路,构成回路的交互道路称为 交互回路。

设 P 是 G 中关于匹配 M 的一条交互道路,如果 P 的两个端点是关于 M 的非饱和点(可以连出去新的边) ,则它称为 可增广道路。

定理:M 是 G 的最大匹配当且仅当 G 中不存在关于 M 的可增广道路。

⇒ 使用反证法即可。

⇐ 转化为:G 中不存在关于 M 的可增广道路时,M 是 G 的最大匹配。则需要证明当 M 不是 G 的最大匹配时一定存在可增广道路。分析 G′=M′⊕M,G′ 联通支中不可能出现度数大于 3 的节点,此时节点连出的边中存在两个同时属于 M′ 或 M. 因此,联通支只有三种情况:

  1. 孤立顶点,当 (vi,vj)∈M′∩M 时会出现孤立点 vi 和 vj,代表边相互抵消;

  2. 初级回路,此时 M 的边和 M′ 的边交替出现,也相当于出现次数相等;

  3. 初级道路,|M′|≠|M|,只有可能在初级道路上两者出现次数不等,此时必定存在 M′ 关于 M 的可增广交互道路。

image-20231017200547069

注意 x4,x5 也算一条可增广交互道路。

完全匹配

|M|=|X|,称为完全匹配,|M|=|X|=|Y|,称为完美匹配。

Hall 定理给出了判别完全匹配的条件:

证明:X 到 Y 存在完全匹配的充要条件是对于 X 的任意子集 A,恒有 |Γ(A)|≥|A|.

若存在 |Γ(A)|<|A|,则 A 连出的边无法覆盖,因此,不存在完美匹配。

若不存在完全匹配,则设 x0 没有匹配上,则 x0 连到的节点一定被匹配了,而且不存在增广路,设增广路左边节点的集合为 X1,右边节点的集合为 Y1,根据匹配的性质,Y1 的顶点与 X1−x0 的顶点存在一一对应,因此 |X1|=1+|Y1|>|Γ(X1)|. 矛盾。

image-20231017215730445

定理 在二分图 G=(X,Y,E) 中,X 到 Y 最大匹配的边数是 |X|−δ(G),其中 δ(G)=maxA⊆xδ(A),δ(A)=|A|−|Γ(A)|,δ(A)≥0.

二分图最大匹配的König定理

利用最小割最大流定理的证明:原点向左边连流量为 1 的边,然后原来的边流量为 +∞,右边向汇点连流量 1 的边。最大流对应最大匹配,最小割割掉的边和点对应,割掉之后,相当于断开这个点相连的所有边。

最大独立集是最小点覆盖的补集,如果补集中有两点相连,说明这条边没有在最小点覆盖中覆盖到。

网络流

jyy 的引入:求不相交路径个数

我们考虑一个这样的问题,假设图 G 节点可以分为 S,T 两个集合,其中 S 没有向 T 连任何一条边,若 s∈S,t∈T,则从 s 到 t 没有路径。我们再考虑,若用 Cut(S,T) 表示从 S 向 T 连的边数目,给定 s,t,最小割定义为:

MinCut=minS,T;s∈S,t∈TCut(S,T)

最小割对应的 S,T 集合称为 S∗ 和 T∗.

再考虑从 s 到 t 的最多边不重复路径个数 MaxRoute,可以发现对于每一条路径,由于其从 S∗ 中的节点 s 出发,到 T∗ 中的节点 t 结束,因此,路径中必然存在一条边,连接了 u∈S∗,v∈T∗,而最多有 MinCut 这么多的这样的边,因此,可得:

MaxRoute≤MinCut

再考虑怎么证明等号可以取到,这里,我们考虑朴素的贪心:看到了一条路径,就取这条路径。

image-20231104110703271

类似于二分图最大匹配,我们采用反悔的机制。再考虑二分图最大匹配的证明,证明里面使用了对称差,其本质是一种加法,因此可以考虑给正向边和反向边都赋予权值,然后我们求出来路径里面,正向边和反向边是可以抵消的。

一开始,我们给所有正向的边赋予权值 1,所有反向的边赋予权值 0,假设我们决定取这条边,则正向赋予 0,反向赋予 1,代表我们可以反悔,通过后来反向取这条边,来不取这条边。

举例,假设我们先取了 1→2→3→4→6,边权如下:

image-20231104111057901

容易发现存在路径 1→3→2→4→5→6,因此,继续取这条路径。

image-20231104111306929

这两条路径进行抵消,可以得到 1→2→4→6,1→3→4→5→6。

再考虑一条新路径和原路径抵消之后为什么会多出来一条路径,这个其实和二分图增广路的思想差不多,画个图比较容易理解。

再考虑为什么算法结束的时候,一定能找到 MinCut 条路径,假设算法结束时,找到了 m 条路径。

因此,m=MaxRoute=MinCut.

利用重边,这种方法可以推广到边权为整数的情况,进而推广到非整数的情况。

最大流最小割定理

可以用这种方法理解网络流中的对偶性,即最大流=最小割,还可以用线性规划的方法理解:

假设有 k 种可能的路径 p1,⋯,pk,其对应的流量为 f1,⋯,fk,假设有 m 条边 e1,⋯,em,由每条边流量的限制:

∀ej,∑∀i,ej∈pifk≤C(ej)max∑i=1kfi

转化为对偶形式,假设第 j 个不等式取 λj 倍,则:

∀pi,∑∀j,ej∈piλj≥1min∑i=1mC(ej)λj

这其实就对应了最小割,表示任意一条路径都不能通过。

容易发现这样的线性规划 k 比较大,参数量多,求解困难,但是相对容易理解。我们还可以将流过边的流量设为参数,发现源点流出的、汇点汇入的时网络的总流量,并且满足节点没有流量残余,即最大流:

max v=∑e out of sf(e)=∑e into tf(e)s.t.∑e into vf(e)−∑e out of vf(e)=0,∀v∈V−s,tf(e)≤ce,∀e∈Ef(e)≥0,∀e∈E

可得它的对偶问题为:

min ∑e∈Eceyes.t. ui−uj+ye≥0,e=(i,j)∈E−us+ut=1ye≥0

对应了最小割。

E-K 算法

效率低的原因,是因为一次只找一条增广路。

Dinic 算法

核心思想在于每次找多条增广路。

BFS 算法求出有余量的,构建分层图-

遍历分层图上的后继节点,只要当前可用流量能够承受,就继续分叉,这样可以一次找多条增广路。

平面图转对偶图

如果图 G 是一张平面图,还可以通过转为对偶图的方法,用最短路求最小割。

image-20231104131220503

如图,如果源点是橙色的点,汇点是绿色的点,建立对偶图,在源-汇连线左手侧的边界边连到最短路的超级源点,右手侧的边界边连到最短路的超级汇点,最短路即对应最小割。

发现这样平面图的节点数和边数都是 m 量级,最短路时间复杂度 O(mlog⁡m),而原图网络流用 Dinic 算法复杂度 O(mn2),可见优化程度比较大。

最小费用最大流

每条边新增单位流量的费用 w(e),满足斜对称性,即 e 反向,费用取相反数,要求在最大化最大流的情况下,最小化:

∑ef(e)×w(e)

思路是每次寻找单位流量费用最小的增广路:w 的最短路。

习题

2.1

image-20231010192103651

法一:

利用不等式:

Cn1+n2−12−(Cn12+Cn22)=(n1−1)(n2−1)≥0⇒Cn1+n2−12≥Cn12+Cn22

因此,若 k 个联通支的节点数分别为 ni,∑ni=n,则:

∑Cni2≤C∑ni−k2=Cn−k2=12(n−k+1)(n−k)

法二:

数学归纳法。

再证明构造上届能取到……

2.2

image-20231010193013839

假设 G 和 G― 都不是连通图,G 分为 V1,V2 两个点集,V1∪V2=V,而且 V1,V2 间没有连边,G― 分为 V1′ 和 V2′,假设 V1∩V1′≠∅,则点集 V1∩V1′,V2∩V2′ 既在 G 中无连边,又在 G― 中无连边,矛盾。

2.3

image-20231010193349568

若存在两个不相交的道路 l1,l2,则必定存在 u∈l1,v∈l2,且 u,v 间存在一条道路与 l1,l2 均不相交(否则违反了连通的条件)

image-20231010193550312

a+b=c+d=lm,a+e+d≤lm,c+e+b≤lm⇒e≤0

显然矛盾。

2.4

image-20231010193652979

带弦回路的引理:如果简单图 G 的一条极长初级道路的一个端点的度数 ≥3,则 G 存在带弦回路。

假设 d(a1)≥3 且 a1 与 ai,aj 相连,且 i<j,则 a1a2⋯aja1 为一个回路,(a1,ai) 为它的弦。

证明:数学归纳法。当 n=4 时,命题显然成立;假设命题对于 n=k 时成立,考虑n=k+1,即考虑对于顶点数是k+1,边数大于等于2(k+1)−3的图G。设Γ是G的一条极长初级道路,v是Γ的一个端点, 如果d(v)≥3,则引理可得G有带弦回路,否则(即d(v)<3)G−v是有k个顶点, 边数>=2(k+1)−3−2=2k−3的图,根据归纳假设,G−v含有带弦回路,那么G也必含有带弦回路。

tips: 和边数相关的问题,常常使用数学归纳法。

2.5

image-20231010194815313

极端情况,当 n 为偶数时,分为两个部分,节点数都为 n/2,然后互相连边。

(d(a)−1)+(d(b)−1)≤n−2⇒d(a)+d(b)≤n

对于每一条边都如此求和,每个顶点的度数被求和的次数恰好为每个顶点的度数,因此:

∑d2(vi)≤mn

由柯西不等式:

mn≥∑d2(vi)mn2≥(∑1)(∑d2(vi))≥(∑d(vi))2=4m2

因此,m≤n24.

2.7

image-20231010200513155

数学归纳法。

2.17

image-20231010201025227

考虑 H 道路组成了子图 G′,则 G′−S 的连通支数 t′≤|S|+1 再考虑到是导出子图,因此 t≤t′。

2.21

image-20231010201713716

todo

2.25

image-20231010203552388

这个好做……

2.29

image-20231010204040866

运用缩点的思想

数学归纳法?

6.21

image-20231010213019069

同构图判定:

m+m′=n(n−1)2⇒m=n(n−1)4

这里就能看出 n,(n−1) 其中一个必定是 4 的倍数。

顶点度数,≥0,重排序列相同:

3,3,3,3⇒1,1,2,2+2,2,1,14,4,4,4,4⇒2,2,2,2,2+2,2,2,2,21,1,2,3,3+3,3,2,1,1

image-20231010213433119

如果有向,则顶点度数序列变为:

2,2,2;2,2,2⇒1,1,1;1,1,11,0,2;0,1,2⋯

image-20231010213705428

这时,对 n 没什么限制。

6.40

image-20231010213933442

06-12

一棵树有 n1 个节点的度数为 1,n2 个节点的度数为 2,……,nk−1 个节点的度数为 k−1,节点最大的度为 k,问这样的节点一共多少个:

∑i=1kini=2(∑i=1knk−1)

因此,

∑i=1k−1(i−2)ni+2=2nk−knk

因此:

nk=2+∑i=1k−1(i−2)ni2−k

和 n2 无关。 原因是这样相当于增加链的长度,无影响。

10-七

设 G 是一个连通图,其中 T 是 G 的一棵生成树,设 e 是 G−T 中的任意有一条边,证明:T+e 中有且仅有一个圈(初级回路)。

设 e=(u,v),