B Tree外存資料結構 (B 樹)第二部分

2022-07-02 11:42:10 字數 3966 閱讀 5895

2. b

b 樹是為了磁碟或其它儲存裝置而設計的一種多叉(相對於二叉,b樹每個內結點有多個分支,即多叉)平衡查詢樹

一棵b樹,一棵關鍵字為英語中子音字母的b樹,現在要從樹中查詢字母r(包含n[x]個關鍵字的內結點x,x有n[x]+1個子女(乙個內結點x若含有n[x]個關鍵字,那麼x將含有n[x]+1個子女),所有的葉結點都處於相同的深度,帶陰影的結點為查詢字母r時要檢查的結點):

從上圖輕易的看到,乙個內結點x若含有n[x]個關鍵字,那麼x將含有n[x]+1個子女;如含有2個關鍵字d h的內結點有3個子女,而含有3個關鍵字q t x的內結點有4個子女。

2.1用階定義的b樹

b 樹又叫平衡多路查詢樹。一棵m階的b 樹 (注:切勿簡單的認為一棵m階的b樹是m叉樹,雖然存在四叉樹,八叉樹,kd樹,及vp/r樹/r*樹/r+樹/x樹/m樹/線段樹/希爾伯特r樹/優先r樹等空間劃分樹,但與b樹完全不等同)的特性如下:

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

除根結點和葉子結點外,其它每個結點至少有[ceil(m / 2)]個孩子(其中ceil(x)是乙個取上限的函式);

若根結點不是葉子結點,則至少有2個孩子(特殊情況:沒有孩子的根結點,即根結點為葉子結點,整棵樹只有乙個根節點);

所有葉子結點都出現在同一層,葉子結點沒有孩子和指向孩子的指標,含有關鍵字資訊(可以看做是外部結點或查詢失敗的結點,實際上這些結點不存在,指向這些結點的指標都為null);

每個非終端結點中包含有n個關鍵字資訊: (n,p0,k1,p1,k2,p2,......,kn,pn)。其中:

a)   ki (i=1...n)為關鍵字,且關鍵字按順序公升序排序ki-1

<

ki。 

b)  

pi為指向子樹根的結點,且指標pi-1指向子樹中所有結點的關鍵字均小於ki,但都大於ki-1。 

c)  

關鍵字的個數n必須滿足: [ceil(m /

2)-1]<= n <= m-1。如下圖所示:

b樹中每乙個結點能包含的關鍵字(如前面的d h和q t x)數有乙個上界和下界,這個下界可以用乙個稱作b樹的最小度數(演算法導論中文版上譯為度數,最小度數即內結點中結點最小孩子數目)m(m>=2)表示。

2.2用度定義的b樹

l  每個非根的內結點至多有m個子女,每個非根的結點必須至少含有m-1個關鍵字,如果樹是非空的,則根結點至少包含乙個關鍵字;

l  每個結點可包含至多2m-1個關鍵字。所以乙個內結點至多可有2m個子女。如果乙個結點恰好有2m-1個關鍵字,我們就說這個結點是滿的(b樹要求至少半滿);

l  當關鍵字數m=2(t=2的意思是,mmin=2,m可以》=2)時的b樹是最簡單的(因此易誤認為b樹就是二叉查詢樹,但二叉查詢樹就是二叉查詢樹,b樹就是b樹,b樹是一棵含有m(m>=2)個關鍵字的平衡多路查詢樹),此時,每個內結點可能因此而含有2個、3個或4個子女,亦即一棵2-3-4樹,然而在實際中,通常採用大得多的t值。

b樹中的每個結點根據實際情況可以包含大量的關鍵字資訊和分支(當然不能超過磁碟塊的大小,根據磁碟驅動(disk drives)的不同,一般塊的大小在1k~4k左右);這樣樹的深度降低了,這就意味著查詢乙個元素只要很少結點從外存磁碟中讀入記憶體,很快訪問到要查詢的資料。

2.3 b樹的型別和節點定義

b樹的型別和節點定義如下圖所示:

2.4檔案查詢的具體過程(涉及磁碟io操作)

