快速查询的数据结构?

时间:2009-09-30 15:40:56

标签: c++ algorithm data-structures geometry nearest-neighbor

我知道我可以使用KD-Tree来存储点并快速迭代它们接近另一个给定点的一小部分。我想知道线路是否有类似的东西。

给定一组 3D 中的行L(存储在该数据结构中)和另一个“查询行”q,我希望能够快速遍历L中的所有行对q来说“足够接近”。我计划使用的距离是两点u和v之间的最小欧几里德距离,其中u是第一行上的某个点,v是第二行上的某个点。计算距离不是问题(有一个很好的技巧涉及交叉产品)。

也许你们有个好主意或知道在哪里寻找论文,描述等......

TIA, 第

2 个答案:

答案 0 :(得分:4)

另一个选项 - 最常用的选项是基于磁盘的数据库系统中的空间索引 - 是R-Tree。实现它比KD树更复杂,但通常认为它更快,并且没有问题索引线和多边形。

答案 1 :(得分:3)

您也可以使用KD-Trees。

可以构建一个适用于基元而不是点的KD树。许多射线追踪器都是为了使三角撞击测试更快。我见过的最好的描述是ray tracing tutorial

一个可能更快但不是100%准确的解决方案,就是保留每个线段的点列表,并将它们插入到基于标准点的KD树中。找到最近的点,然后用线段标记它们,并使用它来获得最近的线。它很粗糙,但与其他选项相比通常非常快。 “技巧”是找到在段之间保持较大空间(更快)与将段拆分为更多点(更慢但更准确)之间保持适当平衡的正确平衡。

相关问题