计算图中的最大对集的匈牙利方法

合集下载

图的匹配与覆盖问题

图的匹配与覆盖问题

图的匹配与覆盖问题图是一种用边来表示对象之间关系的数据结构。

在图论中,匹配与覆盖问题是指在给定的图中找到一组特定的边或顶点子集,使得满足一定的条件。

本文将探讨图的匹配与覆盖问题的概念、应用以及解决方法。

一、图的匹配问题图的匹配问题是指在一个无向图中,找到一组边的集合,使得任意两条边都没有公共的顶点。

这样的边集被称为匹配。

图的匹配问题有很多实际应用,比如稳定婚姻问题、配对问题等。

解决图的匹配问题的方法有多种,其中最常见的是匈牙利算法。

匈牙利算法采用增广路径的方法,通过不断增加匹配的边,直到无法找到新的匹配边为止。

该算法具有很高的时间效率,适用于大规模的图。

二、图的覆盖问题图的覆盖问题是指在一个无向图中,找到一组顶点的集合,使得图中的每条边都至少与集合中的一个顶点相邻。

这样的顶点集合被称为图的覆盖集。

图的覆盖问题在实际应用中也非常常见,比如任务分配问题、资源分配问题等。

解决图的覆盖问题的方法有多种,其中一种常见的方法是使用最小点覆盖定理。

最小点覆盖定理指出,在一个图中,最少的顶点个数的集合,使得该集合中的顶点覆盖整个图的边,即为最小点覆盖集。

通过求解最小点覆盖问题,可以得到图的最小覆盖集。

三、图的匹配与覆盖问题的应用图的匹配与覆盖问题在实际应用中有着广泛的应用。

以下是几个常见的应用场景:1. 稳定婚姻问题稳定婚姻问题是图的匹配问题的一种具体表现形式。

在稳定婚姻问题中,有一组男性和女性,每个人对异性有着不同的偏好。

稳定婚姻问题的目标是找到一组完美匹配,使得不存在任何一个男性和女性同时都喜欢对方而不喜欢自己匹配的对象。

这个问题可以通过图的匹配问题来求解。

2. 任务分配问题任务分配问题是图的覆盖问题的一种具体表现形式。

在任务分配问题中,有一组需要完成的任务和一组可以执行任务的人员。

每个任务需要特定的技能和资源,每个人员也有不同的技能和资源。

任务分配问题的目标是找到一种最优的分配方案,使得每个任务都被分配到合适的人员,并且每个人员分配到的任务不会使其超负荷。

图论第5、6章

图论第5、6章

第5章 对集
算法用生长“以u为根的M交错树”的 方法 ,来系统地搜索M可扩路. 树中除 u外都是M饱和的,直到碰到第一个 M 不饱和的顶点时,即得一M可扩路.当树 不能再生长下去时,即有N(S)=T.
本算法是个‘好’算法: 从一个M到 下一个,至多进行X次搜索运算;M 至多扩大X次.
例:
5.5 最优分派问题
第5章 对集
构作一个具有二分类(X, Y)的偶图G,其中 X={X1, X2, …, Xn},Y={Y1, Y2, …, Yn}, 并且Xi与Yj相连当且仅当工人Xi胜任工作Yj. 于是问题转化为确定G是否有完美对集的问 题.
下面给出的算法称为匈牙利算法,对任意 一个具有二分类(X, Y)的偶图G,它寻找G 的一个饱和X中所有顶点对集,或找到X的 一个子集S,使|N(S)| < |S| .
第5章 对集
若G有正常的k边着色,则称G是k边可着色的. 每个无环图都是ε边可着色的; 若G是k边可着色的,则一定是k+1边可着色的. 使G为k边可着色的最小整数k称为G的边色数, 记为χ’(G) . 若G的边色数为k,也称G是k边色的. 下图的边色数是多少?
第5章 对集
显然,在任何正常边着色中,和任一顶 点关联的边必须分配以不同的颜色,因 此
第5章 对集
定理5.2(Hall 1935) 设G是具有二分类(X,Y) 的偶图,则G包含饱和X的每个顶点的对集当 且仅当
|NG(S)|≥|S| 对所有S ⊆ X成立.
❖Hall定理是图论中最有用的定理之一,它 在数学及其他许多学科中都有应用.
Hall定理的证明
第5章 对集
必要性 假设G包含对集M,它饱和X的每个顶 点,并设S是X的子集. 由于S的顶点在M下和 N(S)中相异顶点配对,显然有|N(S)| ≥ |S| .

