二分图及二分图匹配
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
9.1 二 分 图
9.1.1 二分图的基本概念
定义9.1 无向图G =
e∈E,Y(e) = (x, y),x∈X,y∈Y。此时常用
简而言之,就是顶点集V可分割为两个互不相交的子集,并且图中每条边依附的两个顶点都分属于这两个互不相交的子集。
例9.1 图9.1中(a),(b)为二分图,(c)为完全二分图K3,3,(d), (e)不是二分图。
二分图的下列特征性是重要的。
定理9.1 无向图G为二分图的充分必要条件是,G至少有两个顶点,且其所有回路的长度均为偶数。
证 先证必要性。
设G为二分图
C = ( v0,v 1,v2,…,v l-1,v l = v0 )
其中诸v i ( i = 0,1,…,l )必定相间出现于X及Y中,不妨设
{v0,v2,v4,…, v l = v0} Í X
{v1,v3,v5,…, v l-1} Í Y
因此l必为偶数,从而C中有偶数条边。
再证充分性。
设G的所有回路具有偶数长度,并设G为连通图(不失一般性,若G 不连通,则可对G的各连通分支作下述讨论)。
令G的顶点集为V,边集为E,现构作X,Y,使
v0ÎV,置
X = {v | v= v0或v到v0有偶数长度的通路}
Y = V-X
X显然非空。现需证Y非空,且没有任何边的两个端点都在X中或都在Y 中。
由于|V|≥2并且G为一连通图,因此v0必定有相邻顶点,设为v1,那么v1ÎY;故Y不空。
设有边(u, v), 使uÎX,vÎX。那么,v0到u有偶数长度的通路,或u = v0;v0到v有偶数长度的通路,或v = v0。无论何种情况,均有一条从v0到v0的奇数长度的闭路径,因而有从v0到v0的奇数长度的回路(因从闭路径上可能删去的回路长度总为偶数),与题设矛盾。故不可能有边(u, v)使u, v均在X中。
“没有任何边的两个端点全在Y中”的证明可仿上进行,请读者思考。
二分图是十分有用的一种数学模型,许多问题可以用它来刻划。例
如“资源分配”、“工作安排”、“人员择偶”等等。但是,利用二分图分析解决这类问题时,还需要有关二分图的另一个概念——匹配。
匹配
定义9.2设G =
例9.2图9.2中各图的粗线表示匹配中的边(简称匹配边)。(b)中匹配是最大的,X-完全的,(c)中匹配是完全的(从而也是最大的)。
注意,最大匹配总是存在但未必唯一。此外,X(Y)-完全匹配及完全匹配必定是最大的,但反之则不然;X(Y)-完全匹配未必存在。
为讨论最大匹配的求法及完全匹配的存在条件,需要下列术语。
定义9.3设G =
(1)M中边的端点称为M-顶点,其它顶点称为非M-顶点。
(2)G中v k到v l的通路P称为交替链,如果P的起点v k和终点v l为
非M-顶点,而其边的序列中非匹配边与匹配边交替出现(从而首尾两边必为非匹配边,除顶点v k,v l以外各顶点均为M-顶点)。特别地,当一边(v, v')两端点均为非M-顶点,通路(v, v')亦称为交替链。
匈牙利算法
以下算法可把G中任一匹配M扩充为最大匹配,此算法是Edmonds 于1965年提出的,被称为匈牙利算法,其步骤如下:
(1)首先用(*)标记X中所有的非M-顶点,然后交替进行步骤(2),(3)。
(2)选取一个刚标记(用(*)或在步骤(3)中用(y i)标记)过的X中顶点,例如顶点x i,然后用(x i)去标记Y中顶点y,如果x i与y为同一非匹配边的两端点,且在本步骤中y尚未被标记过。重复步骤(2),直至对刚标记过的X中顶点全部完成一遍上述过程。
(3)选取一个刚标记(在步骤(2)中用(x i)标记)过的Y中结点,例如y i,用(y i)去标记X中结点x,如果y i与x为同一匹配边的两端点,且在本步骤中x尚未被标记过。重复步骤(3),直至对刚标记过的Y中结点全部完成一遍上述过程。
(2),(3)交替执行,直到下述情况之一出现为止:
(Ⅰ)标记到一个Y中顶点y,它不是M-顶点。这时从y出发循标记回溯,直到(*)标记的X中顶点x,我们求得一条交替链。设其长度
为2k+1,显然其中k条是匹配边,k+1条是非匹配边。
(Ⅱ)步骤(2)或(3)找不到可标记结点,而又不是情况(Ⅰ)。(4)当(2),(3)步骤中断于情况(Ⅰ),则将交替链中非匹配边改为匹配边,原匹配边改为非匹配边(从而得到一个比原匹配多一条边的新匹配),回到步骤(1),同时消除一切现有标记。
(5)对一切可能,(2)和(3)步骤均中断于情况(Ⅱ),或步骤(1)无可标记结点,算法终止(算法找不到交替链)。
我们不打算证明算法的正确性,只用一个例子跟踪一下算法的执行,来直观地说明这一点。
例9.3 用匈牙利算法求图9.3的一个最大匹配。