Algorithm 查找与另一组最近的点集

Algorithm 查找与另一组最近的点集,algorithm,mathematical-optimization,Algorithm,Mathematical Optimization,我有两个集合,A和B,在R^N中分别有N点和M点。我知道N

我有两个集合,AB,在R^N中分别有N点和M点。我知道N 两点之间的距离,pQ用d表示(pQ)。由于问题是一般性的,该距离可以是任何函数(例如欧几里德距离)

我想找到BA最近的子集。从数学上来说,我想找到B的子集C,大小为N,全局距离A最小。AC之间的全局距离由下式给出

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)!全局距离)

如果M=N,这个问题可以表述为二部图中的最小权重完美匹配,或者换句话说,一个赋值问题。解决指派问题的一个著名方法是


为了使匈牙利算法适用于NB的所有元素之间的距离为零)来扩展集合A

您是否尝试了?您能否更准确地定义全局距离?现在它看起来像是用相等的索引“匹配”对,但它们是从集合中出来的,所以就是这样undefined@EvgenyKluev我不知道。但是我应该把这个方法应用到M/((M-N)!*N!)B的子集,对吗?@harold我把定义改成了更多accurate@sebacastroh:否,您可以使用(M-N)“空”元素扩展A(与B中所有元素的距离为零),然后应用匈牙利算法。