找到最接近另一组的点集
Find the closest set of points to another set
我有两套,A和B,N 和 M 分别指向 R^n。我知道 N < M 总是。
两点之间的距离,P 和 Q,表示为 d( P,Q )。由于问题是通用的,这个距离可以是任何函数(例如欧氏距离)。
我想找到 B 最接近 A[=62= 的子集]。在数学上我会说,我想找到 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)求A的每个点在B[中的最近点=62=]。如果没有重复的点,我找到最优子集并完成算法。但是,如果有重复的点,则转到第2步。
Step 2) 比较它们的距离(当然我比较的是点与点之间的距离是同一个最近点)。距离最小的点保留之前找到的点,其他点将其 desired 点更改为 "next" 最近点,但尚未为另一个点选择。
Step 3) 检查所有点是否不同。如果是,请完成。如果不是,请返回步骤 2。
有什么想法吗?尝试所有组合并不是一个好的组合(我应该计算 M!/(M-N)! 全局距离)
如果 M = N,则此问题可以表述为二分图中的最小权重完美匹配,或者换句话说,分配问题。解决分配问题的一个著名方法是 Hungarian algorithm.
为了使匈牙利算法适用于 N < M 的情况,您可以使用 (M-N) 个附加元素扩展集 A(每个元素与 [=15 的所有元素的距离为零) =]B).
我有两套,A和B,N 和 M 分别指向 R^n。我知道 N < M 总是。
两点之间的距离,P 和 Q,表示为 d( P,Q )。由于问题是通用的,这个距离可以是任何函数(例如欧氏距离)。
我想找到 B 最接近 A[=62= 的子集]。在数学上我会说,我想找到 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)求A的每个点在B[中的最近点=62=]。如果没有重复的点,我找到最优子集并完成算法。但是,如果有重复的点,则转到第2步。
Step 2) 比较它们的距离(当然我比较的是点与点之间的距离是同一个最近点)。距离最小的点保留之前找到的点,其他点将其 desired 点更改为 "next" 最近点,但尚未为另一个点选择。
Step 3) 检查所有点是否不同。如果是,请完成。如果不是,请返回步骤 2。
有什么想法吗?尝试所有组合并不是一个好的组合(我应该计算 M!/(M-N)! 全局距离)
如果 M = N,则此问题可以表述为二分图中的最小权重完美匹配,或者换句话说,分配问题。解决分配问题的一个著名方法是 Hungarian algorithm.
为了使匈牙利算法适用于 N < M 的情况,您可以使用 (M-N) 个附加元素扩展集 A(每个元素与 [=15 的所有元素的距离为零) =]B).