二分图的匹配.

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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的最大匹配边数

相关文档
最新文档