一尘不染

查找集合A中所有点的最近算法的算法

algorithm

假设我们有两组点A,B,并且我们要为A中的每个点查找B中最接近的邻居。

有很多好的算法可以找到一个点的最近邻居。有什么方法可以使用我们从a_1获得的信息来更有效地搜索a_2或集合中其他点的最近邻居?

我在想类似的事情:使用三角形不等式获取B中每个点与新点a_2之间的可能距离的间隔,并对间隔的最大值和最小值进行排序,然后我只能搜索B中落在该点中的点。第一间隔。


阅读 263

收藏
2020-07-28

共1个答案

一尘不染

  1. 查找集合B的点的Voronoi图
  2. 在集合A和集合B的Voronoi图的点上应用扫描线算法。无论扫描线覆盖集合A中的某个点的哪个位置,请查看该点在Voronoi图的哪些边之间。这允许确定该点属于Voronoi图的哪一面。给出距集合B最近的点。

步骤2的详细信息:将Voronoi图的所有边缘(当前已与扫掠线相交)保留在某个有序容器中。当扫掠线覆盖Voronoi图的某个顶点时,请从容器中/向容器移除/添加入射到该顶点的边。要查看某个点位于哪条边之间,请在容器中将此点的后继/前任边获取到。

时间复杂度为O((M + N)log M)。N = | A |,M = | B |。

2020-07-28