我有两套, 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)!全球距离)
答案 0 :(得分:1)
如果M = N,则该问题可以表示为二分图中的最小权重完美匹配,或者换句话说,分配问题。解决分配问题的一种众所周知的方法是Hungarian algorithm。
使匈牙利算法适用于N <1的情况。 M,您可以使用(M-N)个附加元素扩展 A 集合(每个元素与 B 的所有元素之间的距离为零)。