二叉樹、B-樹交煞、B+樹咏窿、B*樹(轉(zhuǎn))

Binary Search Tree ?二叉樹

即二叉搜索樹:

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

2.所有結(jié)點(diǎn)存儲(chǔ)一個(gè)關(guān)鍵字素征;

3.非葉子結(jié)點(diǎn)的左指針指向小于其關(guān)鍵字的子樹集嵌,右指針指向大于其關(guān)鍵字的子樹;

如:

二叉搜索樹的搜索御毅,從根結(jié)點(diǎn)開始根欧,如果查詢的關(guān)鍵字與結(jié)點(diǎn)的關(guān)鍵字相等,那么就命中端蛆;

否則凤粗,如果查詢關(guān)鍵字比結(jié)點(diǎn)關(guān)鍵字小,就進(jìn)入左兒子今豆;

如果比結(jié)點(diǎn)關(guān)鍵字大嫌拣,就進(jìn)入右兒子;

如果左兒子或右兒子的指針為空晚凿,則報(bào)告找不到相應(yīng)的關(guān)鍵字亭罪;

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

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

如:

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

右邊也是一個(gè)二叉搜索樹院崇,但它的搜索性能已經(jīng)是線性的了;

同樣的關(guān)鍵字集合有可能導(dǎo)致不同的樹結(jié)構(gòu)索引袍祖;

所以底瓣,使用二叉搜索樹還要考慮盡可能讓二叉搜索樹保持左圖的結(jié)構(gòu),和避免右圖的結(jié)構(gòu)蕉陋,也就是所謂的“平衡”問題捐凭;

實(shí)際使用的二叉搜索樹都是在原樹的基礎(chǔ)上加上平衡算法,即“平衡二叉樹”凳鬓;

如何保持二叉搜索樹結(jié)點(diǎn)分布均勻的平衡算法是平衡二叉樹的關(guān)鍵茁肠;

平衡算法是一種在二叉搜索樹中插入和刪除結(jié)點(diǎn)的策略;

B-樹

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

1.定義任意非葉子結(jié)點(diǎn)最多只有M個(gè)兒子缩举;且M>2垦梆;

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

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

4.每個(gè)結(jié)點(diǎn)存放至少M(fèi)/2-1(取上整)和至多M-1個(gè)關(guān)鍵字托猩;(至少2個(gè)關(guān)鍵字)

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

6.非葉子結(jié)點(diǎn)的關(guān)鍵字:K[1], K[2], …, K[M-1]辽慕;且K[i] < K[i+1]京腥;

7.非葉子結(jié)點(diǎn)的指針: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é)點(diǎn)位于同一層温艇;

如:(M=3)

B-樹的搜索,從根結(jié)點(diǎn)開始堕汞,對(duì)結(jié)點(diǎn)內(nèi)的關(guān)鍵字(有序)序列進(jìn)行二分查找勺爱,如果命中則結(jié)束,否則進(jìn)入查詢關(guān)鍵字所屬范圍的兒子結(jié)點(diǎn)讯检;

重復(fù)琐鲁,直到所對(duì)應(yīng)的兒子指針為空,或已經(jīng)是葉子結(jié)點(diǎn)人灼;

B-樹的特性:

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

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

3.搜索有可能在非葉子結(jié)點(diǎn)結(jié)束投放;

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

5.自動(dòng)層次控制;

由于限制了除根結(jié)點(diǎn)以外的非葉子結(jié)點(diǎn),至少含有M/2個(gè)兒子涝桅,確保了結(jié)點(diǎn)的至少利用率拜姿,其最底搜索性能為:

其中,M為設(shè)定的非葉子結(jié)點(diǎn)最多子樹個(gè)數(shù)冯遂,N為關(guān)鍵字總數(shù)蕊肥;

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

由于M/2的限制壁却,在插入結(jié)點(diǎn)時(shí),如果結(jié)點(diǎn)已滿裸准,需要將結(jié)點(diǎn)分裂為兩個(gè)各占M/2的結(jié)點(diǎn)儒洛;刪除結(jié)點(diǎn)時(shí),需將兩個(gè)不足M/2的兄弟結(jié)點(diǎn)合并狼速;

B+樹

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

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

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

3.非葉子結(jié)點(diǎn)的子樹指針P[i]恼蓬,指向關(guān)鍵字值屬于[K[i], K[i+1])的子樹

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

5.為所有葉子結(jié)點(diǎn)增加一個(gè)鏈指針僵芹;

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

如:(M=3)

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

B+的特性:

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

2.不可能在非葉子結(jié)點(diǎn)命中疮方;

3.非葉子結(jié)點(diǎn)相當(dāng)于是葉子結(jié)點(diǎn)的索引(稀疏索引),葉子結(jié)點(diǎn)相當(dāng)于是存儲(chǔ)(關(guān)鍵字)數(shù)據(jù)的數(shù)據(jù)層茧彤;

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