匈牙利算法和KM算法简介

匈牙利算法和KM算法简介

KM算法
❖ 穷举旳效率-n!,我们需要愈加优异旳算法。 ❖ 定理: ❖ 设M是一种带权完全二分图G旳一种完备匹配,给
每个顶点一种可行顶标(第i个x顶点旳可行标用lx[i] 表达,第j个y顶点旳可行标用ly[j]表达),假如对全 部旳边(i,j) in G,都有lx[i]+ly[j]>=w[i,j]成立(w[i,j]表达 边旳权),且对全部旳边(i,j) in M,都有lx[i]+ly[j]=w[i,j] 成立,则M是图G旳一种最佳匹配。证明很轻易。
KM算法
❖ 对于任意旳G和M,可行顶标都是存在旳:
❖ l(x) = maxw(x,y)
❖ l(y) = 0 ❖ 欲求完全二分图旳最佳匹配,只要用匈牙利算法求
其相等子图旳完备匹配;问题是当标号之后旳Gl无 完备匹配时怎么办?1957年(居然比匈牙利算法 早???),Kuhn和Munkras给出了一种处理该问 题旳有效算法,用逐次修改可行顶标l(v)旳方法使相 应旳相等子图之最大匹配逐次增广,最终出现完备 匹配。
KM算法
❖ 修改措施如下:
❖ 先将一种未被匹配旳顶点u(u in {x})做一次增广路, 记下哪些结点被访问那些结点没有被访问。求出 d=min{lx[i]+ly[j]-w[i,j]}其中i结点被访问,j结点没有 被访问。然后调整lx和ly:对于访问过旳x顶点,将 它旳可行标减去d,对于全部访问过旳y顶点,将它 旳可行标增长d。修改后旳顶标仍是可行顶标,原 来旳匹配M依然存在,相等子图中至少出现了一条 不属于M旳边,所以造成M旳逐渐增广。
Empty Grass Wall
例题1 Place the Robots(ZOJ)
模型一
在问题旳原型中,草地,墙这些信 息不是我们所关心旳,我们关心旳 只是空地和空地之间旳联络。所以, 我们很自然想到了下面这种简朴旳 模型:

二分图

二分图
二分图匹配
匈牙利算法和KM算法简介
二分图的概念
二分图又称作二部图,是图论中的一种特殊 模型。 设G=(V,{R})是一个无向图。如顶点集V可分 割为两个互不相交的子集,并且图中每条边 依附的两个顶点都分属两个不同的子集。则 1 2 3 4 5 称图G为二分图。
1
2
3
4
最大匹配
给定一个二分图G,在G的一个子图M中,M 的边集{E}中的任意两条边都不依附于同一个 顶点,则称M是一个匹配。 选择这样的边数最大的子集称为图的最大匹 最大匹 配问题(maximal matching problem) 配问题 如果一个匹配中,图中的每个顶点都和图中 某条边相关联,则称此匹配为完全匹配 完全匹配,也 完全匹配 称作完备匹配。 完备匹配。 完备匹配
KM算法
穷举的效率-n!,我们需要更加优秀的算法。 定理: 设M是一个带权完全二分图G的一个完备匹配,给 每个顶点一个可行顶标(第i个x顶点的可行标用lx[i] 表示,第j个y顶点的可行标用ly[j]表示),如果对所 有的边(i,j) in G,都有lx[i]+ly[j]>=w[i,j]成立(w[i,j]表示 边的权),且对所有的边(i,j) in M,都有lx[i]+ly[j]=w[i,j] 成立,则M是图G的一个最佳匹配。证明很容易。
匈牙利算法
在主程序中调用下面的程序即可得出最大匹 配数。 Bmatch := 0; For I:=1 to n do Bmatch := Bmatch + find(i); Writeln(Bmatch); 一个关于二分图的性质: 最大匹配数+最大独立集=X+Y
最佳匹配
如果边上带权的话,找出权和最大的匹配叫 做求最佳匹配。 实际模型:某公司有职员x1,x2,…,xn,他们去 做工作y1,y2,…,yn,每个职员做各项工作的效 益未必一致,需要制定一个分工方案,使得 人尽其才,让公司获得的总效益最大。 数学模型:G是加权完全二分图,求总权值 最大的完备匹配。

