B-樹,B+樹,B*樹詳解

B-樹

B-樹是一種多路搜索樹(並不必定是二叉的)

1970年,R.Bayer和E.mccreight提出了一種適用於外查找的樹,它是一種平衡的多叉樹,稱爲B樹(或B-樹、B_樹)。html

一棵m階B樹(balanced tree of order m)是一棵平衡的m路搜索樹。它或者是空樹,或者是知足下列性質的樹:

一、根結點至少有兩個子女;數據庫

二、每一個非根節點所包含的關鍵字個數 j 知足:┌m/2┐ - 1 <= j <= m - 1;數據結構

三、除根結點之外的全部結點(不包括葉子結點)的度數正好是關鍵字總數加1,故內部子樹個數 k 知足:┌m/2┐ <= k <= m ;性能

四、全部的葉子結點都位於同一層。操作系統

特色:

是一種多路搜索樹(並非二叉的):.net

1.定義任意非葉子結點最多隻有M個兒子;且M>2;指針

2.根結點的兒子數爲[2, M];htm

3.除根結點之外的非葉子結點的兒子數爲[M/2, M];blog

4.每一個結點存放至少M/2-1(取上整)和至多M-1個關鍵字;(至少2個關鍵字)索引

5.非葉子結點的關鍵字個數=指向兒子的指針個數-1;

6.非葉子結點的關鍵字:K[1], K[2], …, K[M-1];且K[i] < K[i+1];

7.非葉子結點的指針:P[1], P[2], …, P[M];其中P[1]指向關鍵字小於K[1]的

子樹,P[M]指向關鍵字大於K[M-1]的子樹,其它P[i]指向關鍵字屬於(K[i-1], K[i])的子樹;

8.全部葉子結點位於同一層;

如:(M=3)

這裏寫圖片描述

B-樹的搜索,從根結點開始,對結點內的關鍵字(有序)序列進行二分查找,若是

命中則結束,不然進入查詢關鍵字所屬範圍的兒子結點;重複,直到所對應的兒子指針爲

空,或已是葉子結點;

B-樹的特性:

1.關鍵字集合分佈在整顆樹中;

2.任何一個關鍵字出現且只出如今一個結點中;

3.搜索有可能在非葉子結點結束;

4.其搜索性能等價於在關鍵字全集內作一次二分查找;

5.自動層次控制;

B+樹

B+ 樹是一種樹數據結構,是一個n叉樹,每一個節點一般有多個孩子,一棵B+樹包含根節點、內部節點和葉子節點。根節點多是一個葉子節點,也多是一個包含兩個或兩個以上孩子節點的節點。

用途:

B+ 樹一般用於數據庫和操做系統的文件系統中。NTFS, ReiserFS, NSS, XFS, JFS, ReFS 和BFS等文件系統都在使用B+樹做爲元數據索引。B+ 樹的特色是可以保持數據穩定有序,其插入與修改擁有較穩定的對數時間複雜度。B+ 樹元素自底向上插入。

B+樹的定義

B+樹是應文件系統所需而出的一種B-樹的變型樹。一棵m階的B+樹和m階的B-樹的差別在於:

1.有n棵子樹的結點中含有n個關鍵字,每一個關鍵字不保存數據,只用來索引,全部數據都保存在葉子節點。

2.全部的葉子結點中包含了所有關鍵字的信息,及指向含這些關鍵字記錄的指針,且葉子結點自己依關鍵字的大小自小而大順序連接。

3.全部的非終端結點能夠當作是索引部分,結點中僅含其子樹(根結點)中的最大(或最小)關鍵字。 
一般在B+樹上有兩個頭指針,一個指向根結點,一個指向關鍵字最小的葉子結點。

B+樹是B-樹的變體,也是一種多路搜索樹:

1.其定義基本與B-樹同,除了:

2.非葉子結點的子樹指針與關鍵字個數相同;

3.非葉子結點的子樹指針P[i],指向關鍵字值屬於[K[i], K[i+1])的子樹

(B-樹是開區間);

5.爲全部葉子結點增長一個鏈指針;

6.全部關鍵字都在葉子結點出現;

如:(M=3)

這裏寫圖片描述 
B+的搜索與B-樹也基本相同,區別是B+樹只有達到葉子結點才命中(B-樹能夠在

非葉子結點命中),其性能也等價於在關鍵字全集作一次二分查找;

B+的特性:

1.全部關鍵字都出如今葉子結點的鏈表中(稠密索引),且鏈表中的關鍵字剛好

是有序的;

2.不可能在非葉子結點命中;

3.非葉子結點至關因而葉子結點的索引(稀疏索引),葉子結點至關因而存儲

(關鍵字)數據的數據層;

4.更適合文件索引系統;

B*樹:

是B+樹的變體,在B+樹的非根和非葉子結點再增長指向兄弟的指針;

這裏寫圖片描述

B*樹定義了非葉子結點關鍵字個數至少爲(2/3)*M,即塊的最低使用率爲2/3

(代替B+樹的1/2);

B+樹的分裂:當一個結點滿時,分配一個新的結點,並將原結點中1/2的數據

複製到新結點,最後在父結點中增長新結點的指針;B+樹的分裂隻影響原結點和父

結點,而不會影響兄弟結點,因此它不須要指向兄弟的指針;

B*樹的分裂:當一個結點滿時,若是它的下一個兄弟結點未滿,那麼將一部分

數據移到兄弟結點中,再在原結點插入關鍵字,最後修改父結點中兄弟結點的關鍵字

(由於兄弟結點的關鍵字範圍改變了);若是兄弟也滿了,則在原結點與兄弟結點之

間增長新結點,並各複製1/3的數據到新結點,最後在父結點增長新結點的指針;

因此,B*樹分配新結點的機率比B+樹要低,空間使用率更高;

小結:

B-樹:

多路搜索樹,每一個結點存儲M/2到M個關鍵字,非葉子結點存儲指向關鍵

字範圍的子結點;

全部關鍵字在整顆樹中出現,且只出現一次,非葉子結點能夠命中;

B+樹:

在B-樹基礎上,爲葉子結點增長鏈表指針,全部關鍵字都在葉子結點

中出現,非葉子結點做爲葉子結點的索引;B+樹老是到葉子結點才命中;

B*樹:

在B+樹基礎上,爲非葉子結點也增長鏈表指針,將結點的最低利用率

從1/2提升到2/3;

 

參考: 
http://baike.baidu.com/view/2228473.htm 
http://baike.baidu.com/subview/1168762/1168762.htm 
http://www.cnblogs.com/oldhorse/archive/2009/11/16/1604009.html

相關文章
相關標籤/搜索