我有一组点,需要知道哪一个点与任何其他点之间距离最远的欧几里德距离。 我想从O(n ^ 2)
改进这个现在我们已经听说过Kd树的解决方案,但是 如果点'x'已经存在于Kd树中,则KD树不提供最近距离。它没有实现删除。
编辑: 您可以通过在“最近的搜索算法”和“我们设置root / parent的位置”中忽略self来开始搜索
答案 0 :(得分:1)
给定n个点Pi,1< = i< = n:
构建kd-tree(中位算法的O(n)中位数,这是O(n log n))
对于所有点Pi:找到第二个最近点(最近点将是点自身),计算距离并记住Pi,如果距离是新的最小值;这又是O(n log n)。
总而言之,这是一个O(n log n)算法。
答案 1 :(得分:0)
我假设你想要找到最大化到最近邻居的距离的点。就像南太平洋上的一个小岛距离最近的陆地1100英里。
嗯,你应该远离O(n ^ 2)。假设你有一百万分。将点分为1000 x 1000网格。要找到最近的点,您只需要检查九个neigbouring网格,因此远远低于O(n ^ 2)。如果网格包含大量点,它们将靠近在一起,以便您可以快速从搜索中删除它们。