我有一组二维点,需要找到其中距离最短的点对,希望您能帮我翻译下如何最快地解决这个问题。
最优解是什么?我的方法是使用快速排序将它们排序,然后计算距离。这样的时间复杂度为O(nlogn + n) = O(nlogn)。
是否可能在线性时间内完成?
谢谢。
我有一组二维点,需要找到其中距离最短的点对,希望您能帮我翻译下如何最快地解决这个问题。
最优解是什么?我的方法是使用快速排序将它们排序,然后计算距离。这样的时间复杂度为O(nlogn + n) = O(nlogn)。
是否可能在线性时间内完成?
谢谢。
如果您可以从每个点探测出一个恒定数量并使用迭代加深深度优先搜索,则您永远不会检查比两个最接近的点更远的距离...并且由于您不依赖于失败的传递,因此您永远不需要重新计算ID DFS所倾向的方式。
不行。在O(n ^ 2)中,所有点之间的最小距离都必须进行比较,因为您必须将每个点与其他每个点进行比较。从技术上讲,它是n * n / 2,因为您只需要填充矩阵的一半。
有更快的算法可以找到给定点的最近邻居。不幸的是,您必须对每个点执行此操作,以找到最接近的两个点。