b樹和b+樹的區(qū)別

一镐牺,b樹

b樹(balance tree)和b+樹應(yīng)用在數(shù)據(jù)庫(kù)索引蜓斧,可以認(rèn)為是m叉的多路平衡查找樹盲镶,但是從理論上講侥袜,二叉樹查找速度和比較次數(shù)都是最小的,為什么不用二叉樹呢溉贿?

因?yàn)槲覀円紤]磁盤IO的影響枫吧,它相對(duì)于內(nèi)存來說是很慢的。數(shù)據(jù)庫(kù)索引是存儲(chǔ)在磁盤上的宇色,當(dāng)數(shù)據(jù)量大時(shí)九杂,就不能把整個(gè)索引全部加載到內(nèi)存了,只能逐一加載每一個(gè)磁盤頁(yè)(對(duì)應(yīng)索引樹的節(jié)點(diǎn))宣蠕。所以我們要減少IO次數(shù)例隆,對(duì)于樹來說,IO次數(shù)就是樹的高度抢蚀,而“矮胖”就是b樹的特征之一镀层,它的每個(gè)節(jié)點(diǎn)最多包含m個(gè)孩子,m稱為b樹的階皿曲,m的大小取決于磁盤頁(yè)的大小唱逢。

█一個(gè)M階的b樹具有如下幾個(gè)特征:

定義任意非葉子結(jié)點(diǎn)最多只有M個(gè)兒子,且M>2屋休;

根結(jié)點(diǎn)的兒子數(shù)為[2, M]坞古;

除根結(jié)點(diǎn)以外的非葉子結(jié)點(diǎn)的兒子數(shù)為[M/2, M],向上取整劫樟;

非葉子結(jié)點(diǎn)的關(guān)鍵字個(gè)數(shù)=兒子數(shù)-1痪枫;

所有葉子結(jié)點(diǎn)位于同一層;

k個(gè)關(guān)鍵字把節(jié)點(diǎn)拆成k+1段毅哗,分別指向k+1個(gè)兒子听怕,同時(shí)滿足查找樹的大小關(guān)系。

█有關(guān)b樹的一些特性虑绵,注意與后面的b+樹區(qū)分:

關(guān)鍵字集合分布在整顆樹中尿瞭;

任何一個(gè)關(guān)鍵字出現(xiàn)且只出現(xiàn)在一個(gè)結(jié)點(diǎn)中;

搜索有可能在非葉子結(jié)點(diǎn)結(jié)束翅睛;

其搜索性能等價(jià)于在關(guān)鍵字全集內(nèi)做一次二分查找声搁;

█如圖是一個(gè)3階b樹,順便講一下查詢?cè)?的過程:


1捕发,第一次磁盤IO疏旨,把9所在節(jié)點(diǎn)讀到內(nèi)存,把目標(biāo)數(shù)5和9比較扎酷,小檐涝,找小于9對(duì)應(yīng)的節(jié)點(diǎn);


2,第二次磁盤IO谁榜,還是讀節(jié)點(diǎn)到內(nèi)存幅聘,在內(nèi)存中把5依次和2、6比較窃植,定位到2帝蒿、6中間區(qū)域?qū)?yīng)的節(jié)點(diǎn);

3巷怜,第三次磁盤IO就不上圖了葛超,跟第二步一樣,然后就找到了目標(biāo)5延塑。

可以看到绣张,b樹在查詢時(shí)的比較次數(shù)并不比二叉樹少,尤其是節(jié)點(diǎn)中的數(shù)非常多時(shí)页畦,但是內(nèi)存的比較速度非撑痔妫快,耗時(shí)可以忽略豫缨,所以只要樹的高度低独令,IO少,就可以提高查詢性能好芭,這是b樹的優(yōu)勢(shì)之一燃箭。

█b樹的插入刪除元素操作:

比如我們要在下圖中插入元素4:


1,首先自頂向下查詢找到4應(yīng)該在的位置舍败,即3招狸、5之間;

2邻薯,但是3階b樹的節(jié)點(diǎn)最多只能有2個(gè)元素裙戏,所以把3、4厕诡、5里面的中間元素4上移(中間元素上移是插入操作的關(guān)鍵)累榜;

3,上一層節(jié)點(diǎn)加入4之后也超載了灵嫌,繼續(xù)中間元素上移的操作壹罚,現(xiàn)在根節(jié)點(diǎn)變成了4、9寿羞;

4猖凛,還要滿足查找樹的性質(zhì),所以對(duì)元素進(jìn)行調(diào)整以滿足大小關(guān)系绪穆,始終維持多路平衡也是b樹的優(yōu)勢(shì)辨泳,最后變成這樣:


再比如我們要?jiǎng)h除元素11:

1虱岂,自頂向下查詢到11,刪掉它漠吻;

2量瓜,然后不滿足b樹的條件了,因?yàn)樵?2所在的節(jié)點(diǎn)只有一個(gè)孩子了途乃,所以我們要“左旋”,元素12下來扔傅,元素13上去:


這時(shí)如果再刪除15呢耍共?很簡(jiǎn)單,當(dāng)元素個(gè)數(shù)太少以至于不能再旋轉(zhuǎn)時(shí)猎塞,12直接上去就行了试读。

