Java數據結構與算法 day11 多路查找樹

第11章 多路查找樹

二叉樹與B樹

二叉樹的問題分析

二叉樹的操作效率較高,但是也存在問題, 請看下面的二叉樹:

在這裏插入圖片描述

二叉樹需要加載到內存的,如果二叉樹的節點少,沒有什麼問題,但是如果二叉樹的節點很多(比如1), 就存在如下問題:

問題1:在構建二叉樹時,需要多次進行i/o操作(海量數據存在數據庫或文件中),節點海量,構建二叉樹時,速度有影響.
    
問題2:節點海量,也會造成二叉樹的高度很大,會降低操作速度.
    
解決上述問題 ---> 多叉樹    

多叉樹

1.在二叉樹中,每個節點有數據項,最多有兩個子節點。如果允許每個節點可以有更多的數據項和更多的子節點,就是多叉樹(multiway tree)
2.後面敘述的2-3樹,2-3-4樹就是多叉樹,多叉樹通過重新組織節點,減少樹的高度,能對二叉樹進行優化。
3.舉例說明(下面2-3樹就是一顆多叉樹)

在這裏插入圖片描述

B樹的基本介紹

B樹通過重新組織節點,降低樹的高度,並且減少讀寫次數來提升效率。

在這裏插入圖片描述

1.如圖B樹通過重新組織節點,降低了樹的高度.
2.文件系統及數據庫系統的設計者利用了磁盤預讀原理,將一個節點的大小設爲等於一個頁(頁得大小通常爲4k),這樣每個節點只需要一次I/O就可以完全載入.
3.將樹的度M設置爲1024,在600億個元素中最多隻需要4次I/O操作就可以讀取到想要的元素, B樹(B+)廣泛應用於文件存儲系統以及數據庫系統中.

2-3樹

2-3樹基本介紹

  • 2-3樹是最簡單的B樹結構, 具有如下特點:
    • 2-3樹的所有葉子節點都在同一層.(只要是B樹都滿足這個條件)
    • 有兩個子節點的節點叫二節點,二節點要麼沒有子節點,要麼有兩個子節點.
    • 有三個子節點的節點叫三節點,三節點要麼沒有子節點,要麼有三個子節點.
    • 2-3樹是由二節點和三節點構成的樹。

2-3樹應用案例

將數列{16, 24, 12, 32, 14, 26, 34, 10, 8, 28, 38, 20} 構建成2-3樹,並保證數據插入的大小順序。

(演示構建2-3樹的過程 ——> 如下:)

插入規則:
1.2-3樹的所有葉子節點都在同一層.(只要是B樹都滿足這個條件)
2.有兩個子節點的節點叫二節點,二節點要麼沒有子節點,要麼有兩個子節點.
3.有三個子節點的節點叫三節點,三節點要麼沒有子節點,要麼有三個子節點
4.當按照規則插入一個數到某個節點時,不能滿足上面三個要求,就需要拆,先向上拆,如果上層滿,則拆本層,拆後仍然需要滿足上面3個條件。 
5.對於三節點的子樹的值大小仍然遵守(BST 二叉排序樹)的規則

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

說明:
1. 當插入10時,應當在 10 - 12 -14 這個位置,但是這時滿了,因此向上層看, 16-26 也滿了
2. 因此將 10-12-14 拆 成  10 <-12->14, 因爲其它拆法,不能滿足 二節點或三節點的要求.

在這裏插入圖片描述

3. 但是這時,葉子節點沒有全部在同一層,需要調整26 這個值到下面(如圖)

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

其它說明

除了23樹,還有234樹等,概念和23樹類似,也是一種B樹。 如圖:

在這裏插入圖片描述

B樹、B+樹和B*樹

B樹的介紹

B-tree樹即B,B即Balanced,平衡的意思。有人把B-tree翻譯成B-樹,容易讓人產生誤解。會以爲B-樹是一種樹,而B樹又是另一種樹。實際上,B-tree就是指的B樹。

  • 前面已經介紹了2-3樹和2-3-4樹,他們就是B樹(英語:B-tree 也寫成B-樹),這裏我們再做一個說明,我們在學習Mysql時,經常聽到說某種類型的索引是基於B樹或者B+樹的,如圖:

在這裏插入圖片描述

B樹的說明:
1.B樹的階:節點的最多子節點個數。比如2-3樹的階是32-3-4樹的階是4
2.B-樹的搜索,從根結點開始,對結點內的關鍵字(有序)序列進行二分查找,如果命中則結束,否則進入查詢關鍵字所屬範圍的兒子結點;重複,直到所對應的兒子指針爲空,或已經是葉子結點
3.關鍵字集合分佈在整顆樹中, 即葉子節點和非葉子節點都存放數據.
4.搜索有可能在非葉子結點結束
5.其搜索性能等價於在關鍵字全集內做一次二分查找

B+樹的介紹

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

在這裏插入圖片描述

B+樹的說明:
1.B+樹的搜索與B樹也基本相同,區別是B+樹只有達到葉子結點才命中(B樹可以在非葉子結點命中),其性能也等價於在關鍵字全集做一次二分查找
2.所有關鍵字都出現在葉子結點的鏈表中(即數據只能在葉子節點【也叫稠密索引】),且鏈表中的關鍵字(數據)恰好是有序的。
3.不可能在非葉子結點命中
4.非葉子結點相當於是葉子結點的索引(稀疏索引),葉子結點相當於是存儲(關鍵字)數據的數據層
5.更適合文件索引系統
6.B樹和B+樹各有自己的應用場景,不能說B+樹完全比B樹好,反之亦然.

B*樹的介紹

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

在這裏插入圖片描述

B*樹的說明:
1.B*樹定義了非葉子結點關鍵字個數至少爲(2/3)*M,即塊的最低使用率爲2/3,而B+樹的塊的最低使用率爲B+樹的1/22.從第1個特點我們可以看出,B*樹分配新結點的概率比B+樹要低,空間使用率更高

本章思維導圖

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章