匈牙利算法 (二分图的最大匹配)

如果已知某图是二分图,那么如何计算边数最多的匹配方案,即这个二分图的最大匹配呢?

    最简单的方法是系统的列举所有二分图的所有匹配,然后从中选取边数最多者。由于这种方法所需要的时间高达2^|E|,因此不得不摈弃。下面介绍一种利用增广路径求二分图匹配的算

      设M是二分图的一个匹配,将M中的边所关联的顶点称为盖点,其余顶点称为未盖点。若一条路径上属于M的边和不属于M的边交替出现,则称该路径为交错轨或者是交替链。若路径p是一条起始点和结束点是未盖点的交替轨,则称p为关于M的增广路径。例如,从图6-20a中可找到一条增广路径p=t5c1t2c5,其中红线表示匹配M中的边。

由增广路径p的定义可知一下3个性质。
  • 一条关于M的增广路径的长度必为奇数,且路上的第一条边和最后一条边都不属于M。例如6-20a的增广路径p=t5c1t2c5的长度为3,且(t5,c1)和(t2,c5)非匹配边。
  • 对于一条关于M的增广路径p,将M中属于p的边删去,将p中不属于M的边添加到M中,所得到的边集合记为M+P,则M+P比M增加一条匹配边。例如,对图6-20a的增广路径p进行匹配边与非匹配边的对换,得到图6-20b,原p路径上的一条匹配边(c1,t2)变为(t5,c1)和(t2,c5)两条匹配边,p的路径外的匹配边不变,因此|M|由原来的4条增加为5条。
  • M为G的一个最大匹配当且仅当不存在关于M的增广路径。

性质1和性质2是显而易见的。对于性质3,当存在一条关于M的增广路径时,由性质2可知,M不是最大匹配。反而,若不存在关于M的增广路径时,则M是最大匹

配。反证法证明:如果M不是最大匹配,则一定存在一个匹配M1,|M1|>|M|。一位M1=M+M1;

  1. M2的各连通部分必定是关于M和M1的交错轨。因为M2是由M和M1中的非共同部分组成的,而M1和M都是匹配边,各自边之间没有共同的顶点,所以任何连通的道路都是必然是交替出现M和M1的边。
  2. 由于|M1|>|M|,所以在所有的交错轨中必有这样一条交错轨:属于M1的边多余属于M的变,这条道路必然是以M1的边开始,且以M的边结束的交错轨,即为关于M的增广路径,这与M的最大匹配的假设相矛盾。由此证明M是最大匹配的充分条件是不关于M增广路径。

性质3的证明过程为我们提供了找最大匹配的基本思想:初始化,置M为空集。然后反复在二分图中找一条关于M的增广路径p,并用M+P替换M,直至二分图中不存在关于M的增广路径,最后得到的匹配M就是G的一个最大匹配。

Edmonds于1965年提出了一种利用增广路径求二分图最大匹配的有效算法--------匈牙利算法

Hall定理:对于二分图G=(x,y,e),存在一匹配M,使得x的所有顶点关于M饱和的充分条件是:对x的任意子集A,和A邻接的点集p(A),恒有:|P[A]|>=|A|

证明:分别从必要性和充分性从两个角度给与证明。

必要性:存在一个匹配M,使得x关于M饱和。|p[A]|>|A|的直观意义是显然的。例如,安排工作,要使得每个人至少有一样彼此不同的工作可做,不论多少人,他们能做的工作数目必须不少于人数。

充分性:若对于任何A属于X,恒有|P[A]|>=|A|,则可以按下列方法做出匹配M,使得x关于M饱和。

先做任意一个初始匹配,若已使x关于M饱和,则定理已证。如若不然,则x中至少有一点x0为未盖点,检查从x0出发,终点在y的交替轨。可能有下列两种情况发生。

  1. 没有任何一条交错轨可以达到y的未盖点。这是由于从x0开始的一切交错轨终点还是在x,故存在x的子集A有|P[A]|<|A|。这与假设相矛盾。
  2. 存在一条x0出发的交错轨,终点为y集合中的未盖点,则这条道路便是可增广路径。因而可以改变一下匹配,是x0为盖点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值