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