二叉樹的問題分析
- 二叉樹需要加載到內存的,如果二叉樹的節點少,沒有什麼問題,但是如果二叉樹的節點很多(比如1億), 就存在如下問題:
- 問題1:在構建二叉樹時,需要多次進行i/o操作(海量數據存在數據庫或文件中),節點海量,構建二叉樹時,速度有影響
- 問題2:節點海量,也會造成二叉樹的高度很大,會降低操作速度.
多叉樹
- 在二叉樹中,每個節點有數據項,最多有兩個子節點。如果允許每個節點可以有更多的數據項和更多的子節點,就是多叉樹(multiway tree)
- 後面我們講解的2-3樹,2-3-4樹就是多叉樹,多叉樹通過重新組織節點,減少樹的高度,能對二叉樹進行優化。
舉例說明(下面2-3樹就是一顆多叉樹)
B樹的基本介紹
B樹通過重新組織節點,降低樹的高度,並且減少i/o讀寫次數來提升效率。
- 如圖B樹通過重新組織節點, 降低了樹的高度.
- 文件系統及數據庫系統的設計者利用了磁盤預讀原理,將一個節點的大小設爲等於一個頁(頁得大小通常爲4k),這樣每個節點只需要一次I/O就可以完全載入
- 將樹的度M設置爲1024,在600億個元素中最多只需要4次I/O操作就可以讀取到想要的元素, B樹(B+)廣泛應用於文件存儲系統以及數據庫系統中
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樹的過程.)
插入規則:
- 2-3樹的所有葉子節點都在同一層.(只要是B樹都滿足這個條件)
- 有兩個子節點的節點叫二節點,二節點要麼沒有子節點,要麼有兩個子節點.
- 有三個子節點的節點叫三節點,三節點要麼沒有子節點,要麼有三個子節點
- 當按照規則插入一個數到某個節點時,不能滿足上面三個要求,就需要拆,先向上拆,如果上層滿,則拆本層,拆後仍然需要滿足上面3個條件。
- 對於三節點的子樹的值大小仍然遵守(BST 二叉排序樹)的規則