Python中的最大权重/最小成本Bipartite匹配代码

时间:2010-12-13 05:46:59

标签: c++ python algorithm graph

我在二分图中搜索Python代码以获得最大权重/最小成本匹配。我一直在使用NetworkX中的一般情况最大权重匹配代码,但我发现它对我的需求来说太慢了。这可能是由于通用算法速度较慢以及NetworkX解决方案完全用Python实现的事实。理想情况下,我想为包含一些C / C ++代码的二分匹配问题找到一些Python代码,但是现在,比NetworkX实现更快的任何东西都会有所帮助。

5 个答案:

答案 0 :(得分:6)

经过进一步调查后,我发现以下两个模块特别有用(http://pypi.python.org/pypi/pyLAPJV/0.3http://pypi.python.org/pypi/hungarian)。它们都是用C ++实现的Python绑定算法,运行速度比NetworkX匹配实现快得多。然而,pyLAPJV实现似乎对我的需求有点过于复杂,并且不能很好地正确处理相同加权的边缘。匈牙利模块(虽然据称比pyLAPJV算法慢)比我目前正在处理的数据大小上的NetworkX实现快了大约3个数量级。我还要再看看kunigami建议的代码,因为我相信它可以通过Shedskin很容易地运行,以实现相当快的实现。

答案 1 :(得分:3)

您是否尝试过使用匈牙利算法的scipy实现,也称为Munkres或Kuhn-Munkres算法?

scipy.optimize.linear_sum_assignment

答案 2 :(得分:1)

不太确定这是否是您正在寻找的,但它是Hopcroft-Karp二分图匹配算法的python实现。如果没有,它可能是一个很好的起点。

Hopcroft-Karp Bipartite Matching

答案 3 :(得分:0)

最小权重二分匹配可以通过匈牙利算法(wikipedia)来解决。维基百科中的链接指向python实施。我不确定它是否比你提到的代码更快。

答案 4 :(得分:0)

当您说“最低费用匹配”时,我认为您的意思是要在所有最大匹配中找到成本最低的匹配。

从2.4版(2019年10月17日发布)开始,NetworkX确实专门使用nx.algorithms.bipartite.minimum_weight_full_matching处理二分情况。