我有一组(X)分(不是很大,比如1-20分)和第二组(Y),更大的一组分。我需要从Y中选择一个点,从X到所有点的距离总和是最小的。
我想出了一个想法,我将X视为多边形的顶点并找到该多边形的质心,然后我将从Y最接近质心的位置选择一个点。但我不确定质心是否最小化了它到多边形顶点的距离之和,所以我不确定这是否是一个好方法?有没有解决这个问题的算法?
点由地理坐标定义。
答案 0 :(得分:4)
多边形的质心可能不对,但存在这样的一点。
在论文中:n-ellipses and the minimum distance problem,显示如果点(称为焦点,你的X集)不是共线的那么
有一个独特的点(称为中心),其距离总和最小。这一点使得从该点到焦点的单位矢量之和为零!
距离总和恒定的点的轨迹是包含中心的凸曲线(称为n-椭圆)
距离D的n-椭圆完全包含任何其他距离D'的n-椭圆,其中D'
因此你可以做某种类型的爬山算法来找到中心。
当然这些n-椭圆不一定是圆形,所以只选择最接近中心的点可能不起作用,但可能是一个很好的近似值。
您可以对20个点进行一些预处理(如果这些是固定的)以找出一个好的分区方案(基于以上信息)。
希望有所帮助。
答案 1 :(得分:1)
如果你想最小化距离的平方和(而不是距离的总和),那么最小化该和的点是X中点的平均值。
证明:
sum(squares of distances) = (x-x0)^2 + (y-y0)^2 + (x-x1)^2 + (y-y1)^2 + ...
d/dx sum(squares of distances) = 2(x-x0) + 2(x-x1) + ... = 2(Nx - x0 - x1 - ...)
当导数为零时,总和最小化,这发生在Nx = x0+x1+...
时,x = (x0+x1+...)/N
导数在这一点附近是对称的,函数是二次的,所以我很确定Y中与该平均点最接近的点是最好的。
最小化距离更难,但我怀疑相同的算法,在您测试的Y组中有更多的余地,也会起作用。
答案 2 :(得分:1)
因为你想要最小的距离和我相信你可以将点X的集合减少到它的空间平均值。然后,您可以使用KDTree或某种空间分区树来查找Y中最接近X的空间平均值的点。与检查所有可能的点相比,使用空间分区树可以节省大量工作。
答案 3 :(得分:0)
请原谅我提出蛮力。 提出问题的方式我们不知道X,Y在哪里。 假设X是30分,Y是1000分。 然后为Y和30的每个点的距离。 总计30000次计算,一蹴而就。 这保证了最低限度。 找到X的一些“中心”并选择最接近的Y将仅是近似解。
更有趣的问题是单独为X找到这样一个点。忽略Y. 仅对于X三点,Fermat-Torichelli点解决了这个问题。