BipartiteGraph

BipartiteGraph
1 2 3 4 5
1 2
5
3 4
1
2
3
4
由于每条边表示一个空地,有冲 突的空地之间必有公共顶点,所 以问题转化为二部图的最大匹配 问题。
1
2
3
4
例题1 Place the Robots(ZOJ)
小结
比较前面的两个模型:模型一过于简单,没有给问 题的求解带来任何便利;模型二则充分抓住了问题的内 在联系,巧妙地建立了二部图模型。为什么会产生这种 截然不同的结果呢?其一是由于对问题分析的角度不同: 模型一以空地为点,模型二以空地为边;其二是由于对 原型中要素的选取有差异:模型一对要素的选取不充分, 模型二则保留了原型中“棋盘”这个重要的性质。由此 可见,对要素的选取,是图论建模中至关重要的一步。
二分图匹配
匈牙利算法和KM算法简介
二分图的概念
二分图又称作二部图,是图论中的一种特殊
模型。 设G=(V,{R})是一个无向图。如顶点集V可分 割为两个互不相交的子集,并且图中每条边 依附的两个顶点都分属两个不同的子集。则 1 2 3 4 5 称图G为二分图。
1
2
3
4
最大匹配
给定一个二分图G,在G的一个子图M中,M
1
2 3
4
1 3 8 5 7 2
8 7 6 5
4
这是NP问题!
6
例题1 Place the Robots(ZOJ)
模型二
我们将每一行,每一列被墙隔开, 且包含空地的连续区域称作 “块”。显然,在一个块之中, 最多只能放一个机器人。我们把 这些块编上号。
1 2
5
3 4
同样,把竖直方向的块也编上号。
1
KM算法

匈牙利算法和KM算法简介

匈牙利算法和KM算法简介

匈牙利算法
程序清单: Function find(k:integer):integer; var st,sf,i,j,t:integer; queue,father:array[1..100] of integer; begin queue[1] := k; st := 1; sf := 1; fillchar(father,sizeof(father),0); repeat
3
4
例题1 Place the Robots(ZOJ) 模型二
把每个横向块看作X部的点,竖向 块看作Y部的点,若两个块有公共 的空地,则在它们之间连边。 于是,问题转化成这样的一个二 部图:
1 2 3 4 5
1 2 5 3 4
1 2
1 2 3 4
3
4
例题1 Place the Robots(ZOJ) 模型二
KM算法
穷举的效率-n!,我们需要更加优秀的算法。 定理: 设M是一个带权完全二分图G的一个完备匹配,给 每个顶点一个可行顶标(第i个x顶点的可行标用lx[i] 表示,第j个y顶点的可行标用ly[j]表示),如果对所 有的边(i,j) in G,都有lx[i]+ly[j]>=w[i,j]成立(w[i,j]表示 边的权),且对所有的边(i,j) in M,都有lx[i]+ly[j]=w[i,j] 成立,则M是图G的一个最佳匹配。证明很容易。
例题1 Place the Robots(ZOJ1654) 问题描述
有一个N*M(N,M<=50)的棋盘, 棋盘的每一格是三种类型之一: 空地、草地、墙。机器人只能放 在空地上。在同一行或同一列的 两个机器人,若它们之间没有墙, 则它们可以互相攻击。问给定的 棋盘,最多可以放置多少个机器 人,使它们不能互相攻击。

匹配与覆盖


求赋权完备二元图G = (X, Y, E, F )的最佳匹配 ——KM算法
算法迭代步骤:
设G =(X, Y, E, W)为赋权完备二元图,L是其一个初始可行 点标记,通常取
L(x) = max {w (x ,y) | y∈Y}, x∈X,
L(y) = 0, y∈Y. M是相等子图GL的一个匹配.
S , 定义 G 中 S 的 邻集 为与 S 的
集合 ; 记为 N G ( S ).
定理(Hall定理):设二部图G=<V1,V2,E>中,|V1|≤|V2|. G 中存在从V1到V2的完备匹配当且仅当V1中任意k(k=1,2,…,|V1|) 个顶点至少与V2中的k个顶点相邻. 即:G存在从V1到V2的完备匹配的充要条件是对任意V1 的子集 S,有 | N (S ) | ≥ | S | . 由Hall定理立刻可知,上图中(2)为什么没有完备匹配.
二元图G的完美匹配:设M是二部图G的一个匹配,如果G的 每一个点都是M中边的顶点,则称M是二部图G的完美匹配.
二元图G的完备匹配:设G=<V1,V2,E>为二部图,|V1||V2|, M是G中最大匹配,若V1中顶点全是M饱和点,则称M为G中 完备匹配. |V1|=|V2| 时完备匹配变成完美匹配. 二元图G的最大匹配:如果G中没有另外的匹配M0 ,使|M0| >|M|,则称M是二部图G的最大匹配. 二元图G的最佳匹配:在二部赋权图G =(X, Y, E, W )中,权 数最大的最大匹配M称为二部赋权图G的最佳匹配.
二元图的匹配
二元图又称作二部图,是图论中的一种特殊模型.
二元图:如果一个图的顶点可以分为两个集合X和Y,图的
所有边一定是有一个顶点属于集合X,另一个顶点属于集合Y, 则称该图为“二元图”

