我正在寻找存储E =(K,V)元素的有序列表的数据结构,并且在最多O(log(N))时间支持以下操作,其中N是元素的数量。内存使用不是问题。
我考虑过以下不正确的解决方案:
find
,delete
和insert
仍然是O(N)delete
和insert
仍会花费O(N)来转移元素并更新地图get
和find
仍需花费O(N)在我的想象中,最后一个解决方案是最接近但不是链接列表的自平衡树,其中每个节点存储左侧元素的数量,这将使我们能够{{1}在O(log(N))中。
但是我不确定我是否正确,所以我想问一下我的想象力是否正确以及是否有这种数据结构的名称所以我可以寻找 - 货架解决方案。
答案 0 :(得分:0)
我能想到的最接近的数据结构是treaps。
隐式treap是对常规treap的简单修改,这是一种非常强大的数据结构。实际上,隐式treap可以被视为一个实现了以下过程的数组(在线模式下都是O(logN)O(logN)):
- 在任意位置的数组中插入元素
- 删除任意元素
- 在任意时间间隔内查找总和,最小/最大元素等
- 添加,以任意间隔绘画
- 以任意间隔反转元素
醇>
使用隐式键修改允许您执行除第二个操作之外的所有操作(找到K匹配的元素的索引)。如果我想出一个更好的主意,我会编辑这个答案:)