B 樹以及B+樹和B*樹

對B樹概念介紹

B樹說白了就是一個結點有多個子結點。
本文介紹的數據結構英文是B-tree,中文寫作B-樹,其中 – 並不是減號,而是連接符,讀作B樹。

B-樹是一種平衡搜索樹,但它的每個結點包含的元素可以多於2個,因此並不是嚴格意義上的二叉樹。
相比與二叉樹,B樹顯得更矮,更胖。它的每個結點包含多個數據,這特別適合於對外存的訪問。由於硬盤等設備訪問速度和內存相比非常慢,而從硬盤讀取1個數據和讀取10個數據用時幾乎一樣,這非常適合使用B-樹這種結構。每個結點數據很多,就可以從磁盤依次取出大量數據,矮的特點可以減少磁盤的IO次數。
B樹與紅黑樹最大的不同在於,B樹的結點可以有許多子女,從幾個到幾千個。那爲什麼又說B樹與紅黑樹很相似呢?因爲與紅黑樹一樣,一棵含n個結點的B樹的高度也爲O(lgn),但可能比一棵紅黑樹的高度小許多,應爲它的分支因子比較大。所以,B樹可以在O(logn)時間內,實現各種如插入(insert),刪除(delete)等動態集合操作。
定義:m階B樹的定義
B-樹的所有葉子結點都位於同一深度,同時對每個結點的分支數也有限制。一個m階B-樹滿足

  1. 每個結點的分支數最多m個,因此每個結點元素個數最多m-1個。

  2. 除根節點外,每個結點的分支樹最少 ⌈m/2⌉ 個(向上取整)。根節點例外,根節點可以只有2個分支。
    這樣,m階B-樹也可以叫做 (⌈m/2⌉ , m) -樹 。
    定義:以最小度爲定義B樹
    我們可以爲每棵B樹規定一個最小度數(樹的孩子結點數):T(最大度數爲2T),那麼每個結點所包含的關鍵字個數的範圍:T-1 ~2T-1, 所包含的孩子結點個數爲T ~ 2T。當結點關鍵字個數爲2T - 1時,該結點滿。(根結點至少包含1個關鍵數,而其他結點至少包含T - 1個關鍵字。

B樹高度

以最小度來求:(注意下面的h是從0計算的,假設h最大可取到3,也就是0,1,2,3相當於4層)
h<=logt((n+1)/2)

t: 最小的度
n:總的關鍵字個數
h:深度範圍

以階數來求:
曾在一次面試中被問到,一棵含有N個總關鍵字數的m階的B樹的最大高度是多少?答曰:log_ceil(m/2)(N+1)/2 + 1 (上面中關於m階B樹的第1點特性已經提到:樹中每個結點含有最多含有m個孩子,即m滿足:ceil(m/2)<=m<=m。

注意:這裏求得高度是以1位開始的,即(1,2,3,4…)

參照:http://ju.outofmemory.cn/entry/234025
http://blog.csdn.net/v_JULY_v/article/details/6530142/

B樹插入刪除

(未完待續)

發佈了159 篇原創文章 · 獲贊 481 · 訪問量 41萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章