什么是一个好的数据结构,用于查找哪个区域包含一个点?

时间:2013-02-05 05:08:29

标签: data-structures binary-tree point region quadtree

我正在寻找一种支持查找哪个“n”区域包含点“p”的数据结构。我在看Quadtree和R-trees,但我认为它们不符合我的要求。

本质上我希望能够在这棵树上添加一些3维矩形区域,然后能够针对这棵树测试一个三维点,并返回哪个区域最紧密地约束该点。没有地区会有重叠的边界。

我目前使用的朴素算法是简单地针对每个矩形区域的每个维度测试点“p”。

for(region in regionList):
    if(p.x > region.x1 && p.x < region.x2 && p.y > region.y1 && py < region.y2 && p.z > region.z1 && p.z < region.z2)
        return region
end

这在O(n)时间内运行,其中n是区域的数量。我希望搜索将O(log n)作为Quadtree找到2d点的点。

2 个答案:

答案 0 :(得分:0)

结帐Segment TreesKD Trees

答案 1 :(得分:0)

我建议使用QuadTree来存储像MX-CIF树这样的区域。它基本上是基于2维(x,y)的QuadTree。一旦找到包含(x,y)项的点的适当节点,就可以检查它是否包含所有三个(x,y,z)维度中的点。

我已经完成了something similar in Java

您还可以查看Octree,它是一个三维QuadTree。