我想在完整的加权二分图中找到最佳的最大匹配,其中两组顶点的大小差异很大,即一组顶点非常大而另一组非常小。
Hungarian algorithm对于这个问题不是一个好方法,因为它将虚拟顶点添加到较小的集合,使得两个集合具有相同的大小,因此我失去了其中一个顶点集合的所有潜在效率增益只是非常小。
我将对象(边界框)分成两组,并且我有一个相似度量(Jaccard重叠),表示任何两个对象的相似程度。我想在两个集合之间产生匹配,使得所有单个匹配的相似性之和最大。
问题是其中一个集合只包含非常少的对象,比如10,而第二个集合非常大,比如10,000个对象。第一组中的10个对象中的每一个都需要与第二组中的10,000个对象中的一个匹配。
这两套尺寸的不对称性让我想知道如何有效地做到这一点。我无法使用匈牙利算法并生成10,000 x 10,000矩阵。
答案 0 :(得分:2)
就可用软件而言,可能是最简单的方法:使用最低成本的网络流解算器。矩形成本矩阵没有问题!基本思路很简单,介绍是here(下图中显示了一张幻灯片):
有很多可用的软件(例如Coin-OR Lemon / C ++; Google的ortools / C ++包含许多包装器。)
Google的ortools在this上也有自己的文档条目。
尽管如此,这本书:
Burkard,Rainer E.,Mauro Dell' Amico和Silvano Martello。作业问题,修订转载。卷。 125.暹罗,2009年。
有一个小/小章节(5.4.4矩形成本矩阵),概述了其他方法,主要是对其他线性分配算法的修改。
该章的部分内容如下:
或者,可以使用转换到第4.4.1节的最小成本流问题,这不要求顶点集U和V具有相等的基数。