DF学数据结构系列——B树(B-树和B+树)介绍
B樹
定義:一棵B樹T是具有如下性質的有根樹:
? ? ? ?1)每個節點X有以下域:
? ? ? ? ?a)n[x],當前存儲在X節點中的關鍵字數,
? ? ? ? ?b)n[x]個關鍵字本身,以非降序存放,因此key1[x]<=key2[x]<=...<=keyn[x][x],
? ? ? ? ?c)leaf[x],是一個布爾值,如果x是葉子的話,則它為TRUE,如果x為一個內節點,則為FALSE。
? ? ? ?2)每個內節點包含n[x]+1個指向其子女的指針c1[x],c2[x],...,cn[x]+1[x]。葉節點沒有子女,故它們的ci域無意義。
? ? ? ?3)各關鍵字keyi[x]對存儲在各子樹中的關鍵字范圍加以分隔:如果ki為存儲在以以ci[x]為根的子樹中的關鍵字,則
? ? ? ? ? ? ? ? ? ? ? ? ? ? ki<=key1[x]<=k2<=key2[x]<=...<=keyn[x]<=keyn[x]+1
? ? ? ?4)每個葉結點具有相同的深度,即樹高h。
? ? ? ?5)每一個結點能包含的關鍵字樹有一個上界和下界。這些界可以用一個稱作B樹的最小度數的固定值t>=2表示。
? ? ? ? a)每個非根的結點必須至少有t-1個關鍵字。每個非根的內結點至少有t個子女。如果樹是非空的,則根結點至少包含一個關鍵字。
? ? ? ? b)每個結點可包含最多2t-1個關鍵字,所以一個內結點至多可以有2t個子女。我們說一個結點是滿的,如果它恰好有2t-1個關鍵字。
? ? ? ? ? ? t=2時B樹是最簡單的。這時每個內結點有2個、3個或4個子女,亦即一棵2-3-4樹。然而在實際中,通常采用很大的t。
用途:
? ? ? B樹是為磁盤或其它輔助存儲設備而設計的一種多路平衡查找樹。
? ? ? 為什么針對磁盤設計的數據結構不同于這對隨機存儲器設計的數據結構?
? ? ? B樹以自然的方式推廣二叉查找樹。如果B樹的內結點X包含n[x]個關鍵字,則x就有n[x]+1個子女。結點X中的關鍵字是用來將X所處理的關鍵字域劃分成n[x]+1個子域的分隔點,每個子域都有X中的一個子女來處理。當在一棵B樹中查找某個關鍵字時,通過對存儲在結點X中的n[x]個關鍵字的比較,而做出一個n[x]+1路的決定。葉節點的結構不同于內部結點的結構。
? ? ? ?在一個典型的B樹的應用中,要處理的數據量很大,因此無法一次都裝入主存。B樹算法將所需的頁(“頁”這個概念需要計算機組成原理和操作系統的知識)選擇出來復制到主存中去,而后將修改過的頁再寫回到磁盤中去。因為在任何時刻,B樹算法在主存中都只需要一定量的頁數,故主存的大小并不限制可被處理的B樹的大小。在B樹中,一個結點的大小通常相當于一個完整的磁盤頁。
?
? ? ? 對存儲在磁盤上的一棵大的B樹,通常采用的分支因子為50到2000,具體要取決于關鍵字相對于一頁的大小 。選取一個大的分支因子,可以大大降低數的高度,以及尋找任意關鍵字時所需的磁盤存取次數。上圖顯示了一棵分支因子為1001、高度為2的B樹,它可以存儲超過10億個關鍵字;盡管如此,根節點還是可以持久的保留在內存中,在這棵樹中尋找某一關鍵字至多需兩次磁盤存取! ? ??
維基百科:B樹
轉載于:https://www.cnblogs.com/sage-blog/p/3867777.html
總結
以上是生活随笔為你收集整理的DF学数据结构系列——B树(B-树和B+树)介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: csu1377Putter HOJ12
- 下一篇: VB逆向