我需要能夠在O(log(n))複雜度下工作的東西,並且我想到了AVL樹,但問題是有些鍵可能會重複自己(例如,一個人的分數),所以我想不出來如何實現它作爲一棵樹。什麼是正確的方法來做到這一點?使用重複鍵存儲自排序列表的正確數據結構是什麼?
2
A
回答
1
有很多選項可用。由於平衡操作(通常)純粹由旋轉組成,所以二元搜索樹的大多數風格都可以很容易地修改以允許具有重複值的節點,從而保持序列的順序。對於這樣的情況,你只需要做一個正常的BST插入,但是每當你看到一個重複的值時,你可以任意地向左或向右移動,並繼續,就好像這個值是不同的。
跳過列表特別容易更新以支持每個密鑰的多個副本,因爲他們不會對插入或刪除做任何複雜的結構更新。
如果你沒有與每個鍵關聯的輔助信息,那麼另一個更簡單的辦法是存儲標準的二叉搜索樹,但要增加一個「計數」字段說明場有多少邏輯副本的每個節點存在。每次插入時,如果密鑰不存在,則使用計數1創建它。如果它已經存在,則只需在現有節點中增加計數。刪除將類似地執行。當然,如果你不想推出你自己的數據結構,那就去找一個很好的multimap或multiset實現,這應該很好地爲你完成工作。根據您選擇的編程語言,您甚至可以在標準庫中找到它們。 :-)
相關問題
- 1. 2-prop排序列表的正確數據結構是什麼?
- 2. 什麼數據結構我們通常使用散列表存儲散列鍵?
- 3. 什麼是存儲歷史數據的正確數據庫結構?
- 4. 處理複雜數據結構的正確方法是什麼?
- 5. 什麼是無序數據結構,允許重複調用?
- 6. 什麼是存儲排列的良好數據結構,以及排列發生的次數是多少?
- 7. 什麼是存儲表格數據結構的最佳類型?
- 8. 正確使用多鍵詞典的自定義數據結構
- 9. 爲什麼我的數組不能正確存儲結構?
- 10. 此數據的正確數據庫結構是什麼?
- 11. Java數據結構:映射重複鍵並按值排序
- 12. 什麼是排序大數據的最佳數據存儲區
- 13. 數據結構是存儲在陣列
- 14. '文檔數據存儲'和'鍵值數據存儲'是什麼?
- 15. 最佳數據結構使用兩結束排序列表
- 16. 排序數據陣列結構在PHP爲捷克語 - 正確的排序號
- 17. 正確的MySQL結構存儲基於用戶的數據
- 18. Asp.net MVC的正確結構是什麼?
- 19. 什麼是正確的ActionListener結構?
- 20. 在存儲器中存儲2D表格結構的適當數據結構是什麼?
- 21. 什麼是存儲位置信息的最佳數據結構?
- 22. 存儲此數據結構的最佳方式是什麼?
- 23. angularJS:帶數據結構的同步重新排序列表
- 24. 這種數據結構的正確名稱是什麼?
- 25. 更改Firebase數據結構的正確方法是什麼?
- 26. 用於存儲排序值的數據結構
- 27. 爲什麼Java使用堆數據結構來存儲對象?
- 28. 什麼是定期或重複日期的好數據結構?
- 29. 什麼是存儲動態複選框值的良好數據庫結構?
- 30. 什麼是數據讀取/存儲應用程序的正確設計?
你只需要存儲一些數據以及密鑰? [這些註釋](http://pages.cs.wisc.edu/~vernon/cs367/notes/9.BST.html)可能對二叉搜索樹(而非AVL)有幫助。 –