多路查詢樹

2021-10-02 04:21:31 字數 2361 閱讀 4052

二叉樹的操作效率較高,但也存在問題》

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

問題1:在構建二叉樹時,需要多次進行io操作(海量資料存在資料庫或檔案中),節點海量,構建二叉樹時,速度有影響

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

在二叉樹中,每個節點有資料項,最多有兩個子節點。如果允許每個節點可以有更多的資料項和更多的子節點,就是多叉樹

後面我們講解的2-3樹。2-3-4樹就是多叉樹,多叉樹通過重新組織節點,減少樹的高度,能對二叉樹進行優化(資料庫索引b樹,b+樹)

b樹聽過重新組織節點,降低樹的高度,並且減少io讀寫次數來提公升效率

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

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

有兩個子節點的節點叫二節點,三節點要麼沒有子節點,要麼有兩個子節點

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

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

構建2-3樹

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

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

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

當按照規則插入乙個資料時,不能能滿足上面三個要求時,就需要拆,如果上層滿則拆本層,拆後仍然需要滿足上面三個條件

對於三節點的子樹的值大小仍然遵守二叉排序樹的規則

慕課網 bobo老師

例子

將數列[16,24,12,14,26,34,20,8,38,38,30]構建成2-3樹。

除了23樹,還有234樹,概念和23樹類似,也是一種b樹

b-tree樹即b樹,b即平衡的意思,

前面已經介紹了2-3樹和2-3-4樹,他們就是b樹,這裡我們再做乙個說明,我們在學習mysql時,經常聽說到某種型別的索引是基於b樹或b+樹,如圖:

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

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

關鍵字集合分布在整棵樹中,即葉子節點和非葉子節點都存放資料』

搜尋有可能在非葉子節點結束

其搜尋效能等價於在關鍵字全集內左一次二分查詢

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

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

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

不可能在非葉子節點命中

非葉子節點相當與是葉族節點的索引(稀疏索引),葉子節點相當於是儲存資料的資料層

更適和檔案索引系統

b樹和b+樹各有自己的應用場景,不能說b+樹完全比b樹好,反之亦然

b*樹是b+樹的變體,在b+樹的非根與非葉子節點再增加指向兄弟的兄弟的指標、

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

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

多路查詢樹

二叉樹的操作效率較高,但是也存在問題,請看下面的二叉樹 二叉樹需要載入到記憶體的,如果二叉樹的節點少,沒有什麼問題,但是如果二叉樹的節點很多 比如1億 就 存在如下問題 問題1 在構建二叉樹時,需要多次進行i o操作 海量資料存在資料庫或檔案中 節點海量,構建二叉樹時,速度有影響 問題2 節點海量,...

多路查詢樹

二叉樹的操作效率較高,但是也存在問題 二叉樹需要載入到記憶體的,如果二叉樹的節點少,沒有什麼問題,但是如果二叉樹的節點很多 比如1億 就存在如下問題 問題1 在構建二叉樹時,需要多次進行i o操作 海量資料存在資料庫或檔案中 節點海量,構建二叉樹時,速度有影響 問題2 節點海量,也會造成二叉樹的高度...

多路查詢樹 B樹

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