给定点坐标,找到彼此之间存在一定距离的所有对点?

时间:2019-05-20 03:47:47

标签: algorithm

如果两个点之间的距离为0 <= D <= 1000,则

2个点为对。给定0 <= N <= 1000个星星的2D坐标(浮点数),确定有几对。

我之前已经看过几次这个问题,但是我忘记了实现。我相信这与分治法有关,在分治法中,将飞机分成两半,然后在飞机的两侧递归,但我不确定如何解决。

不需要任何代码,只需对这类问题的解决方案进行一般演练即可。

1 个答案:

答案 0 :(得分:3)

您可能会想到的是quad tree,即k-d tree的2D情况。在四叉树中,从包围所有点的边界矩形开始。您将所有点插入此基本级别。

从那里,将四边形分为两半或四分之一。您将每个点插入到其落入的一半或四分之一。您可以将每个半或四分之一进一步细分为较小的两半或四分之一,将每个点插入它们所属于的较小区域。

要查找给定点距离内的所有点,只需查找树中所有具有给定距离内点的四边形。然后,您只能针对初始点测试这些四边形中的点。

这使您无法对所有点进行典型的 n 2 比较。