search - 网格中最近点搜索的高效算法
问题描述
我正在寻找一种可以在网格中进行有效搜索的算法。
我有一个包含所有质心点(x,y,z)的大数组
现在对于给定的位置 (xp,yp,zp),我想找到离该 p 位置最近的质心。
目前我正在做一个蛮力搜索,基本上对于每个点 p 我都会遍历所有点,计算到位置 p 的距离,然后找出那个质心。
我知道八叉树搜索和 kd-tree 可能会有所帮助,但不太确定如何解决它或哪个更好。
解决方案
我想要一个空间索引,例如 kd-tree 或四叉树/八叉树(您建议),或者可能是基于 R-Tree 的解决方案。
将所有质心放入索引中。通常,您可以将索引中的任何点与一些附加数据相关联,因此如果需要,您可以提供对网格的反向引用,例如网格坐标)。
在索引中找到最近的点应该非常快。然后返回的数据允许您返回网格。
在某种程度上,四叉树/八叉树本身只不过是一个离散网格,如果点密度增加,它会变得更精细。网格的不同之处在于它是分层的,并且根本不存储空白区域。
推荐阅读
- python - 循环遍历一个列表并创建数组,在一行中显示 n 的所有序列,然后是列表中的下一次迭代
- angular - 未捕获的错误:无法解析 UserService (?) 的所有参数
- c++ - 为什么我的 vector::erase 调用会抛出“vector subscript out of range”?
- ios - Swift iOS 应用程序 - 更改故事板 segue 类型的问题 - 无法从模态更改为显示
- django - 如何将 Django 日期时间转换为 HighCharts 格式
- javascript - 使用 javascript 下载 youtube 视频/音频流
- angular - 当用户仅通过输入查询来搜索选项时,matautocomplete 应该进行过滤
- flutter - 在屏幕中心对齐文本
- api - Http POST 在 Postman 中有效,但在 Flutter 中无效
- node.js - Node-Postgres SequelizeConnectionError:用户的密码验证失败