標籤:
紅/黑樹狀結構, 是一顆有特殊性質的二叉尋找樹,
節點,要麼紅要麼黑
根節點是黑的
分葉節點是黑的
如果一個節點是紅的,那麼它的兩個兒子是黑的
對任意節點而言,其道分葉節點樹尾端NIL指標的每條路徑都包含相同資料的黑節點
在插入或刪除節點時,可能會改變紅/黑樹狀結構的性質,需要調整使得繼續保持性質,常用的操作為左旋和右旋
紅/黑樹狀結構的左旋和右旋:
左旋pivot:
以pivot-Y為軸,Y稱為新的根節點,Y的左子樹稱為pivot的右子樹
右旋pivot:
以pivot-Y為軸,Y稱為新根,pivot為Y的新右子樹
B-樹(B樹)
用階定義的B樹
B 樹又叫平衡多路尋找樹。一棵m階的B 樹 (註:切勿簡單的認為一棵m階的B樹是m叉樹,雖然存在四叉樹,八叉樹,KD樹,及vp/R樹/R*樹/R+樹/X樹/M樹/線段樹/希爾伯特R樹/優先R樹等空間劃分樹,但與B樹完全不等同)的特性如下:
樹中每個結點最多含有m個孩子(m>=2);
除根結點和葉子結點外,其它每個結點至少有[ceil(m / 2)]個孩子(其中ceil(x)是一個取上限的函數);
若根結點不是葉子結點,則至少有2個孩子(特殊情況:沒有孩子的根結點,即根結點為葉子結點,整棵樹只有一個根節點);
所有葉子結點都出現在同一層,葉子結點不包含任何關鍵字資訊(可以看做是外部接點或查詢失敗的接點,實際上這些結點不存在,指向這些結點的指標都為null);(讀者反饋@冷嶽:這裡有錯,葉子節點只是沒有孩子和指向孩子的指標,這些節點也存在,也有元素。@研究者July:其實,關鍵是把什麼當做葉子結點,因為如紅/黑樹狀結構中,每一個NULL指標即當做葉子結點,只是沒畫出來而已)。
每個非終端結點中包含有n個關鍵字資訊: (n,P0,K1,P1,K2,P2,......,Kn,Pn)。其中:
a) Ki(i=1...n)為關鍵字,且關鍵字按順序升序排序K(i-1)< Ki。
b) Pi為指向子樹根的接點,且指標P(i-1)指向子樹種所有結點的關鍵字均小於Ki,但都大於K(i-1)。
c) 關鍵字的個數n必須滿足: [ceil(m /2)-1]<= n <= m-1。
B+樹:B樹的一個變種
m階B+樹與B樹的異同:
n顆子樹的節點中含有n-1個關鍵字
所有的關鍵字資訊都在葉子節點上
非終端節點可以看成是索引
葉子節點從小到大順序連結
為什麼B+樹比B樹更適合作為作業系統中檔案索引和資料庫索引:
1.B+樹的磁碟讀寫代價更低
內部節點更小,在相同的盤塊中,可以存放的內部節點更多,一次性讀入記憶體中的需要尋找的關鍵字也越多。
B樹的每個節點都是以key_address的形式儲存的,而B+樹的非葉子節點只需要儲存key,address資訊可以放在葉子節點上。所以在搜尋的時候,一次讀入的資料區塊能包含更多的節點,提高檢索效率
2.查詢效率更穩定
每次查詢都需要從根節點到葉子節點
3.葉子節點從左至右連結,根據局部性原理,方便載入左右資料
紅/黑樹狀結構 B-樹 B+樹 資料庫索引