我在二分图中搜索Python代码以获得最大权重/最小成本匹配。我一直在使用NetworkX中的一般情况最大权重匹配代码,但我发现它对我的需求来说太慢了。这可能是由于通用算法速度较慢以及NetworkX解决方案完全用Python实现的事实。理想情况下,我想为包含一些C / C ++代码的二分匹配问题找到一些Python代码,但是现在,比NetworkX实现更快的任何东西都会有所帮助。
答案 0 :(得分:6)
经过进一步调查后,我发现以下两个模块特别有用(http://pypi.python.org/pypi/pyLAPJV/0.3和http://pypi.python.org/pypi/hungarian)。它们都是用C ++实现的Python绑定算法,运行速度比NetworkX匹配实现快得多。然而,pyLAPJV实现似乎对我的需求有点过于复杂,并且不能很好地正确处理相同加权的边缘。匈牙利模块(虽然据称比pyLAPJV算法慢)比我目前正在处理的数据大小上的NetworkX实现快了大约3个数量级。我还要再看看kunigami建议的代码,因为我相信它可以通过Shedskin很容易地运行,以实现相当快的实现。
答案 1 :(得分:3)
您是否尝试过使用匈牙利算法的scipy实现,也称为Munkres或Kuhn-Munkres算法?
答案 2 :(得分:1)
不太确定这是否是您正在寻找的,但它是Hopcroft-Karp二分图匹配算法的python实现。如果没有,它可能是一个很好的起点。
答案 3 :(得分:0)
答案 4 :(得分:0)
当您说“最低费用匹配”时,我认为您的意思是要在所有最大匹配中找到成本最低的匹配。
从2.4版(2019年10月17日发布)开始,NetworkX确实专门使用nx.algorithms.bipartite.minimum_weight_full_matching
处理二分情况。