二分图的匹配.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第九章二分图中的匹配
三个典型问题:
(1)在一个有禁止位置的m×n棋盘上,能放置非攻击型车的最多个数是多少?
(2)在一个有禁止位置的m×n棋盘上,能放置多米诺牌覆盖的最多个数是多少?
(3)一个公司有n个工作空缺,需要有一定技能的人填补,同时有m个人申请这些项工作,每人能胜任n项工作中的若干项,问最多有多少项工作能找到合适的
人选?
9.1 一般的问题描述
定义1:
令X={x1, x2, …,x m}, Y={y1,y2, …,y n},且X∩Y=Ф,而△是序偶e=(x,y)的集合,其中x ∈X,y∈Y,那么三元组G=(X,△,Y)称作二分图。
定义2:
令G=(X,△,Y)是一个二分图,边集△的子集M,若M中没有两条边存在公共点,称M是二分图G的一个匹配。
定义3:
设G是一个二分图,定义ρ(G)={∣M∣:M是G的一个匹配}为二分图G的最大匹配边数。
9.2 匹配
定义1:
G=(X,△,Y),X={x1, x2, …,x m}, Y={y1,y2, …,y n},满足∣M*∣=ρ(G)的匹配M*称为二分图G的最大匹配。一般M*不唯一,且∣M*∣=ρ(G)≤min{m,n}。
寻找M*的困难点:
(1)若已知ρ(G),那么遍历所有可能的匹配会找到M*,但搜索量巨大;
(2)一般ρ(G)并不事先知道,要找到M*,并求出ρ(G)=∣M*∣难度更大。
定义2:
令u和v是二分图G=(X,△,Y)的任意两个顶点,连接u和v的互异顶点序列:γ:u=u0, u1, u2, …, u p-1, u p=v
使得任意两个相邻顶点有一条边连接,即:{ u0, u1},{ u1, u2},…, { u p-1, u p}∈△,那么称序列γ为二分图G的一个链。链长等于序列的边数p,若u=v, 链γ也叫圈。
定义3:
令M为二分图G=(X,△,Y)中的一个匹配,令M是M的补集,即G的不属于M的边集合,M∪M=△。令u和v是顶点,且u和v一个是左顶点(即属于X),一个是右顶点(即属于Y),若连接u和v的链满足下列性质:
(1)γ的第一、三、五、、、边属于M;
(2)γ的第二、四、六、、、边属于M;
(3)u和v都不与M的边相连。
那么称γ为关于匹配M的交错链,简称M-交错链。
M-交错链的性质:
(1)M-交错链γ的长是奇数2k+1, k≧0;
(2)设Mγ表示γ的属于M的边集合,Mγ表示γ的属于M的边集合,那么有:∣Mγ∣=∣Mγ∣+1
例:
定理9.2.1:
令M为二分图G=(X,△,Y)中的一个匹配,则M是最大匹配当且仅当不存在M-交错链。
推论9.2.1:
若M不是二分图G的最大匹配,那么必存在M-交错链。
进展:
得到了最大匹配的特征,即只需找M-交错链,找不到,则M就是最大匹配。
困难:
搜索M-交错链类似于穷举,算法上不可行,即在构造最大匹配的时候不知算法何时结束。
怎么办?
当找到一个匹配M时,希望能有一种方法直接直接验证其是否为最大匹配,若不是,则继续找(肯定能找到);若是,则算法结束。
定义4:
令G=(X,△,Y)是一个二分图,S是G的顶点X∪Y的子集,若G中任一条边的两个顶点至少有一个属于S,即:
{x,y}∩S≠Ф,对∀{x,y}∈△
则称S是G的一个覆盖。
例:
定义5:
令c(G)=min{∣S∣:S是G的覆盖},即c(G)是G的覆盖的最小顶点个数,称c (G)为G的覆盖数。显然,G的任一个覆盖S满足∣S∣≧c(G),把满足∣S∣=c(G)的覆盖S称为G的最小覆盖。
****图的最小顶点覆盖问题是典型的NP难题。
引理9.2.2:
如果G是一个二分图,那么ρ(G)≦c(G),即二分图G的最大匹配边数不会超过G 的覆盖数。
例:
求二分图G的最大匹配和最小覆盖的算法:
令G=(X,△,Y)是一个二分图,其中X={x1, x2, …,x m}, Y={y1,y2, …,y n},令M为得到的G的任一匹配。
(1)将X的所有不与M的边相关联的顶点标上(*),并称所有的顶点为未被扫描的,转(2);
(2)如果在上一步没有新的标记(例如(*),(y j))加到X的顶点上,则停止。否则,转(3);
(3)当存在X的被标记但未被扫描的顶点时,选择一个被标记但未被扫描的顶点,比如x i, 用(x i)标记Y的所有顶点,这些顶点被不属于M且尚未标记的边连到x i。现在顶点x i是被扫描的,若X中不存在被标记但未被扫描的顶点时,转(4);
(4)若在步骤(3)中没有新的标记加到Y中顶点上,则停止;否则,转(5);
(5)当存在Y中被标记但未被扫描的顶点时,选择Y中一个被标记但未被扫描的顶点,比如y j, 用(y j)标记X 的所有顶点,这些顶点被属于M且尚未标记的边连到y j。现在顶点y j是被扫描的,若Y中不存在被标记但未被扫描的顶点时,转(2);
例1:
如图,确定二分图G的最大匹配和最小覆盖。
算法的收敛性证明:
定义6:
突破点:存在Y中的被标记的点,该点不与M的边关联;
非突破点:算法终止,但未出现突破点,即Y中每一个被标记的顶点都与M的边关联。
结论:
在突破点情况,算法成功找到一个M-交错链,因此,可以构造一个比M更大的匹配,再重新应用匹配算法。
算法的正确性证明:
定理9.2.3:
设非突破点在匹配算法中发生,令X un由X中所有未被标记的顶点组成,并令Y lab由Y的所有被标记的顶点组成,则下列两个结论成立:
(1)S=X un∪Y lab是二分图G的最小覆盖;
(2)∣M∣=∣S∣,且M是G的最大匹配。
推论9.24(Konig定理):
令G=(X,△,Y)是一个二分图,则ρ(G)=c(G),即二分图G的最大匹配边数