【问题标题】:Data structure for stacked intervals堆叠区间的数据结构
【发布时间】:2013-08-27 11:26:47
【问题描述】:

我有一个具有整数宽度的项目列表,可以将其解释为从左到右堆叠在一起的间隔。例如,假设项目是 A、B、C、D、E 和 F,宽度分别为 5、2、2、3、2 和 4:

项目下面的数字表示距列表开头的偏移量。

我正在寻找一种能够有效支持这些操作的数据结构,理想情况下是少于 O(n):

  • 从给定位置查找项目。例如,位置 11 的项目是 D,因为它跨越从 9 到 12,位置 14 的项目是 F,因为它从那里开始。
  • 在任何两个现有项目之间插入一个项目,或删除任何现有项目。这应该改变后续项目的位置。例如,删除项目 E 应该导致项目 F 向左移动两个位置,因此它会从 12 跨越到 16。

我正在考虑使用类似于跳过列表的东西,每个级别都存储它包含在下面级别中的宽度,但我不太确定我可以获得哪些性能特征。

有什么建议吗?

【问题讨论】:

    标签: data-structures stack lookup intervals


    【解决方案1】:

    rope 的变体怎么样。

    但不是在叶子上有字符串,而是有间隔。

    找到包含特定位置的区间将是 O(log n)(只需修改绳索的索引算法以返回叶子而不是索引)。

    在任何地方插入一个项目将是 O(log n)(通过拆分一次并连接两次,所有这些都需要 O(log n))。

    与跳过列表不同,跳过列表本质上是概率性的,如果你遇到一些坏运气,最坏的情况是 O(n),这些操作将是 O(log n) 保证的(假设你使用 O(log n) 平衡-连接)。

    【讨论】:

    • 啊,我知道这可以用众所周知的数据结构来表达!非常优雅。
    猜你喜欢
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    相关资源
    最近更新 更多