B*樹

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

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

B+樹的分裂:當(dāng)一個(gè)結(jié)點(diǎn)滿時(shí)珠洗,分配一個(gè)新的結(jié)點(diǎn)溜歪,并將原結(jié)點(diǎn)中1/2的數(shù)據(jù)復(fù)制到新結(jié)點(diǎn),最后在父結(jié)點(diǎn)中增加新結(jié)點(diǎn)的指針许蓖;

B+樹的分裂只影響原結(jié)點(diǎn)和父結(jié)點(diǎn)蝴猪,而不會(huì)影響兄弟結(jié)點(diǎn)富岳,所以它不需要指向兄弟的指針;

B*樹的分裂:當(dāng)一個(gè)結(jié)點(diǎn)滿時(shí)拯腮,如果它的下一個(gè)兄弟結(jié)點(diǎn)未滿窖式,那么將一部分?jǐn)?shù)據(jù)移到兄弟結(jié)點(diǎn)中,再在原結(jié)點(diǎn)插入關(guān)鍵字动壤,最后修改父結(jié)點(diǎn)中兄弟結(jié)點(diǎn)的關(guān)鍵字(因?yàn)樾值芙Y(jié)點(diǎn)的關(guān)鍵字范圍改變了)萝喘;

如果兄弟也滿了,則在原結(jié)點(diǎn)與兄弟結(jié)點(diǎn)之間增加新結(jié)點(diǎn)琼懊,并各復(fù)制1/3的數(shù)據(jù)到新結(jié)點(diǎn)阁簸,最后在父結(jié)點(diǎn)增加新結(jié)點(diǎn)的指針;

所以哼丈,B*樹分配新結(jié)點(diǎn)的概率比B+樹要低启妹,空間使用率更高;

小結(jié)

B樹:二叉樹醉旦,每個(gè)結(jié)點(diǎn)只存儲(chǔ)一個(gè)關(guān)鍵字饶米,等于則命中,小于走左結(jié)點(diǎn)车胡,大于走右結(jié)點(diǎn)檬输;

B-樹:多路搜索樹,每個(gè)結(jié)點(diǎn)存儲(chǔ)M/2到M個(gè)關(guān)鍵字匈棘,非葉子結(jié)點(diǎn)存儲(chǔ)指向關(guān)鍵字范圍的子結(jié)點(diǎn)丧慈;所有關(guān)鍵字在整顆樹中出現(xiàn),且只出現(xiàn)一次主卫,非葉子結(jié)點(diǎn)可以命中逃默;

B+樹:在B-樹基礎(chǔ)上,為葉子結(jié)點(diǎn)增加鏈表指針簇搅,所有關(guān)鍵字都在葉子結(jié)點(diǎn)中出現(xiàn)完域,非葉子結(jié)點(diǎn)作為葉子結(jié)點(diǎn)的索引;B+樹總是到葉子結(jié)點(diǎn)才命中馍资;

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

轉(zhuǎn)自http://www.cnblogs.com/oldhorse/archive/2009/11/16/1604009.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市使兔,隨后出現(xiàn)的幾起案子建钥,更是在濱河造成了極大的恐慌,老刑警劉巖虐沥,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件熊经,死亡現(xiàn)場(chǎng)離奇詭異泽艘,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)镐依,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門匹涮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人槐壳,你說我怎么就攤上這事然低。” “怎么了务唐?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵雳攘,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我枫笛,道長(zhǎng)吨灭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任刑巧,我火速辦了婚禮喧兄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘啊楚。我一直安慰自己繁莹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開白布特幔。 她就那樣靜靜地躺著咨演,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蚯斯。 梳的紋絲不亂的頭發(fā)上薄风,一...
    開封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音拍嵌,去河邊找鬼遭赂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛横辆,可吹牛的內(nèi)容都是我干的撇他。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼狈蚤,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼困肩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起脆侮,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤锌畸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后靖避,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體潭枣,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡比默,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盆犁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片命咐。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖谐岁,靈堂內(nèi)的尸體忽然破棺而出醋奠,到底是詐尸還是另有隱情,我是刑警寧澤翰铡,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布钝域,位于F島的核電站,受9級(jí)特大地震影響锭魔,放射性物質(zhì)發(fā)生泄漏例证。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一迷捧、第九天 我趴在偏房一處隱蔽的房頂上張望织咧。 院中可真熱鬧,春花似錦漠秋、人聲如沸笙蒙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捅位。三九已至,卻和暖如春搂抒,著一層夾襖步出監(jiān)牢的瞬間艇搀,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工求晶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留焰雕,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓芳杏,卻偏偏與公主長(zhǎng)得像矩屁,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子爵赵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

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