给定两个有序的n个点集A和B,如何找到最小化点之间平均距离(使用您选择的距离)的最佳循环置换。
换句话说,如何算法地找到k,使得sum(||A[i] - B[(i + k) % n||)最小,其中0 <= k < n?(我省略了除以n,因为我相信最小化总距离应该会产生相同的结果)。
一个额外的要求是,该算法应该可用于N维空间,因此我不能只对数组进行排序。
我显然可以计算每个成对距离,但这将产生O(n^2)(n x n成对距离计算+ n累加)复杂度,这是次优的([编辑]我的意思是,我希望能够比暴力更好)。
换句话说,如何算法地找到k,使得sum(||A[i] - B[(i + k) % n||)最小,其中0 <= k < n?(我省略了除以n,因为我相信最小化总距离应该会产生相同的结果)。
一个额外的要求是,该算法应该可用于N维空间,因此我不能只对数组进行排序。
我显然可以计算每个成对距离,但这将产生O(n^2)(n x n成对距离计算+ n累加)复杂度,这是次优的([编辑]我的意思是,我希望能够比暴力更好)。
应用:
其中一个应用是在图形学中,我希望将一个形状的每个点映射到另一个形状的一个点,而不创建交叉边缘。请参见下面的绘图,我们将红色形状的每个点映射到蓝色形状上的一个点。