什麼是B 樹?

2022-09-02 09:36:11 字數 1846 閱讀 6098

什麼是b-樹呢?b-樹全名 balance tree,讀做b樹(中間的-,只是分隔作用,不要讀做b減樹哦)。

b樹首先它也是屬於樹結構,除了樹結構的節點有序、查詢高效外,還有以下特性。以乙個m階的b樹來舉栗:

根節點至少包含兩個子節點;

每個中間節點包括k-1個元素和k個子節點,其中m/2 <= k <= m

每乙個葉子節點包含k-1個元素,其中m/2 <= k <= m

每個節點的元素從大到小有序,節點當中k-1個元素是k個子節點的值域的劃分。

純概念不好理解,來張圖描述。這裡使用的是3階b樹為例:

節點【2,6】就滿足以上說的特徵,它有兩個元素,分別是2和6,有三個子節點:1、3和5、8。節點1是小於值2,節點3和5是介於值2和6,節點8是大於值6

如果需要查詢乙個元素,改如何實現呢?假如要查詢的值是5

從圖中可以看出,b樹查詢的次數不比二叉查詢樹要少,特別是當某個節點內元素較多的時候,比較次數更多,但是,比較操作是在記憶體中進行的,所以損耗可以忽略不計,最重要的是b樹更加「矮胖」,相同數量節點比二叉查詢樹儲存更多元素,減少了磁碟io,磁碟io才是資源消耗的大頭

b樹的特徵說完了,再說一下b樹的插入和刪除操作。假如我們要插入的值是4,自上而下的查詢,得知值4應該在 3和5之間

但是,節點 3,5 已經有兩個元素了,根據上面說的特性2,不可以在 3,5節點插入元素,父節點 2,6 也是兩元素節點,也不能插入,繼續向上,發現頂級節點9,它是單元素節點,可以公升級成雙元素節點,雙元素分別為4和9,節點 2,6得拆分兩個節點,分別是2和6

是不是很麻煩,為了插入乙個節點竟然挪動了這麼多節點,但是,也是因為這麼麻煩,讓b樹維持多路平衡

假如要刪除元素值11,先自上而下的查詢元素值11

找到元素11後,進行刪除,刪除完後,發現節點12下面只有乙個子節點了,不符合上文說的「每個中間節點包括k-1個元素和k個子節點,其中m/2 <= k <= m」,所以,找到元素值 12,13,15的中位數13,13上移一階,節點12下移一階成為第乙個子節點(這個過程成為左旋)

b樹的基礎概念講完了,最後說一下b樹的應用,b樹主要應用檔案系統和部分資料庫索引,比如著名的非關聯式資料庫mongodb,但是,大部分關係型資料庫,比如mysql,mysql沒有使用b樹,使用的是b+樹來作為索引的實現,這是為什麼呢?這個有機會再討論吧

什麼是B樹?

b樹,是乙個m叉平衡查詢樹。如果m為2即為二叉查詢平衡樹,一般m都是大於2的。其特性如下 資料項儲存在樹的葉子節點。所有樹的葉子節點都在相同的深度上,並由l 2 小數字進1 和l之間個資料項。非葉節點儲存直到m 1個關鍵字以指示搜尋的方向 關鍵字i代表子樹i 1中的最小的關鍵字。樹的根或者一片樹葉節...

什麼是B 樹?

b 樹是為磁碟或其他直接訪問輔助裝置而設計的一種m叉平衡查詢樹,其特性如下 每個節點m個關鍵字和m棵子樹,每個關鍵字對應乙個子樹。除根節點外,其餘所有節點的關鍵字數在m 2 小數字進1 和m之間 根節點的關鍵字數在 1,m 之間。所有的資料項,都是按照大小順序存放在同一層的葉子節點中,各葉子節點間用...

什麼是B 樹

什麼是b 樹呢?在說b 樹之前我們先了解一下為什麼要有b樹,其實這些樹最開始都是為了解決某種系統中,查詢效率低的問題。b樹其實最開始源於的是二叉樹,二叉樹是只有左右孩子的樹,當資料量越大的時候,二叉樹的節點越多,那麼當從根節點搜尋的時候,影響查詢效率。所以如果這些節點儲存在外儲存器中的話,每訪問乙個...