B 樹
B樹與B+樹
一:定義
B樹(B-樹)是一種平衡的多路查找樹。2-3樹和2-3-4樹都是B樹的特例。節點最大的孩子數組稱為B樹的階(order),因此,2-3樹是3階B樹,2-3-4樹是4階B樹。
二:屬性
一棵最小度為t的B樹是滿足如下四個條件的平衡多叉樹:
1.每個節點最多包含2t−1個關鍵字;除根節點外的每個節點至少有t−1個關鍵字(t≤2),根節點至少有一個關鍵字; 2.一個節點u中的關鍵字按非降序排列:u.key1≤u.key2≤…u.keynu.key1≤u.key2≤…u.keyn; 3.每個節點的關鍵字對其子樹的范圍分割。設節點uu有n+1個指針,指向其n+1棵子樹,指針為u.p1,…u.pn,關鍵字ki為u.pi所指的子樹中的關鍵字,有k1≤u.key1≤k2≤u.key2…k1≤u.key1≤k2≤u.key2…成立; 4.所有葉子節點處於同一層次。這表明B樹是平衡的。平衡性其實正是B樹名字的來源,B表示的正是單詞Balanced;
比如說要查找7,首先從外存讀取得到根節點3,5,8三個元素,發現7不在,但是5、8之間,因此就通過A2再讀取外存的6,7節點找到結束。 B樹的插入和刪除和2-3樹、2-3-4樹類似。
三:用途
B樹的數據結構為內外存的數據交互准備的
當要處理的數據很大時,無法一次全部裝入內存。
這時對B樹調整,使得B樹的階數與硬盤存儲的頁面大小相匹配。
比如說一棵B樹的階為1001(即1個節點包含1000個關鍵字),高度為2(從0開始),它可以存儲超過10億個關鍵字(1001x1001x1000+1001x1000+1000),
只要讓根節點持久的保留在內存中,那么在這顆樹上,尋找某一個關鍵字至多需要兩次硬盤的讀取即可。
四:性能
對於n個關鍵字的m階B樹,最壞情況查找次數計算
第一層至少1個節點,第二層至少2個節點,由於除根節點外每個分支節點至少有⌈m/2⌉棵子樹,則第三層至少有2x⌈m/2⌉個節點...
這樣第k+1層至少有2x(⌈m/2⌉)^(k-1),實際上,k+1層的節點就是葉子節點。
若m階B樹有n個關鍵字,那么當你找到葉子節點,其實也就等於查找不成功的節點為n+1,
因此n+1>=2x(⌈m/2⌉)^(k-1),即
在含有n個關鍵字的B樹上查找時,從根節點到關鍵字節點的路徑上涉及的節點數不超多