所以我有2个对象列表,每个对象都有一个位置。我想将第一个列表中的每个对象与第二个列表的对象进行匹配。 一旦选择了匹配的第二个列表的对象,我们将其从列表中删除(因此它不能与另一个匹配)。最重要的是,匹配对象之间的距离总和应该是最小的。
list1 {A,B,C} list2 {X,Y,Z}
所以,如果我匹配A-> X(dist:3米)B-> Z(dist:2米)C-> Y(dist:4米) 总和= 3 + 2 + 4 = 9米
我们可以再次匹配A-> Y(4米)B-> X(1米)C-> Z(3米) 总和= 4 + 1 + 3 = 8米< ======= 更好的解决方案
感谢您的帮助。
额外:列表可能有不同的长度。
答案 0 :(得分:2)
此问题称为Assignment Problem(a weighted matching in bipartite graphs)。
解决此问题的算法是Hungarian algorithm。维基百科文章的底部也是一个实现列表。
如果您的数据具有特殊属性,例如您的两个集合是2D点,边缘的权重是欧氏距离,那么就有better algorithms。