B TREE 自平衡樹

2022-02-18 17:35:22 字數 1947 閱讀 5999

b-tree+ 是在b-tree 的基礎上建立起來的,所以,非常概念有必要先看看b-tree!

b-tree是為磁碟等輔助訪問裝置設計的一種平衡查詢樹,它實現了以o(log n) 時間複雜度執行查詢、順序讀取、插入和刪除操作。由於 b 樹和 b 樹的變種在降低磁碟 i/o 操作次數方面表現優異,所以經常用於設計檔案系統和資料庫。

目錄:

如圖一顆鍵值為英語字母的b樹,帶淺色陰影的節點是查詢r時候要檢查的節點(可以理解成路徑)

b 樹內的節點關係

b 樹中的節點分為內部節點(internal node) 和葉子節點(leaf node)

內部節點也可以稱為非葉子節點。

b 樹的內部節點可以包含 2 個以上的子節點,所以在設計時可以預先設定可包含子節點的數量範圍,也就是上界(upper bound)下界

(lower bound)。當向節點插入或刪除資料時,也就意味著子節點的數量發生變化。為了維持在預先設定的數量範圍,內部節點可能會被合併(join)拆分(split)

因為子節點的數量有一定的範圍,所以 b 樹不需要頻繁地變化以保持平衡。但同時,由於節點可能沒有被完全填充,所以會浪費一些空間。 

b 樹中每乙個內部節點會包含一定數量的鍵值(key)。這些鍵值同時也扮演著分割子節點的角色。例如,假設某內部節點包含 3 個子節點,則實際上必須有 2 個鍵值:a1 和 a2。其中,a1 的左子樹上的所有的值都要小於 a1,在 a1 和 a2 之間的子樹中的值都大於 a1 並小於 a2,a2 的右子樹上的所有的值都大於 a2。

通常,鍵值的數量被設定在 d 和 2d 之間,其中 d 是可包含鍵值的最小數量。可知,d + 1 是節點可擁有子節點的最小數量,也就是樹的最小的度(degree)。因數 2 將確保節點可以被合併或拆分。

如果乙個內部節點有 2d 個鍵值,那麼新增乙個鍵值給該節點將會導致 2d + 1 的數量大於範圍上界,則會拆分 2d + 1 數量的節點為 2 個 d 數量的節點,並有 1 個鍵值提公升至父節點中。

類似地,如果乙個內部節點和它的鄰居節點(neighbor)都包含 d 個鍵值,那麼刪除乙個鍵值將導致此節點擁有 d – 1 個鍵值,小於範圍下界,則會導致與鄰居節點合併。合併後的節點包括 d – 1 的數量加上鄰居的 d 的數量和兩者的父節點中的 1 個鍵值,共為 d – 1 + d + 1 = 2d 數量的節點。

ps:上面這段有點繞口,你只需記住,為了維持事先設定好的值,存在拆分內部節點和合併內部節點的情況。

深度(depth)描述樹中層(level)的數量。b 樹通過要求所有葉節點保持在相同深度來保持樹的平衡。深度通常會隨著鍵值的不斷新增而緩慢地增長。

b+ 樹的優勢

b+ 是b樹的乙個變種,在內部節點中儲存的鍵值同樣也會出現在葉子節點中,但內部節點中不會儲存關聯附屬的資料和指標,在葉子節點中不僅儲存鍵值,

還會儲存關聯附屬資料或指標,這樣,所有的附屬資料都能儲存在葉子節點中,只將鍵值和子女指標儲存在內節點中,因此最大化了內節點的分之能力。此外,

葉節點還增加了乙個指向下乙個順序關聯的葉子節點的指標,以改進順序讀取的速度。

常見的檔案系統和資料庫均使用 b+ 樹實現,例如:

to be continuted....

優勢在於:

讀取一頁時可以獲取更多的鍵值資訊,

葉節點形成乙個鏈狀,所以隨樹的全掃瞄就對所有葉子節點的線性遍歷。

對這一節知識的理解,將大大有助於我們對資料庫中索引的使用

B樹(B tree, 平衡的多路查詢樹)的相關知識

目錄 多路搜尋樹 b樹 b 樹 首先,介紹一下2 3樹,指的是其中每乙個節點2結點 有兩個孩子或者3結點 三個孩子或者沒有孩子,2節點指的是該節點有乙個元素和兩個孩子or沒有孩子,3節點指的是該節點有兩個元素 一大一小 和三個孩子or沒有孩子。特點是所有葉子節點都在同一層,插入和刪除節點都必須保證順...

紅黑樹 自平衡二叉查詢樹

簡介 紅黑樹是一種特定型別的二叉樹,所有資料塊都儲存在節點中。這些節點中的某乙個節點總是擔當起始位置的功能,它不是任何節點的兒子,我們稱之為根節點或根。它有最多兩個 兒子 都是它連線到的其他節點。如果乙個節點沒有兒子,我們稱之為葉子節點,因為在直覺上它是在樹的邊緣上。子樹是從特定節點可以延伸到的樹的...

多路查詢樹 B Tree

普通樹,乙個節點只能儲存乙個元素,在元素非常多的時候,就使得要麼樹的度非常大,要麼樹的高度非常大,甚至兩者都必須足夠大才行。顯然,訪問的時候使得記憶體訪問次數非常多,是時間效率上的瓶頸。多路查詢樹 multi way search trees 其每乙個節點的孩子數可以多於兩個,且每乙個節點處可以儲存...