目錄
B樹
特性
一個m階的B樹具有如下特徵:
- 根結點至少有兩個子女。
- 每個中間節點都包含k-1個元素和k個孩子,其中 m/2 <= k <= m
- 每一個葉子節點都包含k-1個元素,其中 m/2 <= k <= m
- 所有的葉子結點都位於同一層。
- 每個節點中的元素從小到大排列,節點當中k-1個元素正好是k個孩子包含的元素的值域分劃。
結構
每次深度加1就會進行一次磁盤IO的查詢,將當前高度的數據加到內存中,再進行數值比較。從中可以看出相比大部分的查詢時間是花費在磁盤IO的速度上,所以要想提高性能就是將樹的高度足夠低,IO次數足夠少,這就是B樹的優勢。
B樹可以直接得到內部節點的值
應用:
主要用於文件系統以及部分數據庫索引(MongoDB) 而Mysql是用B+樹的。
B+樹
特性
- 有k個子樹的中間節點包含有k個元素(B樹中是k-1個元素),每個元素不保存數據,只用來索引,所有數據都保存在葉子節點。
- 所有的葉子結點中包含了全部元素的信息,及指向含這些元素記錄的指針,且葉子結點本身依關鍵字的大小自小而大順序鏈接。
- 所有的中間節點元素都同時存在於子節點,在子節點元素中是最大(或最小)元素。
數據結構
應用:
mysql索引 磁盤
紅黑樹
特性
- 每個結點要麼是紅的,要麼是黑的。
- 根結點是黑的。
- 每個葉結點(葉結點即指樹尾端NIL指針或NULL結點)是黑的。
- 如果一個結點是紅的,那麼它的倆個兒子都是黑的。
- 對於任一結點而言,其到葉結點樹尾端NIL指針的每一條路徑都包含相同數目的黑結點
數據結構
應用:
內部排序,全部放在內存中的,比如HashMap
紅黑樹解決的問題,它可以在O(log n)時間複雜度內實現查找,插入和刪除,任何不平衡都會在三次旋轉內解決。
設計紅黑樹就是爲了解決平衡樹維護麻煩的問題
相關問題
B樹跟B+樹比較
B+樹相比B樹擁有更小的磁盤代價,讀寫代價更低(因爲同樣的數據量,B+樹比B樹高度低,因爲B+樹非葉子節點不保存數據),B+樹的查詢關鍵字的路徑相等,即從根節點到葉子節點的路徑,即每個數據的查詢效率相等且穩定。
B樹的查找可能比B+樹更加快點,因爲B樹的數據值都在對應的節點上,可能會比B+樹更快的返回。但是如果要去連續的一段值的話,B+樹更加的合適。符合空間局部性。