B樹B+樹B-樹


B樹B-樹B+樹B*樹概念

B樹

即二叉搜索樹:

1.所有非葉子結(jié)點至多擁有兩個兒子(Left和Right);

2.所有結(jié)點存儲一個關(guān)鍵字骏掀;

3.非葉子結(jié)點的左指針指向小于其關(guān)鍵字的子樹尾抑,右指針指向大于其關(guān)鍵字的子樹芭商;

B樹的搜索:

從根結(jié)點開始语盈,如果查詢的關(guān)鍵字與結(jié)點的關(guān)鍵字相等哑了,那么就命中赘方;否則,如果查詢關(guān)鍵字比結(jié)點關(guān)鍵字小弱左,就進入左兒子窄陡;如果比結(jié)點關(guān)鍵字大,就進入右兒子拆火;如果左兒子或右兒子的指針為空跳夭,則報告找不到相應(yīng)的關(guān)鍵字;

二叉搜索樹

如果B樹的所有非葉子結(jié)點的左右子樹的結(jié)點數(shù)目均保持差不多(平衡)们镜,那么B樹的搜索性能逼近二分查找币叹;

但它比連續(xù)內(nèi)存空間的二分查找的優(yōu)點是,改變B樹結(jié)構(gòu)(插入與刪除結(jié)點)不需要移動大段的內(nèi)存數(shù)據(jù)模狭,甚至通常是常數(shù)開銷颈抚;

刪除結(jié)點

但B樹在經(jīng)過多次插入與刪除后,有可能導(dǎo)致不同的結(jié)構(gòu):

刪除后的兩種結(jié)構(gòu)

右邊也是一個B樹嚼鹉,但它的搜索性能已經(jīng)是線性的了贩汉;同樣的關(guān)鍵字集合有可能導(dǎo)致不同的樹結(jié)構(gòu)索引九妈;所以,使用B樹還要考慮盡可能讓B樹保持左圖的結(jié)構(gòu)雾鬼,和避免右圖的結(jié)構(gòu),也就是所謂的“平衡”問題宴树;??????

實際使用的B樹都是在原B樹的基礎(chǔ)上加上平衡算法策菜,即“平衡二叉樹”;如何保持B樹結(jié)點分布均勻的平衡算法是平衡二叉樹的關(guān)鍵酒贬;平衡算法是一種在B樹中插入和刪除結(jié)點的策略又憨;

B-樹

是一種多路搜索樹(并不是二叉的):

1.定義任意非葉子結(jié)點最多只有M個兒子;且M>2锭吨;

2.根結(jié)點的兒子數(shù)為[2, M]蠢莺;

3.除根結(jié)點以外的非葉子結(jié)點的兒子數(shù)為[M/2, M];

4.每個結(jié)點存放至少M/2-1(取上整)和至多M-1個關(guān)鍵字零如;(至少2個關(guān)鍵字)

5.非葉子結(jié)點的關(guān)鍵字個數(shù)=指向兒子的指針個數(shù)-1躏将;(沒有太明白?)

6.非葉子結(jié)點的關(guān)鍵字:K[1], K[2], …, K[M-1]考蕾;且K[i]< K[i+1]祸憋;

7.非葉子結(jié)點的指針:P[1], P[2], …, P[M];其中P[1]指向關(guān)鍵字小于K[1]的子樹肖卧,P[M]指向關(guān)鍵字大于K[M-1]的子樹蚯窥,其它P[i]指向關(guān)鍵字屬于(K[i-1],K[i])的子樹;

8.所有葉子結(jié)點位于同一層塞帐;


M=3

B-樹的搜索拦赠,從根結(jié)點開始,對結(jié)點內(nèi)的關(guān)鍵字(有序)序列進行二分查找葵姥,如果命中則結(jié)束荷鼠,否則進入查詢關(guān)鍵字所屬范圍的兒子結(jié)點;重復(fù)牌里,直到所對應(yīng)的兒子指針為空颊咬,或已經(jīng)是葉子結(jié)點;

B-樹的特性:

1.關(guān)鍵字集合分布在整顆樹中牡辽;

2.任何一個關(guān)鍵字出現(xiàn)且只出現(xiàn)在一個結(jié)點中喳篇;

3.搜索有可能在非葉子結(jié)點結(jié)束;

4.其搜索性能等價于在關(guān)鍵字全集內(nèi)做一次二分查找态辛;

5.自動層次控制麸澜;

由于限制了除根結(jié)點以外的非葉子結(jié)點,至少含有M/2個兒子奏黑,確保了結(jié)點的至少利用率炊邦,其最底搜索性能為:

其中编矾,M為設(shè)定的非葉子結(jié)點最多子樹個數(shù),N為關(guān)鍵字總數(shù)馁害;

所以B-樹的性能總是等價于二分查找(與M值無關(guān))窄俏,也就沒有B樹平衡的問題;

由于M/2的限制碘菜,在插入結(jié)點時凹蜈,如果結(jié)點已滿,需要將結(jié)點分裂為兩個各占M/2的結(jié)點忍啸;刪除結(jié)點時仰坦,需將兩個不足M/2的兄弟結(jié)點合并;

B+樹

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

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

2.非葉子結(jié)點的子樹指針與關(guān)鍵字個數(shù)相同;

3.非葉子結(jié)點的子樹指針P[i]凿滤,指向關(guān)鍵字值屬于[K[i],

K[i+1])的子樹(B-樹是開區(qū)間)妈橄;

5.為所有葉子結(jié)點增加一個鏈指針;

6.所有關(guān)鍵字都在葉子結(jié)點出現(xiàn)鸭巴;

B+樹

B+的搜索與B-樹也基本相同眷细,區(qū)別是B+樹只有達到葉子結(jié)點才命中(B-樹可以在非葉子結(jié)點命中),其性能也等價于在關(guān)鍵字全集做一次二分查找鹃祖;

B+的特性:

1.所有關(guān)鍵字都出現(xiàn)在葉子結(jié)點的鏈表中(稠密索引)溪椎,且鏈表中的關(guān)鍵字恰好是有序的;

2.不可能在非葉子結(jié)點命中恬口;

3.非葉子結(jié)點相當于是葉子結(jié)點的索引(稀疏索引)校读,葉子結(jié)點相當于是存儲(關(guān)鍵字)數(shù)據(jù)的數(shù)據(jù)層;

4.更適合文件索引系統(tǒng)祖能;

B*樹

是B+樹的變體歉秫,在B+樹的非根和非葉子結(jié)點再增加指向兄弟的指針;

B*樹

B*樹定義了非葉子結(jié)點關(guān)鍵字個數(shù)至少為(2/3)*M养铸,即塊的最低使用率為2/3(代替B+樹的1/2)雁芙;

B+樹的分裂:當一個結(jié)點滿時,分配一個新的結(jié)點钞螟,并將原結(jié)點中1/2的數(shù)據(jù)復(fù)制到新結(jié)點兔甘,最后在父結(jié)點中增加新結(jié)點的指針;B+樹的分裂只影響原結(jié)點和父結(jié)點鳞滨,而不會影響兄弟結(jié)點洞焙,所以它不需要指向兄弟的指針;

B*樹的分裂:當一個結(jié)點滿時,如果它的下一個兄弟結(jié)點未滿澡匪,那么將一部分數(shù)據(jù)移到兄弟結(jié)點中熔任,再在原結(jié)點插入關(guān)鍵字,最后修改父結(jié)點中兄弟結(jié)點的關(guān)鍵字(因為兄弟結(jié)點的關(guān)鍵字范圍改變了)唁情;如果兄弟也滿了疑苔,則在原結(jié)點與兄弟結(jié)點之間增加新結(jié)點,并各復(fù)制1/3的數(shù)據(jù)到新結(jié)點甸鸟,最后在父結(jié)點增加新結(jié)點的指針夯巷;

所以,B*樹分配新結(jié)點的概率比B+樹要低哀墓,空間使用率更高

小結(jié)

B樹:二叉樹喷兼,每個結(jié)點只存儲一個關(guān)鍵字篮绰,等于則命中,小于走左結(jié)點季惯,大于走右結(jié)點吠各;

B-樹:多路搜索樹,每個結(jié)點存儲 [M/2勉抓,M] 個關(guān)鍵字贾漏,非葉子結(jié)點存儲指向關(guān)鍵字范圍的子結(jié)點;

?????????? 所有關(guān)鍵字在整顆樹中出現(xiàn)藕筋,且只出現(xiàn)一次纵散,非葉子結(jié)點可以命中;

B+樹:在B-樹基礎(chǔ)上隐圾,為葉子結(jié)點增加鏈表指針伍掀,所有關(guān)鍵字都在葉子結(jié)點中出現(xiàn)非葉子結(jié)點作為葉子結(jié)點的索引暇藏;B+樹總是到葉子結(jié)點才命中蜜笤;

B*樹:在B+樹基礎(chǔ)上,為非葉子結(jié)點也增加鏈表指針盐碱,將結(jié)點的最低利用率從1/2提高到2/3

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末把兔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子瓮顽,更是在濱河造成了極大的恐慌县好,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件趣倾,死亡現(xiàn)場離奇詭異聘惦,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門善绎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來黔漂,“玉大人,你說我怎么就攤上這事禀酱【媸兀” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵剂跟,是天一觀的道長减途。 經(jīng)常有香客問我,道長曹洽,這世上最難降的妖魔是什么鳍置? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮送淆,結(jié)果婚禮上税产,老公的妹妹穿的比我還像新娘。我一直安慰自己偷崩,他們只是感情好辟拷,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著阐斜,像睡著了一般衫冻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上谒出,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天隅俘,我揣著相機與錄音,去河邊找鬼笤喳。 笑死考赛,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的莉测。 我是一名探鬼主播颜骤,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼捣卤!你這毒婦竟也來了忍抽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤董朝,失蹤者是張志新(化名)和其女友劉穎鸠项,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體子姜,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡祟绊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牧抽。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡嘉熊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出扬舒,到底是詐尸還是另有隱情阐肤,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布讲坎,位于F島的核電站孕惜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏晨炕。R本人自食惡果不足惜衫画,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瓮栗。 院中可真熱鬧碧磅,春花似錦、人聲如沸遵馆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽货邓。三九已至,卻和暖如春四濒,著一層夾襖步出監(jiān)牢的瞬間换况,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工盗蟆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留戈二,地道東北人。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓喳资,卻偏偏與公主長得像觉吭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子仆邓,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

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