堆叠间隔的数据结构

时间:2013-08-27 11:26:47

标签: data-structures stack lookup intervals

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

Example

以下数字表示从列表开头的偏移量。

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

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

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

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

rope的变体怎么样。

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

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

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

与跳转列表不同,跳转列表本质上是概率性的并且如果遇到运气不好会有O(n)个最坏情况,那些操作将保证为O(log n)(假设您使用O(log n)平衡-concatenate)。