我正在查找存储E =(K,V)元素的有序列表并支持以下操作的数据结构最多为O(log(N))时间,其中N是元素的数量。内存使用不成问题。通过索引和键支持随机访问的数据结构,在维持顺序的对数时间内插入和删除
- Ë得到(指数)的指数//获取元素
- INT查找(K)//找到元素,其ķ匹配
- 删除(指数)的指数//在索引中删除元素,以下的元件及其索引减少1个
- 刀片(指数,E)//插入在索引元件,下面的元件及其索引增加1
我已经考虑以下不正确的解决方案:
- 使用数组:
find
,delete
,和insert
仍将O(N) - 使用阵列+ K的地图索引:
delete
和insert
仍然将花费O(N),用于切换元件和更新地图 - 使用链接的K表+地图元素地址:
get
和find
仍然将花费O(N)
在我的想象中,最后的解决方案是最接近的,而是链表,一个自我平衡的树每个节点在其左侧存储元素的数量将使我们可以在O(log(N))中执行get
。
但是我不确定我是否正确,所以我想问一下我的想象是否正确以及是否有这种数据结构的名称,以便我可以寻找现成的解决方案。
+1等待答案。我怀疑是否有可能,因为你必须使用键或索引来支持O(lg N)中的find(),但是结构(我知道)只能通过键或索引或值排序... – shole
@ shole同意,我也认为你可以从4个操作中挑选3个操作,并且支持O(logn)不是全部4.如果问题在cs.stackexchange.com中标记也可能会更好 –