匹配的概念


定义4 G = (V1 ,V2 ; E ) 是加权完全偶图,V1 = { x1 , x2 ,..., xn }, 对所有完备匹配M ′,都有W ( M ) ≥ W ( M ′ ),则称M 为偶图
KM算法前的准备
在介绍求最佳匹配的KM算法前,首先介绍一些 相关的概念: 定义5 映射l : V ( G ) → R满足x ∈ V1,y ∈ V2,成立
二分图的最佳匹配问题
V2 = { y1 , y2 ,..., yn },权w ( xi y j ) ≥ 0。如果有一完备匹配M , G的最佳匹配。 G的最佳匹配。
由于引入了权,所以最佳匹配不能直接套用最大匹配算法 进行求解。同时,由于对最佳匹配的定义是建立在完全加权 二分图的基础上的,对于不完全图,可以通过引入权为0 (或是其他不影响最终结果的值),使得二分图称为完全二 分图,从而使用最佳匹配算法来解决。
一个实例
Y1 X1 X2 X3 X4 X5 3 2 2 0 1 Y2 5 2 4 1 2 Y3 5 0 4 1 1 Y4 4 2 1 0 3 Y5 1 2 0 0 3
若工人x 完全不能 参与工作 y,则 w(x,y)=0
流程(1)
首先,选取可行顶标l(v)如下: l ( y ) = 0, i = 1, 2,3, 4,5;
l ( x1 ) = max {3,5,5, 4,1} = 5,
l ( x2 ) = max {2, 2, 0, 2, 2} = 2, l ( x3 ) = max {2, 4, 4,1, 0} = 4, l ( x4 ) = max {0,1,1, 0, 0} = 1, l ( x1 ) = max {1, 2,1,3,3} = 3
例题: 例题:小狗散步
Grant喜欢带着他的小狗Pandog散步。Grant以一定的 速度沿着固定路线走,该路线可能自交。Pandog喜 欢游览沿途的景点,不过会在给定的N个点和主人 相遇。小狗和主人同时从点出发,并同时在点汇合。 小狗的速度最快是Grant的两倍。当主人从一个点以 直线走向另一个点时,Pandog跑向一个他感兴趣的 景点。Pandog每次与主人相遇之前最多只去一个景 点。 已知n个定点的坐标和m个景点的坐标。你的任务是: 为Pandog寻找一条路线(有可能与主人的路线部分 相同),使它能够游览最多的景点,并能够准时与 主人在给定地点相遇或者汇合。

匈牙利算法详解

大意:已知两个图和两个图中的点和边的连接情况,求两个图中最多能连接的边的数目。

(每个点最多只能连接一条边)分析:算法总体可以采用类似于探索的方法,例如下面的这个图。

CADBE如这个有向图,共有5个结点A、B、C、D、E,A、B作为第一张图,C、D、E作为第二张图。

第一次DFS时先看A连接的点(顺序查找)是否已经有爹了,发现没有,那么爹变成了A,同时A的匹配找到了。

再找B的匹配,发现C已经有爹了即A,那么就试探A的下一个连接点发现没有爹且能与B相连,那么B的匹配也找到了,依次类推直到推到最后。

