寻找算法来匹配2个列表中的对象,具体取决于距离

时间:2017-02-04 16:24:25

标签: algorithm math geometry distance

所以我有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米< ======= 更好的解决方案

感谢您的帮助。

额外:列表可能有不同的长度。

1 个答案:

答案 0 :(得分:2)

此问题称为Assignment Problem(a weighted matching in bipartite graphs)。

解决此问题的算法是Hungarian algorithm。维基百科文章的底部也是一个实现列表。

如果您的数据具有特殊属性,例如您的两个集合是2D点,边缘的权重是欧氏距离,那么就有better algorithms