二叉樹的操作效率較高,但是也存在問題
二叉樹需要載入到記憶體的,如果二叉樹的節點少,沒有什麼問題,但是如果二叉樹的節點很多(比如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樹的所有葉子節點都在同一層(只要是b樹都滿足這個條件)
有兩個子節點的節點叫二節點,二節點要麼沒有子節點,要麼有兩個子節點.
有三個子節點的節點叫三節點,三節點要麼沒有子節點,要麼有三個子節點.
2-3樹是由二節點和三節點構成的樹。
除了2-3樹還有234樹
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樹的說明b樹的階:節點的最多子節點個數。比如2-3樹的階是3,2-3-4樹的階是4
b-樹的搜尋,從根結點開始,對結點內的關鍵字(有序)序列進行二分查詢,如果命中則結束,否則進入查詢關鍵字所屬範圍的兒子結點;重複,直到所對應的兒子指標為空,或已經是葉子結點
關鍵字集合分布在整顆樹中, 即葉子節點和非葉子節點都存放資料.
搜尋有可能在非葉子結點結束
其搜尋效能等價於在關鍵字全集內做一次二分查詢
b+樹是b樹的變體,也是一種多路搜尋樹。
b+樹的說明b+樹的搜尋與b樹也基本相同,區別是b+樹只有達到葉子結點才命中(b樹可以在非葉子結點命中),其效能也等價於在關鍵字全集做一次二分查詢
所有關鍵字都出現在葉子結點的鍊錶中(即資料只能在葉子節點【也叫稠密索引】),且鍊錶中的關鍵字(資料)恰好是有序的。
不可能在非葉子結點命中
非葉子結點相當於是葉子結點的索引(稀疏索引),葉子結點相當於是儲存(關鍵字)資料的資料層
更適合檔案索引系統
b樹和b+樹各有自己的應用場景,不能說b+樹完全比b樹好,反之亦然.
多路查詢樹
二叉樹的操作效率較高,但是也存在問題,請看下面的二叉樹 二叉樹需要載入到記憶體的,如果二叉樹的節點少,沒有什麼問題,但是如果二叉樹的節點很多 比如1億 就 存在如下問題 問題1 在構建二叉樹時,需要多次進行i o操作 海量資料存在資料庫或檔案中 節點海量,構建二叉樹時,速度有影響 問題2 節點海量,...
多路查詢樹
二叉樹的操作效率較高,但也存在問題 二叉樹需要載入到記憶體,如果二叉樹的節點少,沒有什麼問題,但是如果二叉樹的節點很多 比如1億 就存在如下問題 問題1 在構建二叉樹時,需要多次進行io操作 海量資料存在資料庫或檔案中 節點海量,構建二叉樹時,速度有影響 問題2 節點海量,也會造成二叉樹的高度很大,...
多路查詢樹 B樹
多路查詢樹 multi way search tree 其每乙個結點的孩子數可以多於兩個,且每乙個結點處可以儲存多個元素。在這裡,我們講解它的4種特殊形式 2 3樹 2 3 4樹 b樹和b 樹。2 3樹是這樣的一顆多路查詢樹 其中的每乙個結點都具有兩個孩子 我們稱它為2結點 或三個孩子 我們稱它為3...