為了簡單,用少量資料構造一棵3叉樹的形式,實際應用中的b樹結點中關鍵字很多。上面的圖中比如根結點,其中17表示乙個磁碟檔案的檔名小紅方塊表示這個17檔案內容在硬碟中的儲存位置;p1表示指向17左子樹的指標

其結構可以簡單定義為:

typedef struct btnode;

假如每個盤塊可以正好存放乙個b樹的結點(正好存放2個檔名)。那麼乙個btnode結點就代表乙個盤塊,而子樹指標就是存放另外乙個盤塊的位址。

模擬下查詢檔案29的過程:

根據根結點指標找到檔案目錄的根磁碟塊1,將其中的資訊匯入記憶體。【磁碟io操作 1次】    

根據p2指標,我們定位到磁碟塊3,並將其中的資訊匯入記憶體。【磁碟io操作 2次】    

根據p2指標,我們定位到磁碟塊8,並將其中的資訊匯入記憶體。【磁碟io操作 3次】    

此時記憶體中有兩個檔名28,29。根據演算法我們查詢到檔名29,並定位了該檔案記憶體的磁碟位址。

分析上面的過程,發現需要3次磁碟io操作和3次記憶體查詢操作,關於記憶體中的檔名查詢,由於是乙個有序表結構,可以利用折半查詢提高效率,至於io操作是影響整個b樹查詢效率的決定因素。

當然,如果使用平衡二叉樹的磁碟儲存結構來進行查詢,磁碟4次,最多5次,而且檔案越多,b樹比平衡二叉樹所用的磁碟io操作次數將越少,效率也越高。

2.5 b樹的高度

根據上面的例子可以看出,對於輔存做io讀的次數取決於b樹的高度,而b樹的高度由什麼決定的呢?

若b樹某一非葉子結點包含n個關鍵字,則此非葉子結點含有n+1個孩子結點,而所有的葉子結點都在第i層,可以得出:

因為根至少有兩個孩子,因此第2層至少有兩個結點。

除根和葉子外,其它結點至少有┌m/2┐個孩子,

因此在第3層至少有2*┌m/2┐個結點,

在第4層至少有2*(┌m/2┐^2)個結點,

在第 i 層至少有2*(┌m/2┐^(l-2)

)個結點,於是有:n+1 ≥ 2*┌m/2┐i-2;

考慮第l層的結點個數為n+1,那麼2*(┌m/2┐^(l-2))≤n+1,也就是l層的最少結點數剛好達到n+1個,即:

i≤ log┌m/2┐((n+1)/2 )+2;

所以這個b樹的高度公式從側面顯示了b樹的查詢效率是相當高的。

問題:一棵含有n個總關鍵字數的m階的b樹的最大高度是多少?

答:log_ceil(m/2)(n+1)/2 + 1 (上面中關於m階b樹的第1點特性已經提到:樹中每個結點含有最多含有m個孩子,即m滿足:ceil(m/2)<=m<=m。而樹中每個結點含孩子數越少,樹的高度則越大,故如此)。

資料結構 B樹(B Tree)

b樹是乙個平衡的多路搜尋樹,每個節點可以儲存多個元素。對於m階b樹 m 2m 2 m 2 設其任意節點儲存元素的個數為x,那麼 舉些例子 當m 2時,非根節點子節點個數 1 y 21 leq y leq 2 1 y 2,故稱為 1,2 樹,就是二叉搜尋樹。當m 3時,非根節點子節點個數 2 y 32...

b tree資料結構視覺化 資料結構之B 樹

title 資料結構之b 樹 date 2018 11 04 20 39 00 tags 資料結構與演算法之美 一 b 樹索引 1.b 樹的特性 一棵m階b 樹,或者是空樹,或者是滿足以下性質的m叉樹 根結點至少有兩個分支 除根以外的非葉結點,每個結點包含分支數範圍 m 2 m 即關鍵字字數的範圍是...

資料結構 B樹,B 樹

注意b 樹就是b樹,只是乙個符號.簡介b b 樹是為了磁碟或其它儲存裝置而設計的一種平衡多路查詢樹 相對於二叉,b樹每個內節點有多個分支 與紅黑樹相比,在相同的的節點的情況下,一顆b b 樹的高度遠遠小於紅黑樹的高度 在下面b b 樹的效能分析中會提到 b b 樹上操作的時間通常由訪問磁碟的時間和c...