所以我有 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 点,并且边的权重是欧氏距离,那么有更好的算法可以做到这一点。