二,b+樹

b+樹荠耽,是b樹的一種變體钩骇,查詢性能更好。m階的b+樹的特征:

1铝量、有n棵子樹的非葉子結(jié)點(diǎn)中含有n個(gè)關(guān)鍵字(b樹是n-1個(gè))倘屹,這些關(guān)鍵字不保存數(shù)據(jù),只用來索引慢叨,所有數(shù)據(jù)都保存在葉子節(jié)點(diǎn)(b樹是每個(gè)關(guān)鍵字都保存數(shù)據(jù))纽匙。

2、所有的葉子結(jié)點(diǎn)中包含了全部關(guān)鍵字的信息拍谐,及指向含這些關(guān)鍵字記錄的指針烛缔,且葉子結(jié)點(diǎn)本身依關(guān)鍵字的大小自小而大順序鏈接。

3轩拨、所有的非葉子結(jié)點(diǎn)可以看成是索引部分践瓷,結(jié)點(diǎn)中僅含其子樹中的最大(或最小)關(guān)鍵字亡蓉。

4晕翠、通常在b+樹上有兩個(gè)頭指針,一個(gè)指向根結(jié)點(diǎn)寸宵,一個(gè)指向關(guān)鍵字最小的葉子結(jié)點(diǎn)崖面。

5、同一個(gè)數(shù)字會(huì)在不同節(jié)點(diǎn)中重復(fù)出現(xiàn)梯影,根節(jié)點(diǎn)的最大元素就是b+樹的最大元素巫员。


█b+樹相比于b樹的查詢優(yōu)勢(shì):

1、b+樹的中間節(jié)點(diǎn)不保存數(shù)據(jù)甲棍,所以磁盤頁(yè)能容納更多節(jié)點(diǎn)元素简识,更“矮胖”;

2、b+樹查詢必須查找到葉子節(jié)點(diǎn)七扰,b樹只要匹配到即可不用管元素位置奢赂,因此b+樹查找更穩(wěn)定(并不慢);

3颈走、對(duì)于范圍查找來說膳灶,b+樹只需遍歷葉子節(jié)點(diǎn)鏈表即可,b樹卻需要重復(fù)地中序遍歷立由,如下兩圖:


原文參考:

---------------------

作者:login_sonata

來源:CSDN

原文:https://blog.csdn.net/login_sonata/article/details/75268075

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末轧钓,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子锐膜,更是在濱河造成了極大的恐慌毕箍,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件道盏,死亡現(xiàn)場(chǎng)離奇詭異而柑,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)荷逞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門媒咳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人颅围,你說我怎么就攤上這事伟葫。” “怎么了院促?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵筏养,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我常拓,道長(zhǎng)渐溶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任弄抬,我火速辦了婚禮茎辐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘掂恕。我一直安慰自己拖陆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布懊亡。 她就那樣靜靜地躺著依啰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪店枣。 梳的紋絲不亂的頭發(fā)上速警,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天叹誉,我揣著相機(jī)與錄音,去河邊找鬼闷旧。 笑死长豁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的忙灼。 我是一名探鬼主播匠襟,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼缀棍!你這毒婦竟也來了宅此?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤爬范,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后弱匪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體青瀑,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年萧诫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了斥难。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡帘饶,死狀恐怖哑诊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情及刻,我是刑警寧澤镀裤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站缴饭,受9級(jí)特大地震影響暑劝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜颗搂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一担猛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧丢氢,春花似錦傅联、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至稍浆,卻和暖如春载碌,著一層夾襖步出監(jiān)牢的瞬間猜嘱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工嫁艇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留朗伶,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓步咪,卻偏偏與公主長(zhǎng)得像论皆,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子猾漫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

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

  • 原文鏈接 B樹 1.前言: 動(dòng)態(tài)查找樹主要有:二叉查找樹(Binary Search Tree)点晴,平衡二叉查找樹(...
    非典型程序員閱讀 1,148評(píng)論 0 3
  • B樹 1.前言: 動(dòng)態(tài)查找樹主要有:二叉查找樹(Binary Search Tree),平衡二叉查找樹(Balan...
    鐵甲依然在_978f閱讀 1,443評(píng)論 0 4
  • 一些概念 數(shù)據(jù)結(jié)構(gòu)就是研究數(shù)據(jù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)以及它們之間相互關(guān)系悯周,并對(duì)這種結(jié)構(gòu)定義相應(yīng)的運(yùn)算粒督,而且確保經(jīng)過這...
    Winterfell_Z閱讀 5,660評(píng)論 0 13
  • 參考:B樹和B+樹的總結(jié)B樹、B-樹禽翼、B+樹屠橄、B*樹都是什么 總結(jié) 利用平衡樹的優(yōu)勢(shì)加快查詢的穩(wěn)定性和速度;B+樹...
    小小少年Boy閱讀 58,277評(píng)論 8 77
  • 多少風(fēng)起云闰挡,淡泊似人生锐墙; 田間鄉(xiāng)村道,遍灑愛歡騰长酗。 夫唱婦來隨溪北,情愛共結(jié)晶; 孩兒多歡笑夺脾,鄉(xiāng)野播春情之拨。
    花蔓情緣閱讀 505評(píng)論 0 3