[英]What would be smart and fast way to find a pair of closest points in two sets?
例如,我有两个要点列表:
List<Point2D> a;
List<Point2D> b;
找到这样的i
和j
的最佳方法是什么,从而使a.get(i).distance(b.get(j))
最小?
显而易见的解决方案是蛮力-计算从a
中的每个点到b
中a
每个点的距离,并使该对保持最短的距离。 但是此算法为O(n^2)
,效果不好。 有更好的方法吗?
您可以将列表之一放在四叉树或其他空间索引中,以快速进行每次查找。
或者,您可以将所有数据放入具有空间索引功能的数据库中。
对于列表a
每个点,您可以按照此答案中的描述从列表b
找到最近的点。 时间复杂度为O((M + N)log M)。 N = | A |,M = | B |。
然后你只需在搜索点a
,具有近邻。 时间复杂度为O(N)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.