二分图匹配-匈牙利算法

本文介绍了匈牙利算法在解决二分图最大匹配问题中的应用,详细阐述了二分图的概念、匹配类型以及增广路径的重要性。通过深度优先搜索(DFS)和广度优先搜索(BFS)两种方法实现算法,并提供了代码实现,帮助理解算法原理。

参考

匈牙利算法可以用来解决在二分图中最大匹配的问题。这里参考了几位大佬的博客。代码主要是参考Renfei Song大佬的。
Renfei Song’s Blog – 二分图的最大匹配、完美匹配和匈牙利算法
zxfx100 – Hungary
willinglive –【hall定理】一个关于二分图的问题
神犇(shenben) – 匈牙利算法(二分图)
DarkScope从这里开始 – 趣写算法系列之–匈牙利算法7

二分图中的匹配

这里有几个概念先要列一下, 当然我这里就是通俗的解释一下,精确的定义可以看Renfei Song DA LAO’s Blog


  • 二分图–大概就是一个图里面节点分成两个部分V1和V2,且只存在V1与V2之间的边。
  • 二分图匹配–通俗一点理解就是,V1,V2的点,配成一对对的。
  • 最大匹配–就是最大的匹配,能配出最多对。
  • 完美匹配–所有的点都可以找到另一半,(当然这个就是可遇不可求了。
  • 交替路–假设我们在途中已经找到了一组匹配,那么从一个非匹配点钟出发依次经过非匹配边、匹配边、非匹配边…形成的路径叫交替路。
  • 增广路径–从一个未匹配点出发,走交替路,如果途径另一个未匹配点(出发的点不算),则这条交替路称为增广路(agumenting path)。这里直接截的图,图 5 中的一条增广路如图 6 所示(图中的匹配点均用红色标出):
    增广路径

如果在二分图中能找到一条增广路径,那么我们把增广路径中匹配边和非匹配边互换一下就可以增加一个匹配了。这就是匈牙利算法的基本思想。

匈牙利算法

匈牙利算法基本思想就是遍历整个图,然后找出所有的增广路径,找出一条就说明匹配可以加一。找出所有的就可以了。

图的遍历有两种方式,深度优先DFS 和广度优先BFS。复杂度都是O(V*E),DFS用递归比较好实现。

代码还是

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值