轉:B樹纠吴、B-樹茬腿、B+樹、B*樹

B樹

即二叉搜索樹:

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

2.所有結點存儲一個關鍵字单料;

3.非葉子結點的左指針指向小于其關鍵字的子樹,右指針指向大于其關鍵字的子樹点楼;

如:

B樹的搜索扫尖,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等掠廓,那么就命中换怖;

否則,如果查詢關鍵字比結點關鍵字小蟀瞧,就進入左兒子沉颂;如果比結點關鍵字大条摸,就進入

右兒子;如果左兒子或右兒子的指針為空兆览,則報告找不到相應的關鍵字屈溉;

如果B樹的所有非葉子結點的左右子樹的結點數(shù)目均保持差不多(平衡)塞关,那么B樹

的搜索性能逼近二分查找抬探;但它比連續(xù)內存空間的二分查找的優(yōu)點是,改變B樹結構

(插入與刪除結點)不需要移動大段的內存數(shù)據(jù)帆赢,甚至通常是常數(shù)開銷小压;

如:

但B樹在經(jīng)過多次插入與刪除后,有可能導致不同的結構:

右邊也是一個B樹椰于,但它的搜索性能已經(jīng)是線性的了怠益;同樣的關鍵字集合有可能導致不同的

樹結構索引;所以瘾婿,使用B樹還要考慮盡可能讓B樹保持左圖的結構蜻牢,和避免右圖的結構,也就

是所謂的“平衡”問題偏陪;

實際使用的B樹都是在原B樹的基礎上加上平衡算法抢呆,即“平衡二叉樹”;如何保持B樹

結點分布均勻的平衡算法是平衡二叉樹的關鍵笛谦;平衡算法是一種在B樹中插入和刪除結點的

策略抱虐;

B-樹

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

1.定義任意非葉子結點最多只有M個兒子;且M>2饥脑;

2.根結點的兒子數(shù)為[2, M]恳邀;

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

4.每個結點存放至少M/2-1(取上整)和至多M-1個關鍵字灶轰;(至少2個關鍵字)

5.非葉子結點的關鍵字個數(shù)=指向兒子的指針個數(shù)-1谣沸;

6.非葉子結點的關鍵字:K[1], K[2], …, K[M-1];且K[i] < K[i+1]笋颤;

7.非葉子結點的指針:P[1], P[2], …, P[M]鳄抒;其中P[1]指向關鍵字小于K[1]的

子樹,P[M]指向關鍵字大于K[M-1]的子樹椰弊,其它P[i]指向關鍵字屬于(K[i-1], K[i])的子樹许溅;

8.所有葉子結點位于同一層;

如:(M=3)

B-樹的搜索秉版,從根結點開始贤重,對結點內的關鍵字(有序)序列進行二分查找,如果

命中則結束清焕,否則進入查詢關鍵字所屬范圍的兒子結點并蝗;重復祭犯,直到所對應的兒子指針為

空,或已經(jīng)是葉子結點滚停;

B-樹的特性:

1.關鍵字集合分布在整顆樹中沃粗;

2.任何一個關鍵字出現(xiàn)且只出現(xiàn)在一個結點中;

3.搜索有可能在非葉子結點結束键畴;

4.其搜索性能等價于在關鍵字全集內做一次二分查找最盅;

5.自動層次控制;

由于限制了除根結點以外的非葉子結點起惕,至少含有M/2個兒子涡贱,確保了結點的至少

利用率,其最底搜索性能為:

其中惹想,M為設定的非葉子結點最多子樹個數(shù)问词,N為關鍵字總數(shù);

所以B-樹的性能總是等價于二分查找(與M值無關)嘀粱,也就沒有B樹平衡的問題激挪;

由于M/2的限制,在插入結點時锋叨,如果結點已滿垄分,需要將結點分裂為兩個各占

M/2的結點;刪除結點時悲柱,需將兩個不足M/2的兄弟結點合并锋喜;

B+樹

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

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

2.非葉子結點的子樹指針與關鍵字個數(shù)相同嘿般;

3.非葉子結點的子樹指針P[i],指向關鍵字值屬于[K[i], K[i+1])的子樹

(B-樹是開區(qū)間)涯冠;

5.為所有葉子結點增加一個鏈指針炉奴;

6.所有關鍵字都在葉子結點出現(xiàn);

如:(M=3)

B+的搜索與B-樹也基本相同蛇更,區(qū)別是B+樹只有達到葉子結點才命中(B-樹可以在

非葉子結點命中)瞻赶,其性能也等價于在關鍵字全集做一次二分查找;

B+的特性:

1.所有關鍵字都出現(xiàn)在葉子結點的鏈表中(稠密索引)派任,且鏈表中的關鍵字恰好

是有序的砸逊;

2.不可能在非葉子結點命中;

3.非葉子結點相當于是葉子結點的索引(稀疏索引)掌逛,葉子結點相當于是存儲

(關鍵字)數(shù)據(jù)的數(shù)據(jù)層师逸;

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

B*樹

是B+樹的變體豆混,在B+樹的非根和非葉子結點再增加指向兄弟的指針篓像;

