OPPO Watch 2 系列開啟預約:支援心率檢測/eSIM 獨立通訊,7 月 27 日釋出
二叉樹與 B 樹
二叉樹的問題分析
二叉樹的操作效率較高,但是也存在問題, 請看下面的二叉樹
1)二叉樹需要載入到記憶體的,如果二叉樹的節點少,沒有什麼問題,但是如果二叉樹的節點很多(比如 1 億), 就
存在如下問題:
2)問題 1:在構建二叉樹時,需要多次進行 i/o 操作(海量資料存在資料庫或檔案中),節點海量,構建二叉樹時,
速度有影響
3)問題 2:節點海量,也會造成二叉樹的高度很大,會降低操作速度.
多叉樹
1)在二叉樹中,每個節點有資料項,最多有兩個子節點。如果允許每個節點可以有更多的資料項和更多的子節點,
就是多叉樹(multiway tree)
2)後面我們講解的 2-3 樹,2-3-4 樹就是多叉樹,多叉樹通過重新組織節點,減少樹的高度,能對二叉樹進行優化。
3)舉例說明(下面 2-3 樹就是一顆多叉樹)
B 樹的基本介紹
B 樹通過重新組織節點,降低樹的高度,並且減少 i/o 讀寫次數來提升效率
1)如圖 B 樹通過重新組織節點, 降低了樹的高度.
2)檔案系統及資料庫系統的設計者利用了磁碟預讀原理,將一個節點的大小設為等於一個頁(頁得大小通常為 4k),
這樣每個節點只需要一次 I/O 就可以完全載入
3)將樹的度 M 設定為 1024,在 600 億個元素中最多隻需要 4 次 I/O 操作就可以讀取到想要的元素, B 樹(B+)廣泛
應用於檔案儲存系統以及資料庫系統中
2-3 樹
2-3 樹是最簡單的 B 樹結構, 具有如下特點:
1)2-3 樹的所有葉子節點都在同一層.(只要是 B 樹都滿足這個條件)
2)有兩個子節點的節點叫二節點,二節點要麼沒有子節點,要麼有兩個子節點.
3)有三個子節點的節點叫三節點,三節點要麼沒有子節點,要麼有三個子節點.
4)2-3 樹是由二節點和三節點構成的樹。
2-3 樹應用案例
將數列{16, 24, 12, 32, 14, 26, 34, 10, 8, 28, 38, 20} 構建成 2-3 樹,並保證資料插入的大小順序。
插入規則:
1)2-3 樹的所有葉子節點都在同一層.(只要是 B 樹都滿足這個條件)
2)有兩個子節點的節點叫二節點,二節點要麼沒有子節點,要麼有兩個子節點.
3)有三個子節點的節點叫三節點,三節點要麼沒有子節點,要麼有三個子節點
4)當按照規則插入一個數到某個節點時,不能滿足上面三個要求,就需要拆,先向上拆,如果上層滿,則拆本層,
拆後仍然需要滿足上面 3 個條件。
5)對於三節點的子樹的值大小仍然遵守(BST 二叉排序樹)的規則
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+樹的,如圖:
對上圖的說明:
1) B 樹的階:節點的最多子節點個數。比如 2-3 樹的階是 3,2-3-4 樹的階是 4
2)B-樹的搜尋,從根結點開始,對結點內的關鍵字(有序)序列進行二分查詢,如果命中則結束,否則進入查詢
關鍵字所屬範圍的兒子結點;重複,直到所對應的兒子指標為空,或已經是葉子結點
3)關鍵字集合分佈在整顆樹中, 即葉子節點和非葉子節點都存放資料.
4)搜尋有可能在非葉子結點結束
5)其搜尋效能等價於在關鍵字全集內做一次二分查詢
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+樹的塊的最低使用率為的1/2。
2)從第 1 個特點我們可以看出,B*樹分配新結點的概率比 B+樹要低,空間使用率更高