用于从开始和结束添加/删除的高效数据结构,应支持随机访问

时间:2012-07-12 20:42:46

标签: algorithm data-structures

它应该是有效的 - 在开始/结束时添加 - 在开始/结束时删除 - 支持随机访问

4 个答案:

答案 0 :(得分:4)

使用circular buffer。当空间不足时,尺寸加倍。这将在开始/结束时执行插入/删除以及在每个操作的O(1)时间内进行随机访问(摊销)。

在C ++中,std :: deque可以在开始/结束时进行插入/删除,也可以在O(1)中进行随机访问。

答案 1 :(得分:3)

<强> Finger Trees 即可。 Hinze,Ralf; Paterson,Ross(2006),“手指树:简单的通用数据结构”,功能规划期刊16(2):197-217。

  • O(1)访问添加/删除开始/结束。
  • O(log n)随机访问。

看起来有点像:

enter image description here

答案 2 :(得分:1)

Chris Okasaki的

Purely Functional Random Access Lists。与欣泽的手指树相似。

答案 3 :(得分:0)

这听起来有点像家庭作业问题,所以在澄清之前要避免喂食。

查看一些abstract data types。从那里,您可以决定哪种数据类型符合您的要求,并选择适当的数据结构实现。