【问题标题】:Data Structure for Storing Ranges存储范围的数据结构
【发布时间】:2010-02-06 23:10:57
【问题描述】:

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

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

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

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

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

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

  • 检索需要尽可能高效。

【问题讨论】:

    标签: data-structures performance range


    【解决方案1】:

    您可以使用的一种数据结构是一维R-tree。这些旨在处理范围并提供有效的检索。您还将了解Allen's Operators;时间间隔之间还有十几种其他关系,而不仅仅是“重叠”。

    还有其他关于 SO 的问题涉及该领域,包括:

    【讨论】:

      【解决方案2】:

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

      对于查找,您可以针对顶部节点的左右子范围测试您的输入范围,然后深入其中重叠的部分,重复直到达到您保存的实际范围。

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

      【讨论】:

        猜你喜欢
        • 2013-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-14
        • 1970-01-01
        相关资源
        最近更新 更多