2d地图上最孤立的点 - 算法

时间:2016-06-04 20:42:52

标签: algorithm dictionary math computational-geometry kdtree

我有一组点,需要知道哪一个点与任何其他点之间距离最远的欧几里德距离。 我想从O(n ^ 2)

改进这个

现在我们已经听说过Kd树的解决方案,但是 如果点'x'已经存在于Kd树中,则KD树不提供最近距离。它没有实现删除。

编辑: 您可以通过在“最近的搜索算法”和“我们设置root / parent的位置”中忽略self来开始搜索

2 个答案:

答案 0 :(得分:1)

给定n个点Pi,1< = i< = n:

  1. 构建kd-tree(中位算法的O(n)中位数,这是O(n log n))

  2. 对于所有点Pi:找到第二个最近点(最近点将是点自身),计算距离并记住Pi,如果距离是新的最小值;这又是O(n log n)。

  3. 总而言之,这是一个O(n log n)算法。

答案 1 :(得分:0)

我假设你想要找到最大化到最近邻居的距离的点。就像南太平洋上的一个小岛距离最近的陆地1100英里。

嗯,你应该远离O(n ^ 2)。假设你有一百万分。将点分为1000 x 1000网格。要找到最近的点,您只需要检查九个neigbouring网格,因此远远低于O(n ^ 2)。如果网格包含大量点,它们将靠近在一起,以便您可以快速从搜索中删除它们。