您可以同时对A和B进行排序。在这种情况下,欧几里得距离很小。
如果B必须保持固定,那么您只需要反转排序B所需的排列并将其应用于A的排序版本。
此解决方案确实假定您只想找到一个排列,而不是最简单的排列(因为通过排列进行排序和取消排序将不会非常有效。)
证明:令S,T为我们的一对数组。我们可以假设S被排序而不失一般性,因为所有这些重要的是两组元素之间的映射。
令T为使两个数组之间的距离最小的排列,并以d为该距离。
假设T未排序。 然后存在元素i,js.t。 T_i> T_j
S_i + k1 = S_j
T_i = T_j + k2
where k1,k2 > 0
令x为除i和j以外的所有元素的总距离。
d = x + (S_i - T_i)^2 + ((S_i + k1) - (T_i - k2))^2
如果我们交换T_i和T_j的顺序,那么我们的新距离是:
d' = x + (S_i - (T_i - k2))^2 + ((S_i + k1) - T_i)^2
从而: d-d'= 2 * k1 * k2,这与我们的假设T相矛盾,即T是使距离最小的排列,因此必须对排列进行排序。
可以使用多种方法在O(n log n)中对两个数组进行排序。