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

B樹

????B 是 Balance(平衡)的縮寫。它是一種多路的平衡搜索樹。
????它跟普通的平衡二叉樹的不同是,B樹的每個(gè)節(jié)點(diǎn)可以存儲(chǔ)多個(gè)數(shù)據(jù),而且每個(gè)節(jié)點(diǎn)不止有兩個(gè)子節(jié)點(diǎn),最多可以有上千個(gè)子節(jié)點(diǎn)。
????B樹中每個(gè)節(jié)點(diǎn)都存放著索引和數(shù)據(jù),數(shù)據(jù)遍布整個(gè)樹結(jié)構(gòu),搜索可能在非葉子節(jié)點(diǎn)結(jié)束,最好的情況是O(1)。
? ? 一般一棵 B 樹的高度在 3 層左右,3 層就可滿足 百萬(wàn)級(jí)別的數(shù)據(jù)量

B+樹

????葉子節(jié)點(diǎn)保存了完整的索引和數(shù)據(jù),而非葉子節(jié)點(diǎn)只保存索引值,因此它的查詢時(shí)間固定為 log(n).
????葉子節(jié)點(diǎn)中有指向下一個(gè)葉子節(jié)點(diǎn)的指針,葉子節(jié)點(diǎn)類似于一個(gè)單鏈表
????正因?yàn)槿~子節(jié)點(diǎn)保存了完整的數(shù)據(jù)以及有指針作為連接,B+樹可以增加了區(qū)間訪問(wèn)性,提高了范圍查詢,而B樹的范圍查詢相對(duì)較差
????B+樹更適合外部存儲(chǔ)。因?yàn)樗姆侨~子節(jié)點(diǎn)不存儲(chǔ)數(shù)據(jù),只保存索引。

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

????b+樹的中間節(jié)點(diǎn)不保存數(shù)據(jù),所以磁盤頁(yè)能容納更多節(jié)點(diǎn)元素,更“矮胖”;
????b+樹查詢必須查找到葉子節(jié)點(diǎn),b樹只要匹配到即可不用管元素位置,因此b+樹查找更穩(wěn)定(并不慢);
????對(duì)于范圍查找來(lái)說(shuō),b+樹只需遍歷葉子節(jié)點(diǎn)鏈表即可,b樹卻需要重復(fù)地中序遍歷

為什么會(huì)出現(xiàn)B-樹這類數(shù)據(jù)結(jié)構(gòu)

????傳統(tǒng)用來(lái)搜索的平衡二叉樹有很多,如 AVL 樹,紅黑樹等。這些樹在一般情況下查詢性能非常好,但當(dāng)數(shù)據(jù)非常大的時(shí)候它們就無(wú)能為力了。原因當(dāng)數(shù)據(jù)量非常大時(shí),內(nèi)存不夠用,大部分?jǐn)?shù)據(jù)只能存放在磁盤上,只有需要的數(shù)據(jù)才加載到內(nèi)存中。一般而言內(nèi)存訪問(wèn)的時(shí)間約為 50 ns,而磁盤在 10 ms 左右。速度相差了近 5 個(gè)數(shù)量級(jí),磁盤讀取時(shí)間遠(yuǎn)遠(yuǎn)超過(guò)了數(shù)據(jù)在內(nèi)存中比較的時(shí)間。這說(shuō)明程序大部分時(shí)間會(huì)阻塞在磁盤 IO 上。那么我們?nèi)绾翁岣叱绦蛐阅??減少磁盤 IO 次數(shù),像 AVL 樹,紅黑樹這類平衡二叉樹從設(shè)計(jì)上無(wú)法“迎合”磁盤。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • B樹(B-樹)B樹又名平衡多路二叉樹,和平衡二叉樹的區(qū)別在于:子數(shù)節(jié)點(diǎn)數(shù)不同:平衡二叉樹每個(gè)節(jié)點(diǎn)最多有兩個(gè)節(jié)點(diǎn),而...
    STL_f36e閱讀 11,151評(píng)論 1 4
  • 一,b樹 b樹(balance tree)和b+樹應(yīng)用在數(shù)據(jù)庫(kù)索引,可以認(rèn)為是m叉的多路平衡查找樹,但是從理論上講...
    薛延祥閱讀 1,227評(píng)論 0 0
  • B樹是一種多路平衡的查找樹,它的每個(gè)節(jié)點(diǎn)最多包含k個(gè)孩子,k被稱為B樹的階,k的大小取決于磁盤頁(yè)的大小。 B樹具有...
    七七_(dá)2710閱讀 2,177評(píng)論 0 0
  • 一、B-樹和B+樹的區(qū)別 很明顯,我們要想弄清楚原因就要知道B-樹和B+樹的區(qū)別。為了不長(zhǎng)篇大論。我們直接給出他們...
    Mccree_166a閱讀 3,308評(píng)論 0 2
  • 首先糾正下:B樹也叫B-tree(B-樹)【B-不可以讀B減樹 應(yīng)該是B-tree】,所以B樹和B-tree,B-...
    代碼搬運(yùn)工LBJ閱讀 6,044評(píng)論 0 0

友情鏈接更多精彩內(nèi)容