假设在x-y-z 3D空间中存在具有50 000个点的点云。对于这个云中的每个点,应该实现什么算法或数据限制来找到给定点的k个邻居,这些邻居在[R,r]的距离内?天真的方法是对50 000点中的每一点通过49 999点中的每一点并进行度量测试。但这种方法需要很长时间。就像kd树在很短的时间内找到最近的邻居一样,那么是否有一些实时的DS /算法实现预处理点云以实现最短时间的目标?
答案 0 :(得分:1)
您的问题是Nearest Neighbor Search主题的一部分,或者更准确地说是k-Nearest Neighbor Search。您的问题的答案取决于您用于存储点的数据结构。如果您使用R-trees或R*-trees等变体,并且您正在对数据库进行多次搜索,那么与天真线性搜索相比,您可能会在二维或三维空间中发现显着的性能提升。在更高的维度中,空间划分方案往往表现不如线性搜索。
答案 1 :(得分:1)
正如一些答案已经建议的NN搜索,你可以使用像k-d-tree这样的树算法。有适用于所有编程语言的实现。
如果您的描述[R,r]
建议使用空心球,则应比较一次性测试(在间隔内)与两个阶段(外部测试并移除通过内部测试的样本)。< / p>
您还没有提到性能要求(时间或帧速率?)和您的预期应用(可行方法?)。
答案 2 :(得分:0)
如果您使用普通的欧几里德度量标准,您可以遍历列表三次并提取每个维度中R内的那些点,实质上是提取封闭的多维数据集。搜索结果列表仍然是O(n ^ 2),但是要小得多。
答案 3 :(得分:0)