Algorithm 在有限范围内检索k个最近的球体

Algorithm 在有限范围内检索k个最近的球体,algorithm,data-structures,nearest-neighbor,acceleration,Algorithm,Data Structures,Nearest Neighbor,Acceleration,我想知道我是否缺少任何设计用于检索范围内k-最近的球体的加速结构 我的问题的背景是分子可视化,具体来说,我需要检索到一个点的k-最近球体,以生成一个函数,该函数将用于指导球体跟踪步长。 为了简化,搜索可以限制在测试点的范围内 我在文章中看到的所有内容都是处理距离点最近的k点,但我的情况不同,因为我想处理距离点最近的球体。似乎可以调整kd树,将点的测试更改为球体,但我相信这会影响性能。所以我想知道是否有更好的结构,或者我是否应该使用和调整kd树 目前,我使用的是混合边界体积层次结构,但我认为其他结

我想知道我是否缺少任何设计用于检索范围内k-最近的球体的加速结构

我的问题的背景是分子可视化,具体来说,我需要检索到一个点的k-最近球体,以生成一个函数,该函数将用于指导球体跟踪步长。 为了简化,搜索可以限制在测试点的范围内

我在文章中看到的所有内容都是处理距离点最近的k点,但我的情况不同,因为我想处理距离点最近的球体。似乎可以调整kd树,将点的测试更改为球体,但我相信这会影响性能。所以我想知道是否有更好的结构,或者我是否应该使用和调整kd树

目前,我使用的是混合边界体积层次结构,但我认为其他结构的搜索性能可能更好,因为由于分子的性质,边界体积有很大的重叠


附言:我不太在乎施工时间。我需要良好的搜索性能和适当的内存占用。

您可以使用三步方法:

  • 使用球体的中心点查找最近的邻居
  • 对于这个最近的邻居,可以减去其半径并添加最大半径。然后使用新距离执行球形范围查询。这将返回可能最接近原始球体的球体的所有中心点
  • 然后使用每个球体的实际半径手动计算其实际距离

  • 假设球体的半径不会大大大于其平均距离,这应该是合理有效的

    可以将kd树中点之间的范围查询转换为点与球体之间的查询,因为点与球体之间的距离是点与球体上最近点之间的距离加上球体的半径。通过在结构中添加最大半径并测试每个候选对象,从距离中减去候选对象的半径,来执行每个范围查询。这是假设您对knn使用自适应范围查询。但是球体有半径,您在构建结构时如何知道它?!