0. 前言
又到了上课的时间,组合数学的书是《组合理论及其应用》,这次从二分图(第六章)开始讲起。这本书的二分图是从几何的角度进行讲述。这里有个题外话,组合数学的前序课程应该是《离散数学》,主要包括数理逻辑、集合论、代数和图论四个部分。
1. 相异代表系
1.1 定义
相异代表系是针对几何来讲的,这里主要抓住“相异”、“代表”、“系”三个部分来进行区分,首先是系表明是一个集合,代表则是集合内每一个元素代表着一个子集(即该元素来源于这个子集),相异表明其元素各不相同。下面给出其形式化定义:
例如:
A1={1,4},A2={1,2,3},A3={3,4,5},A4={3,4,5},其一个代表系可以是:{1,1,3,3}(有元素相同),而一个相异代表系则可以是:{1,2,3,4}(每个元素都来自不同的子集,都不相同)。
1.2 集族有相异代表系的条件
非空集合构成的集族一定有代表系,但不一定有相异代表系。那么什么时候集族有相异代表系呢?1935年的何氏定理告诉了我们的充要条件。
这定义比较拗口,其大致意思就是若有n个子集,从中任意选取k个子集,其并集的元素个数≥k。这里有一个疑问,这定理有啥用啊,相异代表系好像仅仅是为了存在而存在啊?这个疑问我们先放一放,因为这个问题我们后面解释。
既然是数学,那么给出一个定理时,一个必要的操作就是要证明它。这是一个充要条件。必要性是必然的,因为互不相同的k个元素的并集一定是大于等于k的,下面主要证明充分性。
这里又有一个题外话:数学的证明方法有哪些?
需要证明和整数n有关,且n为无穷时,使用数学归纳法;
需要证明和整数n有关,且n是有限的,使用枚举法(分类讨论、分析法)
直接证明、间接证明都不太容易时,使用反证法。
如果要考虑最值、条件时,使用构造法。
这里使用数学归纳法进行证明:
当m=1时,
∣A1∣≥1成立。
当m<n时,假设满足条件。
当m=n时,这里再使用分类讨论方法进行证明。
(1)对任意
1≤k≤n−1,任意选择
1≤i1≤i2≤i3≤...≤ik≤n,满足条件
∣i=1⋃kAi∣≥k+1(这个条件比定理上的要求更严格)此时,取
en∈An,使得
∣i=1⋃kAi−{en}∣≥k
则
e1,e2,...,en−1就是其(
Ai−{en})相异代表系,从而使得
e1,e2,...,en−1,en是其
{A1,A2,...,An}的相异代表系。
以上只是比较好证明的一部分,下面证明剩余的部分:
(2)对存在
1≤p≤n−1,存在某种选择
1≤i1≤i2≤i3≤...≤ip≤n,使得
∣A1∪A2∪...∪Ap∣=p,符合假设条件,有相异代表系
F={e1,e2,...,ep}(到这里都是在找一个前提条件)。
现在考虑剩余的n-p个集合构成的集族
{Ap+1−F,Ap+2−F,...,Ap+n−F},对于任意
1≤k≤n−p有
∣(Aj1−F)∪(Aj2−F)∪...∪(Ajk−F)∣
=∣(Aj1∪Aj2∪...∪Ajk)−F∣
=∣(A1∪A2∪...∪Ap∪Aj1∪Aj2∪...∪Ajk)−F∣
≥(p+k)−p=k
满足定理原始条件,即
{Ap+1−F,Ap+2−F,...,Ap+n−F}有相异代表系
{ep+1,ep+2,...,en},因此结合前提条件,就可以获得存在相异代表系
{e1,e2,...,en}。
综上(1)(2)证毕。
1.3 集族的子集存在相异代表系
如果集合E没有相异代表系,则最多可以有多少r元子集有相异代表系?下面这个定理告诉我们:
还是需要证明:
当
1≤k≤n−r时,等式右边是负数,不等式自动满足。
这里证明分为两步走,首先令
F={f1,f2,...,fn−r},且
F∩(A1∪A2∪...∪An)=∅
先证明(1):{A_1,A_2,…,A_n}的r 元子集有相异代表系,当且仅当
{A1∪F,A2∪F,...,An∪F}有相异代表系。
先证明充分性。假设集族有r元子集相异代表系为
e1,e2,...,er,显然
e1,e2,...,er,f1,f2,...,fn−r就是
{A1∪F,A2∪F,...,An∪F}的相异代表系。
再证明必要性。假设
{A1∪F,A2∪F,...,An∪F}有相异代表系
x1,x2,...,xn,因为F中只有n-r个元素,所以
x1,x2,...,xn中至少有r个元素不在F中,因此
x1,x2,...,xr是
{A1,A2,...,An}的一个相异代表系。
然后证明(2):定理6.1.2。
根据定理6.1.1,
{A1∪F,A2∪F,...,An∪F}有相异代表系,且
∣(A1∪F)∪(A2∪F)∪...∪(Ak∪F)∣≥k
从而
∣(A1∪F)∪(A2∪F)∪...∪(Ak∪F)∣
=∣A1∪A2∪...∪Ak∪F∣
=∣A1∪A2∪...∪Ak∣+∣F∣
从而
=∣A1∪A2∪...∪Ak∣≥k−(n−r)
也就是
=∣A1∪A2∪...∪Ak∣+(n−k)≥r
因此,可以有以下推论:
这个意思就是说,要使得选取的集合数最多,而其并集的个数最小。
2. 二分图
2.1 二分图的定义
如果一个图的节点的集合V可以分为2个部分,分别是X和Y,且
V=X∪Y,X∩Y=∅,且其边均为[x,y]其中
x∈X,y∈Y,则该图为二分图。也就是说该图的节点两个部分,所有的边都在这两个部分之间,各部分之内没有边,如图所示:
这是一个非常特殊的图结构,具有很多特性。等等,既然二分图的定义这么简单,那为啥第一章还要介绍相异代表系呢?
2.2 二分图的匹配
上图的一个用处就是描述“婚姻匹配”问题,(左边都是女生,右边都是男生,毕竟女生比男生少嘛),那这样就是否存在一个匹配,使得女生都有归宿。如果存在这样一个匹配,就可以使用相异代表系表示。例如上图可以表示为集族:
A1={y1,y2},A2={y1,y3},A3={y2,y3,y4},A4={y4,y5},则
{[1,y1],[2,y3],[3,y4],[4,y5]}没有公共节点,因此是该图的一个匹配。(也是其集族的相异代表系)。
因此这个二分图和相异代表系的关系如下:
2.3 二分图的覆盖
刚才是从边出发,给定结点的约束条件,从而形成匹配的概念。与之相反的,二分图的覆盖则从点出发,给定边的约束条件:
如果结点集合S
⊆X∪Y,使得边集合
△每条边至少有一个结点在其中,则称S为
△的一个覆盖。
例如,上图中
{1,2,3,4},{3,4,y1,y2,y3}都是
△的覆盖
2.4 匹配与覆盖的关系
就像上面的两个定义一样,一个是从边给出约束条件(匹配),一个是从结点给出约束条件(覆盖),但是都是对于一张二分图的描述,那么这两个之间存在什么关系呢?
我们拍脑袋想嘛,应该是匹配的边的数量一般会小于覆盖的节点数(因为这是简单图,一个边只能有2个节点,但是节点可以有多个边),而且,匹配的边一般是二分图的边的子集,而覆盖的结点多半会有重复的,也就是存在冗余。
因此,如果以匹配的最大边数为匹配数,以覆盖的最小节点数为覆盖数,则其两者相等。
数学就是,来一个定理,就要给出证明。这是个两个数相等的证明,一般证明使用“夹逼”方法。
1)
首先证明匹配数α≤覆盖数β
设M是二分图的最大匹配,S为二分图的最小覆盖。由于M中没有两边存在公共节点,并且M中的
α条边每边至少有一个结点在S中,所以
α≤β。后半句容易理解,因为每条边至少会有一个节点在S中,否则S就不是覆盖了。而前半句旨在说明
α是不重不漏计数的,因此后半句才能够成立。
2)
接着证明匹配数α≥覆盖数β
由第一节中相异代表系最大子集数推论(6.1.1)可知,一定存在整数k,选择
i1,i2,...,ik使得
∣Ai1∪Ai2∪...∪Aik∣+(n−k)=α
然后,考虑证明
T=(Ai1∪Ai2∪...∪Aik)∪(X−{i1,i2,...,ik})为覆盖即可。可从两个方面考虑,任取一条边[x,y].
一、当
x∈{i1,i2,...,ik}时,存在一个点
x=il,使得
y∈Ail,从而
y∈T.
二、当
x∈X−{i1,i2,...,ik}时,则
x∈T。
这样[x,y]都在T中,又因为
∣T∣=∣Ai1∪Ai2∪...∪Aik∣+∣X−{i1,i2,...,ik}∣
=∣Ai1∪Ai2∪...∪Aik∣+(n−k)=α
因此T是具有
α个节点的覆盖,而
β是最小覆盖,因此
α≥β
综上所述
α=β
3. 二分图的匹配算法
盖饭算法是来判断一个二分图的匹配M是否是最大匹配。如果不是,如何修改M得到更多的匹配,依此循环从而获得最大匹配。
3.1交错链
由于交错链有一个特性即在关于M的交错链中,不在M中的边数比在M中的边数多1,因此当我们反转其边时,就可以获得更多的边了。
首先给出基本链的定义:
基本链有一些性质:
若n为偶数,则基本链的边数为偶数,此时头结点
u0和尾结点
un同属于X或同属于Y
若n为奇数,则基本链的边数为奇数,此时头结点
u0和尾结点
un分别属于X和Y。
正是有这样的特殊性质,才有了交错链的存在:
例如:
经过这一次变换,就增加了一条边在M中,现在有4条边了。但是有5个节点,因此接下来,还可以再试一把。
有了交错链就可以找到最大匹配了。
有了定理,本来是该高兴的事,但是有定理就要证明。
首先证明必要性,即若M是具有最大边数的匹配,则不存在关于M的交错链(==>)。
如图所示,假设存在r是M的一个交错链,则
∣N0∣=∣M0∣+1,令
M′=(M−M0)∪N0,由于
N0和
(M−M0)都是而二分图的一个匹配,如果
M−M0与
N0没有公共节点,那么
M′就是比
M多1条边的匹配。
下面证明
M−M0与
N0没有公共节点,设
[x,y]∈N0。
1)若
[x,y]是首边(或尾边),如图所示,x不在
M中,y在M中,因此y不在
M−M0中,因此
[x,y]不在
M−M0中。
2)若[x,y]是中边,则x,y都在
M0,显然不在
M−M0中。
综上所述,
M−M0与
N0没有公共节点,因此
M′就是比
M多1条边的匹配,与原条件不符,反证结束。
然后证明充分性,如图所示,在交错链中,红色的比蓝色的多一条边。
3.2 寻找最大匹配算法
有了上面这条定理,我们就可以实现以下寻找最大匹配的算法了。
这里我们先给出例子,然后再给出第一步结束的证明。
通过第一步,就可以找到这条红蓝相间的交错链,此时是到第二步停止。我们使用红色代替蓝色,将红色置为粗体(在M中),蓝色变回正常(不在M中),从而得到新的匹配。
再在M中再执行一次算法,可以得到红蓝边数相等,此时已经无法继续增加匹配中边的数量了,因此此时算法结束,
M′为最大匹配。
虽然我们从直观上可以发现并不能继续增加更多的边了,但是数学上,要讲究证明,即证明定理6.3.2。
该定理就是要证明,若S是覆盖,且
∣S∣=∣M∣,则M是最大匹配。
这里面说的比较拗口,因为是完全从具体说法上的解释。在证明第一个时,其反证法主要证明若
e=[x,y]不在S中,以两种情况考虑即
e∈M和
e∈/M;证明第二个则以x和y两个角度考虑。其核心是在算法的过程中体现出来的。
3.3 判断一个图是否为二分图
这里增加一个题目,就是如何判断一个图是二分图?
当然无脑想法就是暴力解决,按照循环去遍历不同的划分使得该图可以成为两部分,再判断两部分内部是否有无相连的边。
但是这样时间复杂度上至少是
O(n3)。如果能先进行一次划分,再去判断多好?根据二分图的性质,在图中,任意选取一点,将其与其连接的点按照边数长度奇偶划分成两部分,再判断这两部分是否内部有相连即可,此时可以减少至
O(n2)。当然,也可以使用广度优先算法[代码]进行黑白着色,从而判断一个图是否是二分图(时间复杂度也是
O(n2))。
当然也可以从,若一个图不存在奇数环,则该图是二分图入手,证明一个图不存在奇数环即可,这个等价定理还需要证明才能够实现。