CS中的很多數據結構都是二進制的(BST,堆等)。以非二進制形式實現它們的理由是什麼? IE瀏覽器。有3個孩子對於每個節點等什麼時候非二進制數據結構比二進制數據結構更好? (即堆,BST等)
3
A
回答
2
樹木與每個節點多於兩個孩子的折衷堆,因爲他們將在每個節點更多的鏈接爲代價具有淺的深度。通常用於數據庫和文件系統的B-tree是每個節點具有多個鏈接的樹結構的典型示例。這種結構與文件系統非常吻合,因爲可以調整B樹節點的大小以與文件系統塊或羣集的大小緊密匹配。
1
二叉樹有比較大的空間開銷。例如,在實施一系列二叉搜索樹的節點包含四個字段,key
,left
和right
。由於key
是你唯一真正感興趣和left
和right
指針只是簿記數據結構,這是2/3的開銷。
相比之下,三元搜索樹節點將有五個領域:key1
和key2
,加上指針left
,middle
和right
。這只是3/5的開銷,並且對於更大的節點,開銷的相對量進一步減少。當然,在某些時候,結構會變得太大而無法管理,所以您可以從更大的節點中擠出的性能數量受到限制;該限制取決於應用程序。 (我甚至沒有考慮內存分配引起的開銷,隨着節點變大,這也會下降。還有其他的原因是有更大的節點,例如2-3 tree比二叉搜索樹有更好的漸近複雜性。)
1
當操作是二進制的,你會使用二進制數據結構。當操作是三元時,您可以使用三元數據結構。二進制數據結構常見的一個原因是大多數操作是二進制的。對於例如如果你想比較4個元素,你一次可以比較2個元素。這與+,-,*,/
一樣。以TreeSet或TreeMap爲例,它是一棵紅黑樹。您提供了一個比較器,然後執行:
這是比較2個參數的二進制操作。
相關問題
- 1. 非常大的二進制數據的數據結構
- 2. 二進制plist結構
- 3. 轉換數據結構的二進制數據
- 4. 構建結構化二進制數據解析器的框架?
- 5. 讀/寫二進制數據結構時訪問位域
- 6. 從CArchive讀取二進制數據保存結構數組
- 7. 使用xml指定數據結構的二進制解碼器
- 8. 在Python中讀取結構二進制數據?
- 9. 在Spark結構化流中處理二進制數據
- 10. 二進制和文本結構的有效解碼(數據包)
- 11. 用Haskell存儲大型結構化二進制數據
- 12. 通過二叉樹結構實現的二進制堆
- 13. 哪種數據結構適合臨時大二進制數據存儲?
- 14. python - 使用結構解析二進制文件中的數據
- 15. 將二進制數據(來自文件)讀入結構
- 16. 加載二進制數據到一個結構
- 17. 解析二進制數據到ctypes的結構對象
- 18. 使用ifstream將二進制數據讀入結構中
- 19. C++讀取二進制數據到結構
- 20. 將二進制數據blob解碼爲結構
- 21. 得到succesor二進制搜索樹C++數據結構
- 22. 讀取二進制數據轉換成AC#結構
- 23. PHP從結構的二進制文件提取數據
- 24. 將「結構」數據存儲到二進制文件
- 25. 如何在結構中存儲二進制文件數據?
- 26. 將結構數據寫入二進制文件
- 27. 用於快速搜索的二進制數據結構
- 28. 二進制文件的結構?
- 29. 閱讀結構化二進制文件
- 30. 二進制數據
的可能重複[當選擇RB樹,B樹或AVL樹?(http://stackoverflow.com/questions/1589556/when-to-choose-rb-tree-b-tree-or- avl-tree) – 2012-07-15 22:56:22
@ BlueRaja-DannyPflughoeft真的不是。該問題詢問具體的樹數據結構;這是一個更普遍的問題。 – 2012-07-20 07:12:08