绳索上有相当于范·埃姆德·博阿斯的树木吗?


23

我认识的某个人正在计划在不久的将来实现文本编辑器,这促使我思考一下哪种类型的数据结构对于文本编辑器来说是最快的。最常用的结构显然是绳索间隙缓冲器

Van Emde Boas树大约是最快的优先级队列,如果您不介意可放入其中的项目数上限和较大的初始化成本。我的问题是,是否存在某些数据结构与van Emde Boas树一样快,但是支持文本编辑器操作。

我们只需要在数据结构中支持最多字符(因此,如果,则我们最多支持4GB的ASCII字符)。我们有时间来初始化新的数据结构。我们希望支持以下操作:mlogm=32m

  • 在中的位置处插入一个字符(从而将每个后续字符的位置增加1)。iO(loglogm)
  • 在位置删除一个字符在。iO(loglogm)
  • 在位置返回字符在。iO(loglogm)

因此,insert(0,'a')后接insert(0,'b')会得出“ ba”。

更好的是:

  • 返回一个“指针”一些索引在。iO(loglogm)
  • 给定一个“指针”,返回中此位置的字符。O(1)
  • 给定一个“指针”,删除中此位置的字符。O(1)
  • 给定“指针”,在此位置添加一个字符,然后将指针返回到以下位置。O(1)
  • (可选)给定“指针”,将“指针”返回到的下一个/上一个字符。O(1)

Answers:


14

弗雷德曼(Fredman)和萨克斯(Saks)在“动态数据结构的单元探针复杂性”中表明,您所做的操作无法比摊销时间更好寻找。他们称此问题为“列表表示”。Θ(lgmlglgm)

Dietz在“用于列表索引和子集等级的最佳算法”中介绍了一种数据结构,该数据结构可实现此限制。


您可以提供第一篇文章的链接吗?
拉斐尔

我没有免费的版本。
jbapple 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.