一维空间索引的数据结构

时间:2014-05-07 19:57:02

标签: data-structures

我有大量的对象,每个对象代表一个数值范围(例如[1,3],[2,8],[3,3])。我希望能够快速查询与给定范围重叠的所有范围。这是标准2D或3D空间索引的一维等价物,例如R树。

例如:

Data = [0,1], [1,3], [2,8], [3,3], [5,9]
Query = [2,4]
Output = [1,3], [2,8], [3,3]

我想在结构中添加项目或从中删除项目通常在O(log N)中运行,并且搜索结构通常也是O(log N)。

是否有良好的标准数据结构?

1 个答案:

答案 0 :(得分:2)

我想到了一个interval tree,它是:(来自维基百科的描述,来自here的图片)

  

每个节点存储的树:

     
      
  • 中心点
  •   
  • 指向另一个节点的指针,该节点包含完全位于中心点左侧的所有间隔
  •   
  • 指向另一个节点的指针,该节点包含完全位于中心点右侧的所有间隔
  •   
  • 与中心点重叠的所有区间按其起点排序
  •   
  • 与中心点重叠的所有间隔按其结束点排序
  •   
     

它允许O(log n + m)区间交叉查询,其中m是交叉区间的数量。

您需要查看其中一个网站,了解有关构建和查询的更多详细信息。