算法在平面中的n个点之间找到一个点以最小化距离之和

时间:2012-01-13 17:21:56

标签: algorithm

我这里有算法问题。它与普通Fermat Point problem不同。

如果飞机上有一组n点,我需要找到哪一个点可以最小化到其余n-1点的距离总和。

你知道运行的算法是否小于O(n ^ 2)?

谢谢。

2 个答案:

答案 0 :(得分:1)

一种解决方案是假设中位数接近平均值,并且对于接近平均值的点子集,穷尽地计算距离的总和。您可以选择最接近均值的klog(n)点,其中k是任意选择的常量(复杂度nlog(n))。

另一种可能的解决方案是Delaunay三角测量。这种三角测量在O(nlogn)时间内是可能的。三角测量产生一个图形,每个点和边缘有一个顶点以满足delauney三角剖分。 一旦进行了三角测量,您就可以从任何一点开始,将该点的距离与其邻居进行比较并继续迭代。当当前点与其邻居相比具有最小距离总和时,您可以停止。直觉上,这将停留在全球最佳点。

答案 1 :(得分:1)

我认为这里的基本假设是你有一个可以轻易绑定的点数据集,因为许多在实践中“足够好”的算法可能不够严格,不适合理论和/或可能无法很好地扩展任意大的解决方案。

可能“足够好”的一个非常简单的解决方案是对Y坐标上的坐标进行排序,然后在X坐标上进行稳定的排序。

取min(X,Y)和max(X,Y)值定义的矩形,复杂度O(1),因为值将在已排序数据集中的已知位置。

现在,从排序数据集的中心开始,找到尽可能接近{Xctr = Xmin +(Xmax - Xmin)/ 2,Yctr = Ymin +(Ymax - Ymin)/ 2}的坐标值 - 复杂性O(N)受最小化标准的限制,距离是{Xctr,Yctr}的熟悉半径。

最糟糕的情况是将你的质心与其他每一点进行比较,但是一旦你离开中间点,就不会提高全局最优值,应该终止搜索。