二分图最大匹配:匈牙利算法的python实现

本文介绍了如何使用Python实现深度优先的匈牙利算法,解决二分图的最大匹配问题。首先定义了二分图和匹配的概念,并解释了最大匹配的意义。接着,提供了递归实现的匈牙利算法代码,并鼓励读者尝试使用迭代方式优化。最后,提到了BFS版本的匈牙利算法,其性能更优,但理解难度相对较大。
摘要由CSDN通过智能技术生成

二分图匹配是很常见的算法问题,一般用匈牙利算法解决二分图最大匹配问题,但是目前网上绝大多数都是C/C++实现版本,没有python版本,于是就用python实现了一下深度优先的匈牙利算法,本文使用的是递归的方式以便于理解,然而迭代的方式会更好,各位可以自行实现。

1、二分图、最大匹配

什么是二分图:二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。 

什么是匹配:把上图想象成3位工人和4种工作,连线代表工人愿意从事某项工作,但最终1个工人只能做一种工作,最终的配对结果连线就是一个匹配。匹配可以是空。 
什么是最大匹配:在愿意从事的基础上,能够最多配成几对。 

现在要用匈牙利算法找出最多能发展几对。 
[color=green][size=medium] 
匈牙利算法是解决寻找二分图最大匹配的。

更多二分图最大匹配的图解可以参考 http://xuxueliang.blog.51cto.com/5576502/1297344

以下是代码,为了图省事使用了类,实际上并不需要这样

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值