代码:function dfs(x:longint):boolean;vari:longint;beginif use[x] then exit(false);{如果出现某个点访问过返回false。

}use[x]:=true;{同时标记为已访问过。

}for i:=1 to m dobeginif (b[x,i]) and ((link[i]=0) or (dfs(link[i]))) then{如果要连的点还没爹可以连,或者是它的爹的所连的点还有剩余就可以继续(前提是必须可以相连)。

}beginlink[i]:=x;{修改爹。

}exit(true);end;end;exit(false);end;procedure XYL;vari:longint;beginfor i:=1 to n do{先进行查找。

}beginfillchar(use,sizeof(use),false);{初始化每个点都未访问过以便遍历图。

}if dfs(i) then inc(ans);{返回true说明可以匹配。

}end;writeln(ans);end;。

学习图的最大匹配

学习图的最大匹配图论作为一门重要的数学理论,广泛应用于计算机科学、网络优化等领域。

其中,图的最大匹配问题是图论中的一个经典问题,它在实际中有着广泛的应用。

本文将重点介绍学习图的最大匹配问题的相关理论和算法,并探讨一些实际应用场景。

一、图的最大匹配问题的定义图的最大匹配问题是指在一个无向图中,找到一个最大的边集合,使得图中每个顶点最多与这个集合中的一条边相连。

这个集合就是图的最大匹配。

最大匹配问题可以描述为在一个集合中选取最多的元素,使得这些元素之间没有相同的关联,且集合的大小最大。

二、最大匹配问题的解决算法解决最大匹配问题的经典算法有匈牙利算法和增广路径算法。

1. 匈牙利算法匈牙利算法是最早提出来解决最大匹配问题的算法之一。

它通过不断寻找增广路径,来寻找增加匹配边的方法。

算法的基本思想是从未匹配的顶点开始,通过寻找增广路径不断扩展当前的匹配。

2. 增广路径算法增广路径算法是另一种解决最大匹配问题的有效方法。

它的基本思想是通过搜索图中的增广路径,并根据路径的特性来调整匹配的边集合。

增广路径算法的关键是寻找增广路径的方法。

三、实际应用场景最大匹配问题在实际中有着广泛的应用,例如:1. 人员配对在招聘场景下,企业需要根据职位需求和员工技能进行配对。

最大匹配问题可以帮助企业找到最佳的候选人。

2. 车辆调度在物流领域,需要根据货物的特性和运输车辆的特点进行合理的调度。

最大匹配问题可以帮助找到最佳的车辆安排方案。

3. 项目匹配在科研项目中,需要根据项目需求和研究人员的专长进行匹配。

最大匹配问题可以帮助找到最佳的项目与研究团队的匹配。

四、总结通过本文的介绍,我们了解了图的最大匹配问题的定义和解决算法。

最大匹配问题在实际应用中具有重要的价值和意义。

希望读者通过学习图的最大匹配问题,能够应用到实际问题的解决中,并进一步扩展图论的应用领域。

以上是对学习图的最大匹配问题的一些基本介绍,希望对您有所帮助。

谢谢阅读!。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算图中的最大对集的匈牙利方法 背景知识介绍—在一个网络中往往要求计算其中的最大对集。是由匈牙利人Egervary于1931年发现,后被另外一个匈牙利人Edmonds所推广(到一般图中的“开花算法”)

基本方法—利用反圈法 第一节 二部图中最大对集的有效算法 设(,,)GSTE为一个二部图,M是中一个对集。 S型节点----位于S的节点;

T型节点---位于T中的节点;

M-边----位于M中的边;

注意:一个增广路的长度为奇数,所以这样的路的两个端点必须是同型节点。

反圈法基本原则--- (1)初始时,0,k令(0){|}XvSv是关于M的非饱和点;

(2)在(k)(X)中选边时,必须按照以下原则: (a)如果()kivXS时,则选取以iv为端点的非M边(即,在S型节点处只选非M边); (b)如果 ()kivXT,则选取以iv为端点的M边(即,在T型节点处只选M边) (3)若在某一步,出现下述情况之一时算法要终止:

情况1。()kX中有非饱和的T型节点(此时得到一条关于M的增广路); 情况2.。情况1不出现,且()()kX中无边可选(此时G中不存在关于M的增广路)。

定理1.当匈牙利算法结束时,得到一个最大对集 解答:下面我们来证明这个方法(算法)的正确性。 如果情况1发生,根据我们算法特点,每一步上()()(,)kkXE都是森林,其中每一个树都是

以(0)X中的一点为根的。根据(0)X的定义,每一个树以一个非饱和的S型节点为根。按照选边原则(2)可以看出:每一个树上,根与任意节点之间的唯一的路是交错路、。所以,当某个非饱和的T型节点属于()kX时,这个树上联接根节点与它的路是一个长度为奇数的增广路。

