存储区间的数据结构

13

我想知道是否有一种数据结构能有效地处理以下情况:

该数据结构应存储一些可能重叠的可变长度范围,这些范围在某个连续时间尺度上。

  • 例如,您可以添加范围 a:[0,3], b:[4,7], c:[0,9]

  • 插入时间不需要特别高效。

检索将使用范围作为参数,并返回集合中与该范围重叠的所有范围,例如:

  • Get(1,2) 将返回 a 和 c。 Get(6,7) 将返回 b 和 c。 Get(2,6) 将返回所有三个。

  • 检索需要尽可能高效。

2个回答

7

1
你可以使用二叉树来存储层次结构中的范围。从代表包含所有范围的根节点开始,将其分为两半,测试您要插入的范围是属于左侧子范围、右侧子范围还是两者都是,并在匹配子节点中递归继续,直到达到某个深度,此时保存实际范围。
对于查找,您可以将输入范围与顶部节点的左侧和右侧子范围进行比较,并潜入重叠的范围中,重复此过程,直到到达要保存的实际范围。
这样,检索的复杂性就具有对数级别。您仍然需要管理检索中的重复项,因为一些范围将属于多个节点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接