我有一个带有整数宽度的项目列表,可以解释为从左到右堆叠在一起的间隔。例如,假设项目是A,B,C,D,E和F,宽度分别为5,2,2,3,2和4:
以下数字表示从列表开头的偏移量。
我正在寻找一种有效支持这些操作的数据结构,理想情况是小于O(n):
我正在考虑使用类似于跳过列表的内容,每个级别都会在下面的级别中存储它所包含的宽度,但我不太清楚我可以获得哪些性能特征。
有什么建议吗?
答案 0 :(得分:3)
rope的变体怎么样。
但它不是在树叶上有字符串,而是有间隔。
查找包含特定位置的区间将是O(log n)(只需修改绳索的索引算法以返回叶子而不是索引到它)。
在任何地方插入一个项目都是O(log n)(通过拆分一次并连接两次,所有这些都取O(log n))。
与跳转列表不同,跳转列表本质上是概率性的并且如果遇到运气不好会有O(n)个最坏情况,那些操作将保证为O(log n)(假设您使用O(log n)平衡-concatenate)。