Algorithm 找到点之间最小距离的最快方法

Algorithm 找到点之间最小距离的最快方法,algorithm,geometry,Algorithm,Geometry,我有一组2D点,需要找到最快的方法来计算哪对点在集合中的距离最短 这样做的最佳方式是什么?我的方法是使用快速排序对它们进行排序,然后计算距离。这将是O(nlogn+n)=O(nlogn) 有可能在线性时间内完成吗 谢谢。否。O(n^2)中所有点之间的最小距离,因为您必须将每个点与其他点进行比较。从技术上讲,它是n*n/2,因为你只需要填充矩阵的一半 有一些更快的算法用于查找给定点的最近邻。不幸的是,您必须对每个点执行此操作,才能找到最近的两个点。: 最近点对问题或最近点对问题是这样一个问题:在度

我有一组2D点,需要找到最快的方法来计算哪对点在集合中的距离最短

这样做的最佳方式是什么?我的方法是使用快速排序对它们进行排序,然后计算距离。这将是O(nlogn+n)=O(nlogn)

有可能在线性时间内完成吗


谢谢。

否。O(n^2)中所有点之间的最小距离,因为您必须将每个点与其他点进行比较。从技术上讲,它是n*n/2,因为你只需要填充矩阵的一半

有一些更快的算法用于查找给定点的最近邻。不幸的是,您必须对每个点执行此操作,才能找到最近的两个点。

:

最近点对问题最近点对问题是这样一个问题:在度量空间中给定n个点,找到它们之间距离最小的一对点

在假设在恒定时间内可计算的计算模型中,问题可以在O(n logn)时间内求解。如果我们允许随机化与floor函数一起使用,这个问题可以在O(n)时间内解决


如果你能从每个点探测出一个常量,并使用迭代深化DFS,你将永远不会检查距离最近的两个点以外的其他点……而且,由于你不依赖于失败的传递,你永远不需要按照ID DFS的方式重新计算。

如何使用快速排序对二维数据进行排序?这有助于找到两个最近的点吗?我只是按x坐标对它们进行排序。基本上,我似乎实现了在中解释的算法。首先按x排序,然后分治。因此,似乎没有更快的方法。按X排序根本没有实际价值,因为最近的点可能没有接近的X值。按X排序并不能减少将每个点与其他点进行比较以找到最接近的一对的需要,实际上是这样的。看看上面的维基百科链接和分而治之的解决方案。Wikipedia的文章说,如果floor是一个常数时间操作,那么它实际上就是O(N log N)(然而,对于任意大的数字,我不认为它实际上是),这个图不是一个算法。财富算法生成图表。我不确定这是否适用,因为它划分空间而不是比较点。