如何获得K组之间的最佳匹配?

时间:2019-02-21 21:18:36

标签: algorithm matching bipartite

我有K组数据点,我想创建大小为K的组,以使组内距离的总和最小。我熟悉带有二分图的匹配算法,但是我希望在两个以上的集合中使用。

有什么想法吗?

编辑:

每个组将由每组一个元素组成,不允许重复。

一个例子:您有{a1,a2,a3},{b1,b2,b3},{c1,c2,c3} 您想要创建组,例如{a1,b3,c3},{a2,b1,c2},{a3,b2,c1}使组内距离之和最小。

2 个答案:

答案 0 :(得分:1)

这个问题可以简化为另一个类似的问题,我之前已经解决了另一个stackoverflow问题。想法是计算n / k个大小的组的所有组合,并根据它们在组内的距离对它们进行加权。遍历搜索空间以找到有效的组合组合。保留最小金额的记录,并使用它修剪末端分支。您可以使用动态编程来加快搜索速度,方法是生成解决方案的最佳子集,然后从中获得最终解决方案(如我在另一篇文章中所述),也可以使用贪婪的方法和一些易手的技巧来找到最佳(或最佳)解决方案(也在上述文章中介绍)。 Here是子问题的链接,您可以将其简化为

答案 1 :(得分:0)

即使对于k = 3,它也具有NP难题3维匹配的风格。 (明显的减少是行不通的,因为可能会创建幻像三元组,其中三对无效三元组中的每对在有效三元组中分别出现。)

根据实例的大小,我将尝试使用列生成来进行局部搜索或整数编程(但是如果没有低维度量空间的结构,内部问题似乎很难解决,即使在那时也不重要)。