B樹與B+樹以及紅黑樹


1、B樹與B+樹

(1)B樹與B+樹的區別

  1)B+樹中只有葉子節點會帶有指向記錄的指針;而B樹則所有節點都帶有,在內部節點出現的索引項不會再出現在葉子節點中。

  2)B+樹中所有葉子節點都是通過指針連接在一起,而B樹不會。

(2)B樹與B+樹的優缺點

  1)B樹優點:由於B樹的每一個節點都包含key和value,因此經常訪問的元素可能離根節點更近,因此訪問也更迅速。

   a、因為磁盤查找存取的次數往往由樹的高度所決定,磁盤IO是非常耗時的操作,計算機操作系統對此做了優化:預讀;每一次IO時,不僅僅把當前磁盤地址的數據加載到內存,同時也把相鄰數據也加載到內存緩沖區中。因為局部預讀原理說明:當訪問一個地址數據的時候,與其相鄰的數據很快也會被訪問到。每次磁盤IO讀取的數據我們稱之為一頁(page)。一頁的大小與操作系統有關,一般為4k或者8k。這也就意味着讀取一頁內數據的時候,實際上發生了一次磁盤IO。

  2)B+樹優點:

   a、非葉子節點不會帶上指向記錄的指針,這樣,一個塊中可以容納更多的索引項,一是可以降低樹的高度。二是一個內部節點可以定位更多的葉子節點。

   b、B+樹的葉子結點都是相鏈的,因此對整棵樹的便利只需要一次線性遍歷葉子結點即可。而且由於數據順序排列並且相連,所以便於區間查找和搜索。而B樹則需要進行每一層的遞歸遍歷。相鄰的元素可能在內存中不相鄰,所以緩存命中性沒有B+樹好。

   c、在B+樹上增加了順序訪問指針,也就是每個葉子節點增加一個指向相鄰葉子節點的指針;另外一般來說,索引很大的話往往會以索引文件的形式存儲的磁盤上,索引查找時產生磁盤I/O消耗相對於內存存取更加耗時,所以評價一個數據結構作為索引的優劣最重要的指標就是在查找過程中磁盤I/O操作次數的時間復雜度。樹高度越小,I/O次數越少。因為B+樹內節點不存儲data,這樣一個節點就可以存儲更多的key。

2、紅黑樹與B+樹的區別:

(1)紅黑樹用在內部排序,即全放在內存中的,map和set的內部實現就是紅黑樹;B+樹多用於外存上時,B+被稱為一個磁盤友好的數據結構。

(2)紅黑樹的思想

  1)設計紅黑樹目的:主要針對於平衡二叉樹的維護問題,紅黑樹讀取略遜於AVL,維護強於AVL,每次插入和刪除的平均旋轉次數應該是遠小於平衡樹。所以自平衡的二叉查找樹,在進行插入和刪除等可能會破壞樹的平衡的操作時,需要重新自處理達到平衡狀態。

  2)紅黑樹不是一個完美平衡二叉查找樹,根結點的左子樹與右子樹的層數差可以大於1,但左子樹和右子樹的黑結點的層數是相等的,紅黑樹叫黑色完美平衡樹。

              

  3)紅黑樹的特點:

   a、每個節點要么是黑色,要么是紅色(節點非紅即黑)

   b、根節點是黑色.

   c、每一個葉子節點是黑色

   d、如果一個節點是紅色,則它的子節點必須是黑色的.(也就是說父子節點不能同時為紅色)

   e、從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點。

  4)紅黑樹能自平衡的操作:局部的左旋、右旋和變色。紅黑樹總是通過旋轉和變色達到自平衡。

   a、左旋:以某個結點作為支點(旋轉結點),其右子結點變為旋轉結點的父結點,右子結點的左子結點變為旋轉結點的右子結點,左子結點保持不變

   b、右旋:以某個結點作為支點(旋轉結點),其左子結點變為旋轉結點的父結點,左子結點的右子結點變為旋轉結點的左子結點,右子結點保持不變。

   c、變色:結點的顏色由紅變黑或由黑變紅。

  5)紅黑樹的查找:查找不會破壞樹的平衡,所以查找跟二叉排序樹的查找無異。

   a、從根結點開始查找,把根結點設置為當前結點;若當前結點為空,返回null;

   b、若當前結點不為空,用當前結點的key跟查找key作比較;

   c、若當前結點key等於查找key,那么該key就是查找目標,返回當前結點;

   d、若當前結點key大於查找key,把當前結點的左子結點設置為當前結點,重復步驟2;

   e、若當前結點key小於查找key,把當前結點的右子結點設置為當前結點,重復步驟2;

  6)紅黑樹的插入:插入操作包括兩部分工作:一查找插入的位置;二插入后自平衡。查找插入的父結點很簡單,跟查找操作區別不大;

   a、插入結點是紅色時,把插入結點放到正確的位置即可

   b、如果插入結點是黑色,那么插入位置所在的子樹黑色結點總是多1,必須做自平衡。

      

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM