B樹、B+樹及B*樹

在前面章節(jié)介紹了各類二叉樹,本章節(jié)介紹下另一系列的樹結(jié)構(gòu):B樹(Balanced tree)。

B樹

B樹是1970年 R.Bayer 和 E.mccreight 提出的一種平衡的多叉樹筑煮,是一種搜索樹,又稱B-樹粤蝎。一棵m階的B樹符合如下條件:

  • 1真仲、根結(jié)點至少有兩個子女(要么是空樹,要么肯定有2個節(jié)點以上才會分裂)初澎;
  • 2秸应、每個非根節(jié)點至少包含有m/2棵個關(guān)鍵字(節(jié)點分裂后,單節(jié)點最少有m/2)碑宴,且最多有m-1個關(guān)鍵字(達到m個關(guān)鍵字需要分裂)软啼;
  • 3、除根結(jié)點以外的所有結(jié)點(不包括葉子結(jié)點)的度數(shù)正好是關(guān)鍵字總數(shù)加1延柠;
  • 4祸挪、所有的葉子結(jié)點都位于同一層。

B樹跟紅黑樹贞间、平衡二叉樹不同贿条,不需要左旋右旋的操作來保持樹的平衡,但每次數(shù)據(jù)的變更導致節(jié)點達到樹的階數(shù)時增热,需要從葉子節(jié)點開始往父節(jié)點延伸數(shù)據(jù)整以,并將當前節(jié)點平均分裂為兩部分。
關(guān)于B樹的構(gòu)建過程峻仇,可以自行查看這個網(wǎng)站的動態(tài)效果公黑,更能幫助我們理解B樹的構(gòu)建過程:
動態(tài)構(gòu)建B樹
從構(gòu)建過程我們知道,構(gòu)建B樹的值,可能是非葉子節(jié)點的關(guān)鍵字帆调,也能是葉子節(jié)點奠骄。搜索過程中,從根節(jié)點逐層往下判斷番刊,由于B樹的內(nèi)容是有序的,因此通過搜索樹的判斷方法影锈,逐層往下尋找芹务,直到找到搜索內(nèi)容。

下圖是一棵B樹示例:


B樹

B+樹

B+樹是從B樹的基礎(chǔ)上擴展出來的鸭廷,跟B樹不同的是枣抱,B+樹的值全部會出現(xiàn)在葉子節(jié)點,部門內(nèi)容也會在非葉子節(jié)點作為關(guān)鍵字存在辆床。B+樹的搜索跟B樹不同佳晶,即使關(guān)鍵字跟搜索內(nèi)容相同,也必須繼續(xù)往下搜索(關(guān)鍵字節(jié)點只有索引內(nèi)容讼载,不存索引內(nèi)容對應(yīng)的值)轿秧,達到最下層葉子節(jié)點。
B+樹的定義基本與B-樹相同咨堤,除了:

  • 1菇篡、所有關(guān)鍵字都會在葉子結(jié)點出現(xiàn);
  • 2一喘、非葉子結(jié)點的子樹指針與關(guān)鍵字個數(shù)相同驱还;
  • 3、所有的葉子結(jié)點都有一個鏈指針指向相鄰的葉子節(jié)點凸克;
    B+樹的動態(tài)構(gòu)建效果可以參考這個頁面:
    動態(tài)構(gòu)建B+樹
B+樹

B+樹的如下兩個特點使得B+樹特別適合用在數(shù)據(jù)庫的數(shù)據(jù)存儲及索引上面:

  • 1 议蟆、所有內(nèi)容都在葉子節(jié)點:關(guān)鍵字節(jié)點作為索引存在,而葉子節(jié)點順序存儲所有的元素值萎战。
  • 2咐容、葉子之間順序且指針關(guān)聯(lián):搜索不到的情況下便于找到下一個節(jié)點的位置,而不需要像B樹一樣從頭開始定位撞鹉,做全表掃描的時候非常方便疟丙。
    而B樹比B+樹相比的優(yōu)點是,由于數(shù)據(jù)可能存在所有節(jié)點鸟雏,不需要每次都達到最深節(jié)點享郊,因此訪問更迅速。

B*樹

B樹是在B+樹基礎(chǔ)上的又一種變形孝鹊,相比B+樹炊琉,B樹多了如下兩個區(qū)別:

  • 1、在關(guān)鍵字節(jié)點也包含了指向兄弟節(jié)點的指針。
  • 2苔咪、當一個節(jié)點慢了锰悼,不會馬上考慮做數(shù)據(jù)對半拆分,而是優(yōu)先考慮把數(shù)據(jù)轉(zhuǎn)移到兄弟節(jié)點团赏,從而一定程度上降低了分配新節(jié)點的可能性箕般,提高了空間利用率。


    B*樹

總結(jié)

最后舔清,我們對B樹丝里、B+樹、B*樹做一個總結(jié)体谒。

  • 1杯聚、B樹是一種M階多路搜索樹,每個節(jié)點都會攜帶數(shù)據(jù)抒痒,節(jié)點數(shù)據(jù)滿的時候做拆分幌绍。
  • 2、B+樹在B樹的基礎(chǔ)上增加了數(shù)據(jù)全在葉子節(jié)點故响,以及葉子節(jié)點之間有鏈表的特點傀广,使其非常適合用在數(shù)據(jù)庫的數(shù)據(jù)存儲上。
  • 3被去、B*樹在B+樹基礎(chǔ)上增加了非葉子節(jié)點的鏈表以及拆分時候的優(yōu)化主儡,進一步提高了空間使用率。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惨缆,一起剝皮案震驚了整個濱河市糜值,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌坯墨,老刑警劉巖寂汇,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異捣染,居然都是意外死亡骄瓣,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門耍攘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來榕栏,“玉大人,你說我怎么就攤上這事蕾各“谴牛” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵式曲,是天一觀的道長妨托。 經(jīng)常有香客問我缸榛,道長,這世上最難降的妖魔是什么兰伤? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任内颗,我火速辦了婚禮,結(jié)果婚禮上敦腔,老公的妹妹穿的比我還像新娘均澳。我一直安慰自己,他們只是感情好符衔,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布负懦。 她就那樣靜靜地躺著,像睡著了一般柏腻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上系吭,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天五嫂,我揣著相機與錄音,去河邊找鬼肯尺。 笑死沃缘,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的则吟。 我是一名探鬼主播槐臀,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼氓仲!你這毒婦竟也來了水慨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤敬扛,失蹤者是張志新(化名)和其女友劉穎晰洒,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體啥箭,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡谍珊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了急侥。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砌滞。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖坏怪,靈堂內(nèi)的尸體忽然破棺而出贝润,到底是詐尸還是另有隱情,我是刑警寧澤陕悬,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布题暖,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏胧卤。R本人自食惡果不足惜唯绍,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望枝誊。 院中可真熱鬧况芒,春花似錦、人聲如沸叶撒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽祠够。三九已至压汪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間古瓤,已是汗流浹背止剖。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留落君,地道東北人穿香。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像绎速,于是被迫代替她去往敵國和親皮获。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 原文鏈接 B樹 1.前言: 動態(tài)查找樹主要有:二叉查找樹(Binary Search Tree)纹冤,平衡二叉查找樹(...
    非典型程序員閱讀 1,158評論 0 3
  • B樹 1.前言: 動態(tài)查找樹主要有:二叉查找樹(Binary Search Tree)洒宝,平衡二叉查找樹(Balan...
    鐵甲依然在_978f閱讀 1,447評論 0 4
  • 參考:B樹和B+樹的總結(jié)B樹、B-樹赵哲、B+樹待德、B*樹都是什么 總結(jié) 利用平衡樹的優(yōu)勢加快查詢的穩(wěn)定性和速度;B+樹...
    小小少年Boy閱讀 58,329評論 8 77
  • 說起數(shù)據(jù)庫较坛,避免不了的要講索引。要真正理解索引扒最,首先就得清楚B+樹的結(jié)構(gòu)等 B樹 B樹即B-樹丑勤,而不是兩種樹。 概...
    燈火闌珊唯念沵_e0b8閱讀 5,494評論 0 39
  • 一些概念 數(shù)據(jù)結(jié)構(gòu)就是研究數(shù)據(jù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)以及它們之間相互關(guān)系吧趣,并對這種結(jié)構(gòu)定義相應(yīng)的運算法竞,而且確保經(jīng)過這...
    Winterfell_Z閱讀 5,781評論 0 13