在两套中找到一对最近点的智能和快速方法是什么?

时间:2012-11-04 09:43:17

标签: java algorithm geometry point

例如,我有两个点列表:

List<Point2D> a;
List<Point2D> b;

找到ij的最佳方法是什么,以便a.get(i).distance(b.get(j))最小化?

明显的解决方案是蛮力 - 计算a中每个点到b中每个点的距离,保持最短距离。但是这个算法是O(n^2),这不好。有更好的方法吗?

2 个答案:

答案 0 :(得分:3)

您可以将其中一个列表放在quad tree或其他空间索引中,以便快速进行每次查找。

作为替代方案,您可以将所有数据放入具有空间索引功能的数据库中。

答案 1 :(得分:3)

对于列表a的每个点,您都可以找到列表b中距离this answer中所述的最近点。时间复杂度是O((M + N)log M)。 N = | A |,M = | B |。

然后你只需搜索a中与最近邻居有关的点。时间复杂度为O(N)。