數據結構與算法(八)BTree B+Tree

簡介

B 樹是爲了磁盤或其它存儲設備而設計的一種多叉平衡查找樹。(相對於二叉,B樹每個內結點有多個分支,即多叉)
B樹又可以寫成B-樹

 

B-Tree

特性

M階BTree幾個特性(m>=2)
1、節點最多含有m個子樹(指針),m-1個關鍵字
2、除根節點和葉子節點外,其他每個結點至少有ceil(m/2)個子節點,ceil爲向上取整
3、若根節點不是葉子節點,則至少有兩顆子樹

 

3階B-tree

P1 P2 P3爲指針  17 15爲關鍵字

 

B-樹的搜索

從根結點開始,對結點內的關鍵字(有序)序列進行二分查找,如果命中則結束,否則進入查詢關鍵字所屬範圍的兒子結點;重複,直到所對應的兒子指針爲空,或已經是葉子結點

B-樹的插入

生成從空樹開始,逐個插入關鍵字。但是由於B_樹節點關鍵字必須大於等於[ceil(m/2)-1],(其中ceil(x)是一個取上限的函數)所以每次插入一個關鍵字;首先在最底層(葉子節點那一層)的某個非終端節點中添加一個“關鍵字”,該結點的關鍵字不超過m-1,則插入完成;否則要產生結點的“分裂”,將一半數量的關鍵字分裂到新的其相鄰右結點中,中間關鍵字上移到父結點中。

B-樹的刪除

首先查找B樹中需刪除的關鍵字,如果該關鍵字在B樹中存在,則將該關鍵字在其結點中進行刪除,如果刪除該關鍵字後,首先判斷其結點是否有左右孩子結點,如果有,則上移孩子結點中的某相近關鍵字到父節點中,然後是判斷移動之後的情況;如果沒有,直接刪除後,判斷刪除之後的情況。

 

B+Tree

特性

1、每個節點最多有m個子節點
2、除根節點外,每個節點至少有m/2個子節點,注意如果結果除不盡就向上取整
3、根節點要麼爲空要麼獨根,否則至少有兩個子節點
4、存在k個子節點的節點必有k個關鍵字
5、葉節點高度一致

 

3階B+tree

B+Tree和BTree的區別在於

B+Tree非葉子結點的子樹指針與關鍵字個數相同,BTree關鍵字比指針小1
B+Tree非葉子結點的子樹指針p1->k1,k2 | p2->k2,k3 | p3->k3,∞,BTree指針p1->-∞,k1 | p2->k1,k2 | p3->k2,∞
B+Tree所有的數據存儲在葉子節點,非葉子節點存索引,BTree數據存在所有節點
B+Tree葉子節點直接存在雙向鏈表,可以雙向查找數據

 

二叉查找樹\紅黑樹\BTree\B+Tree總結

二叉查找樹:二叉搜索樹:優點查找快,但是某種情況下會退化成鏈表,所有高效查找數的基礎

紅黑樹:內存查找高效樹,不適合大數據和磁盤存儲,適合底層系統做內存運算

BTree可以認爲是B+Treed過渡

B+Tree最適合大數據的磁盤索引,經典的mysql索引,所有數據都存在葉子節點,增加系統的穩定性以及遍歷查找效率

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章