我正在查找存儲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中標記也可能會更好 –