二分图带权最大匹配费用流_简单理解二分图与匈牙利算法

91cc3c8ed677195ee86ef5835f3c11e6.png

最近在看DETR等论文时时,看到了使用了二分图的最大匹配,对于没有计算机基础的我表示直接上来???,因此本篇博客主要介绍什么是二分图,以及二分图的匹配的匈牙利算法。

首先我们来看看二分图的定义

二分图别名叫二部图,(没学过图论的我,瑟瑟发抖)是图论中的一种模型,对于没有学过图论的我们,就只需要理解为如下图所示,我们有一堆顶点,且顶点之间有一些无向的边,当这些顶点可以被分割为两两互不相交的子集(U,V),且图中的每条边所对应的两个顶点分别属于U和V时,就可以称这个图为二分图。

abe4525e9b6a844729b7f19fb48ed10d.png

最大匹配:

对于上面的图,也许我们会有点生疏,此时,我们可以想象成两个集合点(导师,学生),想想你和导师的匹配,这下清醒多了吗(是爱让我们相遇)?,这个边表示导师和学生的“选择关系”(图中一个老师跟学生有很多线,说明导师没有明确要你呢,还有其他选择的可能)。(假设一个导师只带一个学生)此时,学校的教务主任出来说,我要看看招进来的学生和导师之间最多能成对少对呢?

更换一下对最大匹配的描述:如何在二分图中能够找到一个边的集合,即找到最多没有公共顶点的边集合。

0425fbb192616b757af6ccd19ca1db25.png

首先几个概念需要弄清楚:

1、匹配:刚刚已经描述过了,二分图G的一个匹配是由一组没有公共端点的边构成的集合

2、交错路径:给定图G的某一个匹配M,如果一条路径的边交替出现在匹配M和不在M中,则成为交替路径。这样描述不太直观,我们来举个栗子。

我们有一个匹配M:{(u1,v1), (u3,v3)}

e1dab546fabf96e12d04e8ea9a0ad022.png
匹配:{(u1,v1), (u3,v3)}


则如下图所示的路径就是一条交替路径,u6->v3是非匹配边,v3->u3是匹配边,u3->v1是非匹配边,v1->u1是匹配边。

ffbff156332e9c16deae95e358762e0e.png


3、增广路径:知道什么是交替路径后,就更加容易理解这个概念。当一条交替路径的起始和终点都不在匹配边的顶点上时,就是一条增广路径。上面的那条交替路径其实并不是增广路径,原因在于:起始点u6的确不在匹配边的顶点上,但终点u1是在匹配边(u1,v1)上,因此不是增广路径。我们再来举个栗子。

e3e7385fb3954f03fe9236ff6b42f0a4.png
两条增广路径

上图路径就是增广路径,u6->v3是非匹配边,v3->u3是匹配边,u3->v1是非匹配边,v1->u1是匹配边。对于左侧的图,最后u1->v4,v4不在匹配边的顶点上,因此为一条增广路径。右图的原理也是一样。

匈牙利算法:

0425fbb192616b757af6ccd19ca1db25.png

我们仍然以导师和学生的例子来说明,我们的任务是给导师尽可能的找到匹配。

该算法的做法是:

1、先找到一个匹配(可以是空),比如我们随便找到一个匹配M={(u2,v6), (u3,v1)},则对于导师u,有未匹配的点的集合S={u1, u4, u5, u6}

4affb90515e4183938dcd620516ef4e4.png

2、从S中取出一个未匹配的点,我们先取个u1,从u1开始去找增广路径。则可以找到增广路径:P={(u1,v1),(v1,u3), (u3,v3)},如下图所示。

dc417dade676aaecdcc1b02b02ce0717.png

有了新的增广路径后就可以更新新的匹配M

M1 = M P

即原来的匹配与增广路径求异或,则新的匹配M1 = {(u1,v1),(u2,v6), (u3,v3)}

3、此时,我们有了新的匹配M1,对于教师u,u1已经被匹配了,所以我们还得更新未匹配的u点集合S,则新的集合S1={u4, u5, u6}(u1已经匹配了),于是,我们继续重复2的步骤,从S1中取出一个未匹配的点u4,然后继续找到一条增广路径P1......,然后与目前的匹配M1进行异或得到新的匹配......

通过不断重复1、2、3步骤,直至将未匹配点S集合全部取完就可以找到该二分图的最大匹配。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值