找到与另一组最接近的点集

时间:2016-04-29 14:49:20

标签: algorithm mathematical-optimization

我有两套, A B N M 分别位于 R ^ n 中。我知道 N <始终 M

两点之间的距离, P Q ,由 d表示( P Q 。由于问题是通用的,因此该距离可以是任何函数(例如欧几里德距离)。

我想找到最接近 B 的子集到 A 。数学上我会说,我想找到 B 的子集 C ,其大小为 N A 的最小全球距离。 A C 之间的全球距离由

提供
D(A,C) = min([sum(d(P_i,Q_i),i=1,N) with P_i in A and Q_i in C* for C* in Permutations of C]) 

我一直在考虑这个问题,我做了一个能够获得局部最优的算法,但不一定是最优的:

步骤1)在 B 中找到 A 的每个点的最近点。如果没有重复的点,我找到了最佳子集并完成了算法。但是,如果有重复点,请转到步骤2.

步骤2)比较它们的距离(当然我比较点与相同最近点之间的距离)。具有最小距离的点保持先前找到的点,而其他点改变其期望的点,用于尚未为另一个点选择的“下一个”最近点。

步骤3)检查所有点是否不同。如果是,完成。如果没有,请返回步骤2.

有什么想法吗?尝试所有组合都不是很好(我应该计算M!/(M-N)!全球距离)

1 个答案:

答案 0 :(得分:1)

如果M = N,则该问题可以表示为二分图中的最小权重完美匹配,或者换句话说,分配问题。解决分配问题的一种众所周知的方法是Hungarian algorithm

使匈牙利算法适用于N <1的情况。 M,您可以使用(M-N)个附加元素扩展 A 集合(每个元素与 B 的所有元素之间的距离为零)。