1. 程式人生 > >B樹,B+樹,B*樹 演算法

B樹,B+樹,B*樹 演算法

總結

B樹:

是為了磁碟或其它儲存裝置而設計的一種多叉平衡查詢樹

B和B+樹的區別:

B樹在提高了磁碟IO效能的同時並沒有解決元素遍歷的效率低下的問題。正是為了解決這個問題,B+樹應運而生。B+樹只要遍歷葉子節點就可以實現整棵樹的遍歷。而且在資料庫中基於範圍的查詢是非常頻繁的,而B樹不支援這樣的操作(或者說效率太低)。
B+樹的非葉子結點只包含導航資訊,不包含實際的值,所有的葉子結點和相連的節點使用連結串列相連,便於區間查詢和遍歷。

B+與B*樹的區別:

B*樹中非根和非葉子結點再增加指向兄弟的指標

前言

咱們有面對這樣一個實際問題:就是大規模資料儲存中,實現索引查詢這樣一個實際背景下

,樹節點儲存的元素數量是有限的(如果元素數量非常多的話,查詢就退化成節點內部的線性查找了),這樣導致二叉查詢樹結構由於樹的深度過大而造成磁碟I/O讀寫過於頻繁,進而導致查詢效率低下(為什麼會出現這種情況,待會在外部儲存器-磁碟中有所解釋),那麼如何減少樹的深度(當然是不能減少查詢的資料量),一個基本的想法就是:採用多叉樹結構(由於樹節點元素數量是有限的,自然該節點的子樹數量也就是有限的)。降低樹的深度自然會提高查詢效率。

B樹

介紹

B樹是為了磁碟或其它儲存裝置而設計的一種多叉平衡查詢樹
B樹與紅黑樹最大的不同在於,B樹的結點可以有許多子女,從幾個到幾千個。因為與紅黑樹一樣,一棵含n個結點的B樹的高度也為O(lgn),但可能比一棵紅黑樹的高度小許多

,應為它的分支因子比較大。

2B樹(4B樹類似)

這裡寫圖片描述

插入動畫

這裡寫圖片描述

B+樹

介紹

(1)非葉結點僅具有索引作用,跟記錄有關的資訊均存放在葉結點中。
(2)所有的葉子結點中包含了全部關鍵字的資訊。
(3)樹的所有葉結點構成一個有序連結串列,可以按照關鍵碼排序的次序遍歷全部記錄。

這裡寫圖片描述

插入動畫

這裡寫圖片描述

B*樹

介紹

在B+樹的基礎上(所有的葉子結點中包含了全部關鍵字的資訊,及指向含有這些關鍵字記錄的指標),B*樹中非根和非葉子結點再增加指向兄弟的指標;

這裡寫圖片描述