我有大量的对象,每个对象代表一个数值范围(例如[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)。
是否有良好的标准数据结构?
答案 0 :(得分:2)
我想到了一个interval tree,它是:(来自维基百科的描述,来自here的图片)
每个节点存储的树:
- 中心点
- 指向另一个节点的指针,该节点包含完全位于中心点左侧的所有间隔
- 指向另一个节点的指针,该节点包含完全位于中心点右侧的所有间隔
- 与中心点重叠的所有区间按其起点排序
- 与中心点重叠的所有间隔按其结束点排序
它允许O(log n + m)
区间交叉查询,其中m
是交叉区间的数量。
您需要查看其中一个网站,了解有关构建和查询的更多详细信息。