繁体   English   中英

非均匀大小超球面中最近邻搜索的快速空间数据结构

[英]Fast spatial data structure for nearest neighbor search amongst non-uniformly sized hyperspheres

给定k维连续(欧几里德)空间充满了相当不可预测的移动/生长/收缩的超球面,我需要重复找到其表面最接近给定坐标的超球面。 如果一些超球面与我的坐标距离相同,那么最大的超球面会获胜。 (随着时间的推移,超球面的总数保证保持不变。)

我的第一个想法是使用KDTree,但它不会考虑超球体的非均匀体积。 所以我进一步观察并找到了BVH (边界体积层次结构)和BIH (边界间隔层次结构),这似乎可以解决问题。 至少在二维/三维空间中。 然而,虽然在BVH上找到了相当多的信息和可视化,但我几乎找不到任何关于BIH的信息。

我的基本要求是k维空间数据结构,它考虑了体积 ,要么是超级快速构建 (离线),要么是动态的, 几乎没有任何不平衡

鉴于我的上述要求,您会使用哪种数据结构? 我还没提到的其他任何一个?


编辑1:忘记提及:允许hypershperes(实际上是高度期望的)重叠!

编辑2:看起来不是“距离”(特别是“负距离”),我描述的指标更好地匹配力量

我期望一个QuadTree /八叉树/一般化为2 ^ K树,因为你的K维度可以做到这一点; 这些递归分区空间,并且假设你可以在K-subcube(或K-rectangle brick,如果分裂不均匀)不包含超球面,或者包含一个或多个超球体,使分区不分离任何,或者只包含一个超球体的中心(可能更容易)。

在这样的树中插入和删除实体是快速的,因此超球面改变大小只会导致删除/插入操作对。 (我怀疑你可以优化这个,如果你的球体大小通过局部额外的递归分区改变,如果球体变小,或者局部K块合并,如果它增长)。

我没有使用它们,但你也可以考虑二进制空间分区 这些允许您使用二叉树而不是k树来划分空间。 我知道KDTrees是一个特例。

但无论如何我认为2 ^ K树和/或BSP / KDTrees的插入/删除算法是很好理解和快速的。 因此,超球面尺寸的变化会导致删除/插入操作,但这些操作很快。 所以我不明白你对KD树的反对意见。

我认为所有这些的表现都是渐近相同的。

我会使用SQLite的R * Tree扩展。 表通常具有1或2维数据。 SQL查询可以组合多个表以在更高维度中搜索。

负距离的配方有点奇怪。 几何中的距离是正的,因此可能没有太多有用的理论可供使用。

使用正距离的不同配方可能会有所帮助。 阅读有关双曲空间的内容。 这可能有助于为描述距离的其他方式提供想法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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