繁体   English   中英

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

[英]What would be smart and fast way to find a pair of closest points in two sets?

例如,我有两个要点列表:

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

找到这样的ij的最佳方法是什么,从而使a.get(i).distance(b.get(j))最小?

显而易见的解决方案是蛮力-计算从a中的每个点到ba每个点的距离,并使该对保持最短的距离。 但是此算法为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM