算法基础篇(10)------匈牙利算法

本文以GossipGirl式的小团体为例,介绍了匈牙利算法及其在二分图最大匹配问题中的应用。通过寻找增广路的方式,算法可以不断更新配对方式,最终达到最佳匹配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

● 每周一言

量变引起质变,而这个量,或许是一些并不难的步骤。

导语

匈牙利算法由匈牙利数学家Edmonds在1965年提出,用于求解二分图的最大匹配问题。那么,什么是二分图最大匹配?匈牙利算法又是如何实现的?

匈牙利算法

依然从例子出发:现在有一个Gossip Girl式的小团体一共4男4女,男生分别标记为ABCD,女生则标记为abcd。看过绯闻女孩的都知道,在这部美剧里面,男女主演之间几乎都有一腿。为了让大家有个都不落单的完美结局,现需要给他们做一个最好的配对。已知:A与abc均有暧昧;B与ad有暧昧;C与cd有暧昧;而D只钟爱b(好样的!),只与b有爱暧昧。关系如下图所示:

fig1

这便是一个二分图。 所要求的最好配对方式,相当于在这张图的所有配对方式中,找出边数最多的配对。而这个配对,就是二分图最大匹配。

增广路:从一个未匹配点出发,走交替路,如果途径另一个未匹配点(出发点不算),则这条交替路称为增广路(agumenting path)。

匈牙利算法通过不断寻找当前二分图的增广路来更新配对方式,直到找不到增广路为止。针对上述例子,匈牙利算法的执行步骤如下图所示:

fig2

按ABCD的顺序分别匹配,先配A和B。黄色代表当前找到的增广路,绿色代表当前的配对。首先,图(1)找到增广路A→a,图(2)将增广路中的Aa配对;然后,图(3)找到增广路B→a→A→b,图(4)将增广路中的Ba、Ab分别配对。 这里可以看出,由于二分图的性质,增广路中每隔一条边配一条边,总能保证配对最大且无误。
fig3

接着配C和D。首先,图(5)找到增广路C→c,图(6)将增广路中的Cc配对;然后,图(7)找到增广路D→b→A→a→B→d,图(8)将增广路中的Db、Aa、Bd分别配对。至此,图中已再无增广路,算法结束。

可知每次找增广路的时候,最差情况下将遍历所有边。因此匈牙利算法的时间复杂度为O(nm),其中n表示二分图半边的点数,m表示二分图的总边数。敬请期待下节内容 平衡树

结语

感谢各位的耐心阅读,后续文章于每周日奉上,欢迎大家关注小斗公众号 对半独白

face

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值