标签: algorithm
2个点为对。给定0 <= N <= 1000个星星的2D坐标(浮点数),确定有几对。
我之前已经看过几次这个问题,但是我忘记了实现。我相信这与分治法有关,在分治法中,将飞机分成两半,然后在飞机的两侧递归,但我不确定如何解决。
不需要任何代码,只需对这类问题的解决方案进行一般演练即可。
答案 0 :(得分:3)
您可能会想到的是quad tree,即k-d tree的2D情况。在四叉树中,从包围所有点的边界矩形开始。您将所有点插入此基本级别。
从那里,将四边形分为两半或四分之一。您将每个点插入到其落入的一半或四分之一。您可以将每个半或四分之一进一步细分为较小的两半或四分之一,将每个点插入它们所属于的较小区域。
要查找给定点距离内的所有点,只需查找树中所有具有给定距离内点的四边形。然后,您只能针对初始点测试这些四边形中的点。
这使您无法对所有点进行典型的 n 2 比较。