有沒有人知道一個數據結構,我可以在最壞的情況下訪問和刪除第k個項目O(logn),並且還支持在最壞的情況下O(logn)在第k個項目之後插入項目的操作?通過O(logn)訪問和O(logn)插入實現數據結構?
1
A
回答
1
是的。你所描述的可以通過增強樹來實現。每個節點都有一個計數器,指示其子樹(包括其本身)中的節點數量。對於葉節點,計數器爲1.對於根節點,計數器是節點的總數。這樣,您可以從根開始查找具有二分搜索的第k個項目。無論何時插入/移除元素,都必須更新從該位置到根的路徑中的計數器。
這種樹被稱爲order statistic trees,排名樹木,樹木櫃臺...
請參閱Cormen,Leiserson,Rivest和Stein撰寫的名爲「Intorduction to Algorithms」的第14章「增加數據結構」。
0
相關問題
- 1. 在O(logn)O(logn)刪除和索引訪問的數據結構
- 2. 是O(LogN)== O(3LogN)?
- 3. 比較O((logn)!)和O(2^n)
- 4. 時間複雜度:O(logN)或O(N)?
- 5. BIg O符號:n * logn
- 6. O(logn)^ 2時間表現的示例
- 7. O(logn)時間和算法關係
- 8. 查找第n個fib數,在O(logn)
- 9. O(logn)中從0〜N的位計數
- 10. 在O(logn)運行時間中通過數組?
- 11. dificulty解決O(logn)中的代碼
- 12. 爲什麼deleteMin的堆取O(logn)?
- 13. 分鐘堆比O(logn)增加鍵好?
- 14. 查找RBTREE在O(LOGN)的算法
- 15. 爲O蟒蛇heapq刪除(LOGN)
- 16. 這段代碼是O(n)還是O(logn)?
- 17. 爲什麼TreeSet迭代O(n)而不是O(n * logn)?
- 18. 哪一個更好? O(n^1/2)或O(logn)
- 19. 查找O(nlogn)和O(logn)附加空間中的最小正數
- 20. 添加,刪除的O型插接件(LOGN)
- 21. 運行時間爲O(logn)的二進制數除算法
- 22. 這個解決方案的時間複雜度是O(N)還是O(LogN)?
- 23. 用於刪除O(logN)中小於k的元素的數據結構其中N是元素數
- 24. 在O(logn)時間使用STL堆執行減少鍵
- 25. 證明是n +(logn)時間^ 2是O(n)
- 26. 3Sum算法版本O(N^2 logn)時間
- 27. 在Elixir中進行二元搜索O(logN)?
- 28. 給出一種預處理方法,允許您在O(logn)
- 29. C++數據結構大O
- 30. Redis:當插入的元素在開始或結束時,ZADD是否優於O(logN)?