匈牙利算法举例,匈牙利算法优缺点

首页 > 教育 > 作者:YD1662024-05-15 18:43:06

图2-4

增广路径:1 -> 2->3->4->5->6。1、6非匹配点,中间结点2、3、4、5是匹配点。黑色标记 1--->2、3--->4、5--->6是非匹配边,红色标记2-3、4-5是匹配边。

增广路径的首尾是非匹配点。因此,增广路径的第一条和最后一条边,必然是非匹配边;同时它的第二条边(如果有)和倒数第二条边(如果有),必然是匹配边;以及第三条边(如果有)和倒数第三条边(如果有),一定是非匹配边。

增广路径从非匹配边开始,匹配边和非匹配边依次交替,最后由非匹配边结束。这样一来,增广路径中非匹配边的数目会比匹配边大 1。

如果我们置换增广路径中的匹配边和非匹配边,由于增广路径的首尾是非匹配点,其余则是匹配点,这样的置换不会影响原匹配中的匹配点,匹配中不包含在该路径中的其他匹配边也不受到影响,因而不会破坏匹配;增广路径的置换,可以得到比原有匹配更大的匹配(具体来说,匹配的边数增加了 1)。

增广路有一个重要特点:非匹配边比匹配边多一条。因此,研究增广路的意义是改进匹配。只要把增广路中的匹配边和非匹配边的身份交换即可。由于中间的匹配节点不存在其他相连的匹配边,所以这样做不会破坏匹配的性质。交换后,匹配边数目比原来多了 1 条。

由于二分图的最大匹配必然存在(比如,上限是包含所有顶点的完全匹配),所以,在任意匹配的基础上,如果我们有办法不断地搜寻出增广路径,直到最终我们找不到新的增广路径为止,我们就有可能得到二分图的一个最大匹配。这就是匈牙利算法的核心思想。

唯一的问题在于,在这种贪心的思路下,我们如何保证不存在例外的情况,即:当前匹配不是二分图的最大匹配,但已找不到一条新的增广路径。

我们从反证法考虑,即假设存在这样的情况。因为当前匹配不是二分图的最大匹配,那么在两个集合中,分别至少存在一个非匹配点。那么情况分为两种:

1)、这两个点之间存在一条边——那么我们找到了一条新的增广路径,产生矛盾;

2)、这两个点之间不存在直接的边,即这两个点分别都只与匹配点相连——那么:

a、如果这两个点可以用已有的匹配点相连,那么我们找到了一条新的增广路径,产生矛盾;

b、如果这两个点无法用已有的匹配点相连,那么这两个点也就无法增加匹配中边的数量,也就是我们已经找到了二分图的最大匹配,产生矛盾。

在所有可能的情况,上述假设都会产生矛盾。因此假设不成立,亦即贪心算法必然能求得最大匹配的解。

由增广路径的定义可以推出的三个结论:

①P的路径长度必定为奇数,第一条边和最后一条边都不属于M;

②P经过置换(取反)操作可以得到一个更大的匹配M;

③M为G的最大匹配当且仅当不存在相对于M的增广路径。

增广路的应用3、匈牙利树

匈牙利树一般由 BFS 构造(类似于 BFS 树)。从一个未匹配点出发运行 BFS(唯一的限制是,必须走交替路),直到不能再扩展为止。如图2-5,由Fig.7,可以得到Fig.8的一棵 BFS 树。

匈牙利算法举例,匈牙利算法优缺点(5)

图2-5

这棵树存在一个叶子结点为非匹配点(7号),但是匈牙利树要求所有叶子结点均为匹配点,因此这不是一棵匈牙利树(顺便说一句,Fig.8 中非匹配根节点2到非匹配叶结点7显然是一条增广路,沿这条增广路扩充后将得到一个完美匹配)。在Fig.9中,从2号结点出发就会得到一棵匈牙利树。

匈牙利树要求所有叶子结点均为匹配点,它就是把存在的可连接的匹配点都列出来。

4、二分图最大匹配数=最小点覆盖率

二分图的最小点覆盖的理解:找到最少的一些点,使二分图所有的边都至少有一个端点在这些点之中。倒过来说就是,删除包含这些点的边,可以删掉所有边。

三、匈牙利算法复杂度

设V为二分图左边的顶点数,E为二分图中边的数目。匈牙利算法的实现以与点集合 V 为基础,每次在集合V中选一个顶点 Vi 做增广路径的起点搜索增广路径。搜索增广路径需要遍历边及E内的所有边,遍历方法可以采用深度优先遍历(DFS),也可以采用广度优先遍历(BFS),无论什么方法,其时间复杂度都是 O(E)。
匈牙利算法每个顶点 Vi 只能选择一次,因此算法的整体时间复杂度是 O(V*E),总的来说,是一个相当高效的算法。

四、举例说明例子1

假设在婚介公司的手上有4位剩男,4位剩女,还没见面只是互相看了资料,每个人都对多名异性有好感。婚介公司做了一张互有好感关系图。如图4-1所示。

匈牙利算法举例,匈牙利算法优缺点(6)

图4-1

是否可能让所有男孩和女孩一对一配对,使得每对儿都互相喜欢呢?在图论中,这就是完美匹配问题。如果换一个说法:最多有多少互相喜欢的男孩/女孩可以配对儿?这就是最大匹配问题。匈牙利算法就是为了求解最大匹配问题。

解法一

第1步 初始为空匹配。如图4-2所示。

匈牙利算法举例,匈牙利算法优缺点(7)

图4-2

第2步 选择空匹配点Al、Alice,建立第1条增广路径Al--->Alice, 并进行置换,创建第1个匹配:红色标记Al--->Alice。如图4-3所示。

匈牙利算法举例,匈牙利算法优缺点(8)

上一页12345下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.