现在假定情况2出现。我们用*X表示此时的()kX(一定要记住:*X中的每一个节点都位于一个树中)。令**,XVX记 **12

**34

;;;.ASXATXASXATX 其几何意义如图所示:(注意:这是其中一种结构,也是最重要的结构,即,假定对集中所有边都被包含在以(0)X为根的树中)。

结论1.所有非饱和的S型节点都在1A中(这是根据(0)X的定义得到的。表明:每一个这样的非饱和S型节点都是一个树的根,这个树有可能退化为一个节点!); 结论2。所有的非饱和的T型节点都在4A中(否则,选边原则(1)可得到增广路);

结论3.14[,]EAA(前提是:G连通) 事实上,如果有14,vAuA使得()uvEG,则因为**,vXuX,知道*();uvX

如果,uvEM则uv是可选边(事实上此时有增广路联接u与(0)X中点),与情况2的定义相违背;如果uvM,则(0)vX,必然有2wA使得vwM,与M是对集相违背。 结论4. 23[,]EAAM(这个显然成立)

注意:上述图形仍有地方要知道:1A中含有未被饱和的非根节点(因此,12||||AA) 注意:上述的有些东西可能描述的不太精确。我们下面详细说明。 记住当前算法执行到情况2,无法选边而且情况1不发生。可选边时有两种选法:沿着对集M中的边向下走,沿着非M中边向上走。

(1)12MMM:将对集M分成两类:1M和2M,其中1M是以31A中的节点为根的

树中所能包含的M边形成的子对集,而2M则是无法被这些树所含有的子对集(可以为空集); (2)对集M所能饱和的S的节点集合为132AA,没有被饱和的节点集合为(0)31()AX

(3)**123313244142,;;;ASXATXAAAAAA; (4)42131[,]EAAA(这是由于无法选边决定的,否则,有些子树可以长大); (5)41131[,]EAAA(理由同上)。 这样, 结论1.所有非饱和的S型节点都在31A中(这是根据(0)X的定义得到的。表明:每一个这样的非饱和S型节点都是一个树的根,这个树有可能退化为一个节点!); 结论2。所有的非饱和的T型节点都在41A中(否则,选边原则(1)可得到增广路);

结论3. 4131[,]EAAA; 结论4.3124132();()NAANAA 结论5.3223241[,],[,]EAAEAA。(这是由图的连通性决定的) 结论6. 2413[,]EAAAM;

这样一来,若G中存在增广路,那么它的一个端点在31A中,另外一个端点在41A中。显然此时可以选边使得对集增大。矛盾。因此,当情况2发生时当前的对集是最大的。

注意:从上述分析中可知,我们的讨论可以假定3242AA。分析中得到的结构(结论1-6)非常有用,我们可以直接利用它们来计算。

