1. 程式人生 > 實用技巧 >多路查詢樹

多路查詢樹

多路查詢樹

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

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

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

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

多叉樹

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

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

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

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

2)檔案系統及資料庫系統的設計者利用了磁碟預讀原理,將一個節點的大小設為等於一個頁(頁得大小通常為4k),這樣每個節點只需要一次I/O就可以完全載入

3)將樹的度M設定為1024,在600億個元素中最多隻需要4次I/O操作就可以讀取到想要的元素, B樹(B+)廣泛應用於檔案儲存系統以及資料庫系統中

2-3樹基本介紹

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

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

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

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

除了2-3樹還有234樹

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樹的階是3,2-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樹好,反之亦然.