例如,我有两个点列表:
List<Point2D> a;
List<Point2D> b;
找到i
和j
的最佳方法是什么,以便a.get(i).distance(b.get(j))
最小化?
明显的解决方案是蛮力 - 计算a
中每个点到b
中每个点的距离,保持最短距离。但是这个算法是O(n^2)
,这不好。有更好的方法吗?
答案 0 :(得分:3)
您可以将其中一个列表放在quad tree或其他空间索引中,以便快速进行每次查找。
作为替代方案,您可以将所有数据放入具有空间索引功能的数据库中。
答案 1 :(得分:3)
对于列表a
的每个点,您都可以找到列表b
中距离this answer中所述的最近点。时间复杂度是O((M + N)log M)。 N = | A |,M = | B |。
然后你只需搜索a
中与最近邻居有关的点。时间复杂度为O(N)。