天天看點

【資料結構與算法】B樹,B+樹,B*樹是什麼,有什麼差別呢?

B樹,B+樹,B樹是多叉樹,出現B樹,B+樹,B樹是因為在資料量很大很大的情況下,二叉樹如果節點很多,在建構二叉樹時會進行多次i/o操作,速度有影響,節點多,二叉樹也會很高,這樣會降低操作速度。而多叉樹每個節點存放多個資料,這樣會減少樹的高度,能對二叉樹進行優化。

還有B樹,B+樹,B*樹是建立在二叉排序樹的基礎上的,二叉排序樹是左子節點比父節點小,右子節點比父節點大。

B樹

B-tree樹即B樹,有人把B-tree翻譯成B-樹,容易讓人産生誤解。會以為B-樹是一種樹,而B樹又是另一種樹。實際上,B-tree就是指的B樹

【資料結構與算法】B樹,B+樹,B*樹是什麼,有什麼差別呢?

(1)B樹的階:節點的最多子節點個數。比如2-3樹的階是3,2-3-4樹的階是4

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

(3)關鍵字集合分布在整顆樹中, 即葉子節點和非葉子節點都存放資料.

(4)搜尋有可能在非葉子結點結束

(5)其搜尋性能等價于在關鍵字全集内做一次二分查找

B+樹

B+樹是B樹的變體,也是一種多路搜尋樹

【資料結構與算法】B樹,B+樹,B*樹是什麼,有什麼差別呢?

(1)B+樹的搜尋與B樹也基本相同,差別是B+樹隻有達到葉子結點才命中(B樹可以在非葉子結點命中),其性能也等價于在關鍵字全集做一次二分查找

(2)所有關鍵字都出現在葉子結點的連結清單中(即資料隻能在葉子節點【也叫稠密索引】),且連結清單中的關鍵字(資料)恰好是有序的。

(3)不可能在非葉子結點命中

(4)非葉子結點相當于是葉子結點的索引(稀疏索引),葉子結點相當于是存儲(關鍵字)資料的資料層

(5)更适合檔案索引系統

(6)B樹和B+樹各有自己的應用場景,不能說B+樹完全比B樹好,反之亦然

B*樹

B*樹是B+樹的變體,在B+樹的非根和非葉子結點再增加指向兄弟的指針

【資料結構與算法】B樹,B+樹,B*樹是什麼,有什麼差別呢?

(1)B*樹定義了非葉子結點關鍵字個數至少為(2/3)*M,即塊的最低使用率為2/3,而B+樹的塊的最低使用率為B+樹的1/2。

(2)B*樹配置設定新結點的機率比B+樹要低,空間使用率更高