B*樹定義了非葉子結點關鍵字個數(shù)至少為(2/3)*M动知,即塊的最低使用率為2/3

(代替B+樹的1/2);

B+樹的分裂:當一個結點滿時员辩,分配一個新的結點盒粮,并將原結點中1/2的數(shù)據(jù)

復制到新結點,最后在父結點中增加新結點的指針奠滑;B+樹的分裂只影響原結點和父

結點丹皱,而不會影響兄弟結點,所以它不需要指向兄弟的指針养叛;

B*樹的分裂:當一個結點滿時种呐,如果它的下一個兄弟結點未滿宰翅,那么將一部分

數(shù)據(jù)移到兄弟結點中弃甥,再在原結點插入關鍵字,最后修改父結點中兄弟結點的關鍵字

(因為兄弟結點的關鍵字范圍改變了)汁讼;如果兄弟也滿了淆攻,則在原結點與兄弟結點之

間增加新結點,并各復制1/3的數(shù)據(jù)到新結點嘿架,最后在父結點增加新結點的指針瓶珊;

所以,B*樹分配新結點的概率比B+樹要低耸彪,空間使用率更高伞芹;

小結

B樹:二叉樹,每個結點只存儲一個關鍵字蝉娜,等于則命中唱较,小于走左結點,大于

走右結點召川;

B-樹:多路搜索樹南缓,每個結點存儲M/2到M個關鍵字,非葉子結點存儲指向關鍵

字范圍的子結點荧呐;

所有關鍵字在整顆樹中出現(xiàn)汉形,且只出現(xiàn)一次,非葉子結點可以命中倍阐;

B+樹:在B-樹基礎上概疆,為葉子結點增加鏈表指針,所有關鍵字都在葉子結點

中出現(xiàn)峰搪,非葉子結點作為葉子結點的索引岔冀;B+樹總是到葉子結點才命中;

B*樹:在B+樹基礎上罢艾,為非葉子結點也增加鏈表指針楣颠,將結點的最低利用率

從1/2提高到2/3尽纽;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市童漩,隨后出現(xiàn)的幾起案子弄贿,更是在濱河造成了極大的恐慌,老刑警劉巖矫膨,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件差凹,死亡現(xiàn)場離奇詭異,居然都是意外死亡侧馅,警方通過查閱死者的電腦和手機危尿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來馁痴,“玉大人谊娇,你說我怎么就攤上這事÷拊危” “怎么了济欢?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長小渊。 經(jīng)常有香客問我法褥,道長,這世上最難降的妖魔是什么酬屉? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任半等,我火速辦了婚禮,結果婚禮上呐萨,老公的妹妹穿的比我還像新娘杀饵。我一直安慰自己,他們只是感情好垛吗,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布凹髓。 她就那樣靜靜地躺著,像睡著了一般怯屉。 火紅的嫁衣襯著肌膚如雪蔚舀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天锨络,我揣著相機與錄音赌躺,去河邊找鬼。 笑死羡儿,一個胖子當著我的面吹牛礼患,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼缅叠,長吁一口氣:“原來是場噩夢啊……” “哼悄泥!你這毒婦竟也來了?” 一聲冷哼從身側響起肤粱,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤弹囚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后领曼,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鸥鹉,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年庶骄,在試婚紗的時候發(fā)現(xiàn)自己被綠了毁渗。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡单刁,死狀恐怖灸异,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情幻碱,我是刑警寧澤绎狭,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布细溅,位于F島的核電站褥傍,受9級特大地震影響,放射性物質發(fā)生泄漏喇聊。R本人自食惡果不足惜恍风,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望誓篱。 院中可真熱鬧朋贬,春花似錦、人聲如沸窜骄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽邻遏。三九已至糠亩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間准验,已是汗流浹背赎线。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留糊饱,地道東北人垂寥。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親滞项。 傳聞我的和親對象是個殘疾皇子狭归,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內容

  • B樹的定義 一棵m階的B樹滿足下列條件: 樹中每個結點至多有m個孩子。 除根結點和葉子結點外文判,其它每個結點至少有m...
    文檔隨手記閱讀 13,222評論 0 25
  • 原文鏈接 B樹 1.前言: 動態(tài)查找樹主要有:二叉查找樹(Binary Search Tree)唉铜,平衡二叉查找樹(...
    非典型程序員閱讀 1,162評論 0 3
  • B樹 1.前言: 動態(tài)查找樹主要有:二叉查找樹(Binary Search Tree),平衡二叉查找樹(Balan...
    鐵甲依然在_978f閱讀 1,447評論 0 4
  • Binary Search Tree 二叉樹 即二叉搜索樹: 1.所有非葉子結點至多擁有兩個兒子(Left和Rig...
    右丶羽閱讀 1,255評論 0 5
  • 具體講解之前嗓奢,有一點讼撒,再次強調下:B-樹,即為B樹股耽。因為B樹的原英文名稱為B-tree根盒,而國內很多人喜歡把B-tr...
    文哥的學習日記閱讀 93,782評論 11 86