定理2.任何一个使得|()|0EG的二部图(,,)GSTE中一定有一个最大对集饱和所有最大次节点。 点评:如果这个结果成立,那么这个图一定是第一类的(即,边色数'()()GG。)

解答:设*M是这样一个最大对集,它所饱和的最大次节点最多。我们将要证明:*M为所求。若不然,则存在一个最大次节点v,没有被*M所饱和。不妨设,vS可以取*M使得v是唯一一个未被饱和的最大次节点。对于这个*M执行匈牙利算法。可知情况2一定出现(即,无边可选的结构一定出现)。 注意到上述结论1-结论6暗示:12||||1AA。此时1A一定有一个节点不是最大次的。不然,则有

1212||()()()||()uAuAAGduduAG,

这与12||||1AA相悖(这里利用了性质:1A中非根节点的领域全部被包含在2A)。设1ivA不是最大次节点,记为执行匈牙利算法终止时得到的交错树里面唯一的()ivv-

路。意见它的长度为偶数。令*'()MME,则'M也是最大对集,它饱和最大节点数目比*M多(事实上,'M饱和了v,但是没有饱和iv。这正是我们需要的;同时,前面*M

中其他节点还是被'M所饱和)。这与*M定义相违背。 点评:关于这个结果有许多证明。我们将要提供另外一个富有技巧性的证明(但是说真的,我不喜欢这种过于简短的证明,因为它们往往掩盖了很多的事物真相!)。

例3. 如果二部图G中节点次数的最大值是r,那么可以将它的边进行着色,每一条边染这r中颜色中的一种,使得同一个节点引出的边颜色不同。

解:如果G是r正则图,则由Hall定理知道结论成立。否则,G不是正则图。我们可以将G扩展成为一个r正则二部图'G(即,G是'G的子图)如下:增加一些节点使得G的两部分YX,的节点数目相同,然后在两部分之间尽可能地连边,直到。再连一条边则最大次数就超过r为止。这样得到的图一定是r正则图。理由如下:因为若有Xx的次数小于r,则总边数||||YrXr,从而必有Yy的次数小于r。于是可以连边xy而不破坏r

的最大性。根据上面所讲,可以对'G的边进行r着色,使得每一种颜色的边恰好是一个完美对集。在此结构下,G的边也相应地被染上了r种颜色,使得每一种颜色的边形成一个对集。

点评;这个例子表明:如果一个二部图的最大次为,则其中一定有对集饱和所有最大次节点。这个对集可以是最大的。 推论4.每一个k正则二部图一定有1-因子。 下面要用匈牙利算法终止时得到的结构来证明著名的Konig定理和Hall定理。 定理5(Konig,1931) 对于任何二部图(,,)GSTE,最小节点覆盖阶数=最大对集阶数。 证明:设M是一个最大对集,0D是最小覆盖集合的阶数。容易看出: 0||MD 根据我们在对当前的M执行匈牙利算法时,一开始就无边可选。于是,就有前面图形所示结构,那里有以下事实:

3232|||||()|MANSA

这里,322()NSAA。可以看出:322AA是一个覆盖,从而必有0||MD。证明完毕。

注意到,对于任何S的子集A,()()NASA形成一个覆盖。 推论6.对于任何二部图(,,)GSTE, 最小节点覆盖阶数=最大对集阶数 =min|()|||||max|||()|ASASNASASANA

如果(,,)GSTE中有对集M饱和S中所有节点,那么自然有(Hall条件) |()|||ASNAA 成立。反过来,假定上述条件成立,一定有最大对集饱和S中所有节点。

推论7(Hall定理1935)对于任何二部图(,,)GSTE,存在对集饱和S中所有节点的充分必要条件是: |()|||ASNAA

注意:组合学中有几个著名的“max=min”-型定理:Menger定理,Hall定理,Konig定理以及Dilworth定理。它们在本质上都是等价的,以后我们还要介绍它们之间的相互推导。

第二节 一般图中的最大对集值Edmonds开花算法。 基本想法---将二部图中的匈牙利算法推广到一般图。 首先我们来回顾一下我们在二部图中始怎么做的。 给定一个二部图(,,)GSTE和一个对集M,算法开始时,令(0)X是所有非饱和的S型节点集合。一般地,设已经有()kX。我们在()()kX中开始选边,选边的原则是:在S型节点处选非M边,在T型节点处选M边;把被选到的边放入到()kX中去,得到(1)kX。放入节点时会有两个情况发生:若有某个非饱和的T型节点在(1)kX中,则得到增广路;否则继续选边过程。若在某一步,没有边可以选择,则说明没有增广路,当前的M便是最大对集。

在前一节的匈牙利算法执行过程中,所有被选边()kE生成的子图()()()(,)kkkGXE是由

(0)||X

个交错树组成的森林。每一个交错树恰好有一个非饱和节点(是S型节点)。形象

地讲,匈牙利算法的执行过程就是以(0)X中每一个节点为根的交错树的生长过程。扩大交错树的方式有两种:一是选入一条M边(图(a));一是选入一条非M边,而这条边在()kVX

中始饱和的(图(b))。在这两种情况下,我们称此时的交错树为可扩的。若被选

入的非M边在()kVX中始非饱和节点(图(c)),这个交错树中有一个增广路,这个树称为增广树。若增广树即不是可扩的,也不是增光的,我们就称其为匈牙利树(图(d))。每一个匈牙利树种必有奇数个节点,其中仅有根节点为非饱和节点

下面我们来把上述算法改造一下,以便可以适用于一般图。 开始时,令(0)X为所有未饱和节点并且记它们为S型节点。选边原则不变。

当选一条非M边时,把它在()kVX中的端点记为T型节点;当选一条M边时,把它在()kVX

中端点记为S型节点。整个过程仍然是扩大交错树,或者得到增广树,或者得到

相关文档
最新文档