從B樹到B 樹

2021-07-22 03:51:27 字數 1563 閱讀 3233

最近在看作業系統和資料庫系統,當涉及到查詢檔案和建立資料庫索引時書中反覆提到使用b+ 樹可以實現高效的查詢,於是我迫不及待地想研究一下b+ 樹的內部結構。

首先從二叉查詢樹開始講起。

二叉搜尋樹(binarysearch tree),別名又叫二叉查詢樹,二叉排序樹。它是一棵空樹或者是滿足以下條件的二叉樹:它的左子樹不空,則左子樹上所有的結點的值均小於它的根節點的值;若它的右子樹不空,則右子樹上所有節點的值均大於它的根節點的值。並且它的左右子樹也稱為二叉排序樹。

典型的二叉查詢樹有平衡二叉查詢樹,紅黑樹,查詢的時間複雜度為o(log2n

)。 但是為了有效避免磁碟過於頻繁的查詢訪問操作,我們需要使樹具有較低的高度,從而引入了b樹。

注意:b樹和b-樹是同一種樹,只不過英語中b-tree被中國人翻譯成了b-樹,讓人覺得它們是兩種不同的樹,實際上,兩者就是同一種樹。

b樹是一種為了提高磁碟或者其他儲存裝置而設計的一種多叉(有多個分支)平衡查詢樹。這裡分支結點的個數不限,這樣就使得樹的高度要比紅黑樹小很多。b樹有乙個特點:所有的葉節點都處於相同的深度。

下面給出一棵m階b樹的定義(用階來定義比較經典):

1.      樹中每個結點最多含有m個孩子(m>=2);

2.      除根節點外,其他結點至少含有ceil(m/2)個孩子(向上取整);

3.      根節點至少有兩棵子樹(除非b樹只包含乙個結點)。

4.      所有葉節點在同一層上。b樹的葉節點看做外部結點,不包含任何資訊。

5.      有j個孩子的非葉節點恰好有j-1個關鍵碼,關鍵碼按遞增次序排列。

比如說,查詢檔案28,首先看模組1,發現17<28<35,然後看p2指標,看模組3,發現26<28<30,檢視指標p2,檢視磁碟塊8,然後成功找到檔案28。

我們知道對於在外存中查詢檔案來說,查詢效率取決於

b樹的高度。下面給出以下規律:對於一棵含有

n個總關鍵字的m階

b樹的最大高度為

log┌m/2┐((n+1)/2)+1 (以1

開始計數)。

[證明參見演算法導論

]

下面講b+樹,

b+樹是為檔案系統所需而產生的一種

b樹的變形樹。

問:b樹和b+樹的不同之處?

b樹所有結點都出現在同一層,葉子結點不包含任何關鍵字資訊。

但是b+樹所有的葉子結點中包含了全部關鍵字的資訊,及指向含有這些關鍵字記錄的指標,且葉子結點本身按照關鍵字的大小自小而大的順序鏈結。因為任何關鍵字的查詢必須走一條從根結點到葉子結點的路,所以所有關鍵字的查詢路徑長度相同,使得b+樹的查詢效率更加穩定。

另外,在資料庫系統中,頻繁的操作是元素的遍歷,因為

b+樹只要遍歷葉子結點就可以實現整棵樹的遍歷,所以效率遠遠高於b樹。

B樹,B 樹,B 樹,B 樹

小彰的部落格 b樹 即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比結點...

B樹 B 樹 B 樹 B 樹

b 樹即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left 和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比結點關鍵字小,就...

B樹 B 樹 B 樹 B 樹

b樹 即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比結點關鍵字小,就進...