Data structures 用于存储范围的数据结构

Data structures 用于存储范围的数据结构,data-structures,performance,range,Data Structures,Performance,Range,我想知道是否有人知道可以有效处理以下情况的数据结构: 数据结构应该在一些连续的时间尺度上存储多个可能重叠的可变长度范围 例如,您可以添加范围a:[0,3],b:[4,7],c:[0,9] 插入时间不需要特别有效 检索将以范围作为参数,并返回集合中与该范围重叠的所有范围,例如: Get(1,2)将返回a和cGet(6,7)将返回b和cGet(2,6)将返回所有三个 检索需要尽可能高效 您可以选择二叉树,它将范围存储在层次结构中。从根节点开始,它代表一个将其中间分割的包罗万象的范围,测试要插入

我想知道是否有人知道可以有效处理以下情况的数据结构:

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

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

  • 插入时间不需要特别有效

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

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

  • 检索需要尽可能高效


您可以选择二叉树,它将范围存储在层次结构中。从根节点开始,它代表一个将其中间分割的包罗万象的范围,测试要插入的范围是否属于左子范围、右子范围或两者,并在匹配的子节点中递归进行,直到达到某个深度,在该深度处保存实际范围

对于查找,您可以根据顶部节点的左、右子范围测试输入范围,然后深入重叠的子范围,重复操作,直到达到保存的实际范围


这样,检索具有对数复杂性。您仍然需要在检索中管理重复项,因为某些范围将属于多个节点。

您可以使用的一种数据结构是一维的。这些是为了处理范围和提供有效的检索而设计的。你还将了解;除了“重叠”,时间间隔之间还有十几种其他关系

还有其他影响该领域的问题,包括: