多路查詢樹

2021-09-27 08:28:45 字數 2706 閱讀 6468

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

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

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

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

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

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

舉例說明(下面2-3樹就是一顆多叉樹)

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

如圖b樹通過重新組織節點,降低了樹的高度.

檔案系統及資料庫系統的設計者利用了磁碟預讀原理,將乙個節點的大小設為等於乙個頁(頁得大小通常為4k),

這樣每個節點只需要一次 i/o 就可以完全載入

將樹的度m設定為1024,在600億個元素中最多隻需要4次i/o操作就可以讀取到想要的元素,b樹(b+)廣泛

應用於檔案儲存系統以及資料庫系統中

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

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

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

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

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

插入規則:

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

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

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

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

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

除了 23 樹,還有 234 樹等,概念和 23 樹類似,也是一種 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 樹的階:節點的最多子節點個數。比如 2-3 樹的階是 3,2-3-4 樹的階是 4

b-樹的搜尋,從根結點開始,對結點內的關鍵字(有序)序列進行二分查詢,如果命中則結束,否則進入查詢

關鍵字所屬範圍的兒子結點;重複,直到所對應的兒子指標為空,或已經是葉子結點

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

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

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

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

對上圖的說明:

b+樹的搜尋與 b 樹也基本相同,區別是 b+樹只有達到葉子結點才命中(b 樹可以在非葉子結點命中),其性

能也等價於在關鍵字全集做一次二分查詢

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

恰好是有序的。

不可能在非葉子結點命中

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

更適合檔案索引系統

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

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

b樹的說明:

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

多路查詢樹

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

多路查詢樹

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

多路查詢樹 B樹

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