【问题标题】:Efficient algorithm for nearest point search in a grid网格中最近点搜索的高效算法
【发布时间】:2019-05-14 20:40:18
【问题描述】:

我正在寻找一种可以在网格中进行高效搜索的算法。

我有一个包含所有质心点 (x,y,z) 的大数组

现在对于给定的位置 (xp,yp,zp),我想找到离该 p 位置最近的质心。

目前我正在做一个蛮力搜索,基本上对于每个点 p 我都会遍历所有点,计算到位置 p 的距离,并由此找出是哪个质心。

我知道八叉树搜索和 kd-tree 可能会有所帮助,但不太确定如何解决它或哪个更好。

【问题讨论】:

  • 您能否解释一下非结构化网格的含义以及您需要它的用途?也许您不需要任何网格,听起来您可以将所有质心放在 kd-tree 或 octree 中,然后进行最近邻搜索 (xp,yp,zp) 以找到最近的质心?
  • @TilmannZ 它是一个非结构化网格,其中欧几里得空间以不规则模式离散化。因此,它需要某种拓扑信息来理解网格。但是,是的,你是对的。我们可以假设我有很多点质心 (x,y,z),并且我有很多候选点 (xp,yp,zp),我需要在其中找到最近的质心
  • 我已将文本更改为不会被非结构化网格术语混淆

标签: search binary-search-tree kdtree octree


【解决方案1】:

我想要一个空间索引,例如 kd-tree 或四叉树/八叉树(您建议),或者可能是基于 R-Tree 的解决方案。

将所有质心放入索引中。通常,您可以将索引中的任何点与一些附加数据相关联,因此如果需要,您可以提供对网格的反向引用,例如网格坐标)。

在索引中找到最近的点应该非常快。然后返回的数据允许您返回到网格中。

在某种程度上,四叉树/八叉树本身只不过是一个离散网格,如果点密度增加,它会变得更精细。与网格的不同之处在于它是分层的,并且根本不存储空白区域。

【讨论】:

    猜你喜欢
    • 2014-10-31
    • 2012-04-19
    • 2013-07-22
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    相关资源
    最近更新 更多