具有在摊销时间内搜索,插入和删除的数据结构


25

是否有数据结构可维护在摊销时间内支持以下操作的有序列表?Ø1个

  • GetElement(k):返回列表的第个元素。ķ

  • InsertAfter(x,y):将新元素y插入x后面的列表中。

  • Delete(x):从列表中删除x。

对于最后两个操作,您可以假定x是直接作为指向数据结构的指针而给出的。InsertElement返回y的相应指针。InsertAfter(NULL,y)在列表的开头插入y。

例如,从一个空的数据结构开始,以下操作将更新有序列表,如下所示:

  • InsertAfter(NULL,a) [一种]
  • InsertAfter(NULL,b) [b,a]
  • InsertAfter(b,c) [b,c,a]
  • InsertAfter(a,d) [b,c,a,d]
  • 删除(c) [b,a,d]

在这五个更新之后,GetElement(2)应该返回d,而GetElement(3)应该返回一个错误。


2
列表索引和子集排名的最佳算法(1989)中,我发现了解决了这个问题。Ω(log nlog log n)
2012年

2
@Raphael:我认为他的意思是,如果数据结构是数组,则该元素将被称为。数组支持O 1 时间的第一个操作,但不支持第二个;链表支持O 1 时间中的第二个操作,但不支持第一个操作。A[k]O(1)O(1)
JeffE 2012年

2
同样,平衡的二叉树在时间内支持两种操作。O(logn)
JeffE 2012年

1
@Raphael:编辑以澄清。
JeffE 2012年

2
@JeffE动态阵列支持在头两个摊销时间(cs.uwaterloo.ca/research/tr/1999/09/CS-99-09.pdfØ1个
圣地亚哥

Answers:


33

没有。

Fredman和Saks证明,支持这些操作的任何数据结构至少需要每次操作 log n / log log n )的摊销时间Ω日志ñ/日志日志ñ。(这是Dietz在您的第​​一个评论中提到的参考文献[1]。)下限适用于非常强大的单元探针计算模型,该模型仅考虑更新和查询访问的不同内存地址的数量。算法。

如果没有关于更新和查询操作的其他附加假设,Dietz的数据结构将是最好的(至少要考虑到恒定因素)。


3
@AT:这个界限从来没有被“证明是错误的”。在某些情况下它并不适用,但这是完全不同的说法!
拉斐尔

5
@AT:排序下限是在较弱的计算模型(即二进制决策树)中证明的。通过开发无法描述为二进制决策树的更快算法,“证明了错误” 。为了证明Fredman和Saks的下界错误,您必须设计一种不访问内存的更快算法。祝你好运。
JeffE 2012年

@JeffE和Raphael;请查看我的其他答案,并在有机会时确认/拒绝我的结果。谢谢。
2013年

6

看起来像通过修改计时码表技术的分析,已克服了 n障碍。Ω(lognloglogn)

新的[lower] 界线已被证明可用于细胞探针模型[1]中的类似问题。通过阅读该文章;据我了解,该限制也适用于列表表示问题。Ω(logn)


[1] Patrascu,Mihai和Erik D. Demaine。“ Cell-Probe模型中的对数下界。” SIAM J. Comput。35,没有 4(2006年4月):932-963。doi:10.1137 / S0097539705447256。


1
此下限适用于大小固定的单词,而较早的下限适用于对数大小的单词。Ω(logn/loglogn)
Yuval Filmus 2013年

确实。另外,您是否可以确认此界限适用于大小恒定的单词的列表表示问题?
2013年

1
我可以确认这一点,因为您自己提到过Dietz绑定(hdl.handle.net/1802/5694)。这使得复杂度恰好为,因此不是Ω log n Θ(logn/loglogn) Ω(logn)
jbapple
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.