寻找算法以根据距离匹配 2 个列表中的对象



所以我有 2 个对象列表,每个对象都有一个位置。我想将第一个列表中的每个对象与第二个列表中的对象进行匹配。一旦选择了第二个列表的对象进行匹配,我们就会将其从列表中删除(因此它不能与另一个匹配(。最重要的是,匹配对象之间的总距离总和应该是尽可能小的。

例如:

list1 { A, B, C } list2{ X, Y, Z }

因此,如果我匹配 A->X (距离: 3 米( B->Z (距离: 2 米( C->Y (距离: 4 米(总和 = 3 + 2 + 4 = 9 米

我们可以与A->Y(4米(B->X(1米(C->Z(3米(进行另一场比赛总和 = 4 + 1 + 3 = 8 米 <======= 更好的解决方案

谢谢你的帮助。

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

这个问题被称为赋值问题(二分图中的加权匹配(。

解决这个问题的算法是匈牙利算法。在维基百科文章的底部也是一个实现列表。

如果您的数据具有特殊属性,例如您的两组是 2D 点,并且边的权重是欧氏距离,那么有更好的算法可以做到这一点。

最新更新