是否有数据结构可维护在摊销时间内支持以下操作的有序列表?
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)中,我发现了解决了这个问题。
—
2012年
@Raphael:我认为他的意思是,如果数据结构是数组,则该元素将被称为。数组支持O (1 )时间的第一个操作,但不支持第二个;链表支持O (1 )时间中的第二个操作,但不支持第一个操作。
—
JeffE 2012年
同样,平衡的二叉树在时间内支持两种操作。
—
JeffE 2012年
@Raphael:编辑以澄清。
—
JeffE 2012年
—
圣地亚哥