多路查詢樹 多叉樹和B樹

2021-10-25 15:08:06 字數 3350 閱讀 4654

一、二叉樹存在的問題

二叉樹需要載入到記憶體,若二叉樹的結點少沒有什麼問題,但是若二叉樹的節點很多(比如1億), 可能存在如下問題:

(1)在構建二叉樹時,需要多次進行 i/o 操作(海量資料存在資料庫或檔案中),結點海量,構建二叉樹時速度有影響

問題2:結點海量也會造成二叉樹的高度很大,會降低操作速度

二、多叉樹

樹的每個節點可以有兩個以上的子節點,稱為m階的多叉樹,或者稱為m叉樹。多叉樹的基本性質如下:

(1)每個結點有 m 個子結點和 m-1 個鍵值;

(2)每個結點中的鍵值按公升序排列;

(3)前 i 個子結點中的鍵值都小於第 i 個鍵值;

(4)後m-1個子結點中的鍵值都大於第 i 個鍵值。

三、b樹b樹(b-tree)是一種樹狀資料結構,它能夠儲存資料,對其進行排序並允許以o(log n)的時間複雜度執行進行查詢、順序讀取、插入和刪除的資料結構。b樹,概括來說是乙個節點可以擁有多於2個子節點的二叉排序樹。與自平衡二叉查詢樹不同,b-樹為系統最優化大塊資料的讀和寫操作,普遍運用在資料庫和檔案系統

關於b樹的說明:

(1)b樹的階(度):節點的最多子節點個數。比如2-3樹的階是3,2-3-4樹的階是4;

(2)b樹的搜尋,從根結點開始,對結點內的關鍵字(有序)序列進行二分查詢,如果命中則結束,否則進入查詢關鍵字所屬範圍的兒子結點;重複,直到所對應的兒子指標為空,或已經是葉子結點;

(4)關鍵字集合分布在整顆樹中,即葉子節點和非葉子節點都存放資料;

(4)搜尋有可能在非葉子結點結束;

(5)其搜尋效能等價於在關鍵字全集內做一次二分查詢。

2-3樹是最簡單的b樹結構,具有如下特點:

1、2-3樹 的所有葉子節點都在同一層.(只要是b樹都滿足這個條件);

2、有兩個子節點的節點叫二節點,二節點要麼沒有子節點,要麼有兩個子節點;

3、有三個子節點的節點叫三節點,三節點要麼沒有子節點,要麼有三個子節點;

4、2-3樹是由二節點和三節點構成的樹。

e.g:將數列 構建成2-3樹,並保證資料插入的大小順序,演示構建2-3樹的過程。

2-3樹的插入規則:當按照規則插入乙個數到某個節點時,不能滿足上面三個要求,就需要拆,先向上拆,如果上層滿,則拆本層,拆後仍然需要滿足上面3個條件

(1)先插入16構成二節點,再插入24放在16的右邊構成三節點;

(2)插入12時需要考慮:將12放在16的左邊不可行會構成四節點;將12放在16的左下位置不滿足2-3樹的所有葉子節點都在同一層。即需要拆掉上一層節點重新組合成2-3樹;

(3)插入32時,直接放在24的右邊,構成三節點;

(4)插入26時需要考慮:將26在24的左邊不可行會構成四節點;將26放在24的右下位置不滿足2-3樹的所有葉子節點都在同一層。即需要拆掉上一層節點重新組合成2-3樹;

(5)插入34放在32的右邊;

(6)插入10時需要考慮:當插入10時,應當在 10 - 12 -14 這個位置,但是這時已滿需要向上層看, 16-26 也已滿。因此將 10-12-14 拆 成 10 14 ,因為其它拆法,並不能滿足 二節點或三節點的要求。但是這時,葉子節點沒有全部在同一層,需要調整 26 這個值到下面;

(7)插入8在10的左邊;

(8)插入28在24和32的中間;

(9)插入38在34的右邊;

(10)插入20在24的左邊。

四、b+樹

b+樹是b樹的變體,是一種多路搜尋樹。

關於b+樹的說明:

(1)b+樹的搜尋與b樹也基本相同,區別是b+樹只有達到葉子結點才命中(b樹可以在非葉子結點命中),其效能也等價於在關鍵字全集做一次二分查詢;

(2)所有關鍵字都出現在葉子結點的鍊錶中(即資料只能在葉子節點【也叫稠密索引】),且鍊錶中的關鍵字(資料)恰好是有序的;

(3)不可能在非葉子結點命中;

(4)非葉子結點相當於是葉子結點的索引(稀疏索引),葉子結點相當於是儲存(關鍵字)資料的資料層

(5)b+樹的所有葉結點構成乙個有序鍊錶,可以按照關鍵碼排序的次序遍歷全部記錄;

(6)b+樹更適合檔案索引系統,b樹和b+樹各有自己的應用場景,不能說b+樹完全比b樹好,也不能說b樹完全比b+樹好。

下圖為乙個b+樹圖:

五、b*樹

b* 樹是b+樹的變體,在b+樹的非根和非葉子結點再增加指向兄弟的指標。

關於b* 樹的說明:

(1)b* 樹定義了非葉子結點關鍵字個數至少為(2/3) * m,即塊的最低使用率為2/3,而b+樹的塊的最低使用率為b+樹的1/2

(2)從第1個特點我們可以看出,b * 樹分配新結點的概率比b+樹要低,空間使用率更高

下圖為乙個b*樹圖:

多路查詢樹 B樹

多路查詢樹 multi way search tree 其每乙個結點的孩子數可以多於兩個,且每乙個結點處可以儲存多個元素。在這裡,我們講解它的4種特殊形式 2 3樹 2 3 4樹 b樹和b 樹。2 3樹是這樣的一顆多路查詢樹 其中的每乙個結點都具有兩個孩子 我們稱它為2結點 或三個孩子 我們稱它為3...

多路查詢樹 B樹

多路查詢樹,其每乙個結點的孩子數可以多於兩個,且每乙個結點處可以儲存多個元素。每乙個結點都具有兩個孩子 2結點 或三個孩子 3結點 乙個2結點包含乙個元素和兩個孩子 或沒有孩子 左子樹包含的元素小於該元素,右子樹包含的元素大於該元素。乙個3結點包含一小一大兩個元素和三個孩子 或沒有孩子 左子樹包含小...

多路查詢樹 B樹

多路查詢樹每乙個結點的孩子數可以多於兩個,且每乙個節點處可以儲存多個元素。2 3樹的每乙個結點都具有兩個孩子 2結點 或三個孩子 3結點 乙個2結點包含乙個元素和兩個孩子 或沒有孩子 且與二叉排序樹類似,左子樹包含的元素小於該元素,右子樹包含的元素大於該元素與二叉排序樹不同的是,這個2結點要麼沒有孩...