3D远离点集的查询点的最近邻

时间:2016-10-07 21:06:16

标签: algorithm search data-structures computational-geometry nearest-neighbor

我需要回答很多关于在pointset中找到最近邻居的问题,远离查询点定位。到目前为止我发现的所有方法在这种情况下都很糟糕(例如,kd树每个查询可能有O(N))或者需要使用Voronoi图(我有~10m点所以Voronoi图太贵了)。 /> 有没有为这样的任务设计的已知算法?

2 个答案:

答案 0 :(得分:1)

这里的问题是距离。你看,当一个查询远离你的数据集时,kd-tree必须检查很多点,从而减慢了查询时间。

你所面临的情景一般对最近邻结构来说很难(而且通常情况并非如此),但如果我是你,我会用Balanced Box-Decomposition trees拍摄,你在哪里可以阅读更多关于他们的算法和数据结构。

答案 1 :(得分:0)

某些多维索引具有kNN查询,可以根据您的需要轻松调整,尤其是k == 1。 kNN算法通常必须首先估计近似最近邻距离,然后他们使用该距离来执行范围查询。 在R-Trees或四叉树中,可以通过找到最接近搜索点的节点来有效地完成此估计。然后,他们从最近的节点取一个点,计算到搜索点的距离,然后基于该距离执行范围查询,通常使用一些乘数,因为k> 1。 即使搜索点很远,这也应该是合理有效的。

如果您只搜索一个点(k = 1),那么您可以调整此算法以使用完全基于您找到的最近点的范围查询,没有额外的扩展来获得k> 1点。

如果您使用的是Java,则可以使用我的开源实现here。还有PH-Tree(一种四叉树,但空间效率更高,加载速度更快),它使用相同的kNN方法。