資料結構 多路查詢樹概念

2021-10-03 09:22:05 字數 2763 閱讀 2721

目錄

二叉樹問題分析

多叉樹b樹的基本介紹

2-3樹

構建規則

應用舉例

b+樹的介紹

b*樹的介紹

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

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

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

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

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

首先明白兩個概念,節點的度和樹的度

在樹中,結點有幾個分叉,節點的度就是幾。而樹的度就是整棵樹中最大的節點度值

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

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

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

2-3樹是最簡單的b樹結構,具有以下特點

1)、所有的葉子節點都在同一層(所有b樹都滿足這個特點)

2)、有兩個子節點的節點叫二節點,二節點要麼沒有子節點,要麼有兩個子節點;

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

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

1)、所有的葉子節點都在同一層;

2)、有兩個子節點的節點叫二節點,二節點要麼沒有子節點,要麼有兩個子節點;

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

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

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

將數列構建成2-3樹,並保證資料插入的大小順序。

除了2-3樹,還有2-3-4樹,概念、特點與新增步驟與2-3樹類似,也是一種b樹。如下圖:

b-tree樹即b樹,b即balanced,平衡的意思,有的也翻譯成b-樹,在學習mysql時,經常聽到說某種型別的索引是基於b樹或者b+樹的,如圖:

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

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

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

4)、搜尋有可能在非葉子節點結束;

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

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

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

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

3)、不可能在非葉子節點命中

4)、非葉子節點相當於是葉子節點的索引【稀疏索引】,葉子節點相當於是儲存(關鍵字)資料的資料層;

5)、更適合檔案索引系統;

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

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

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

2)、b*樹分配新節點的概率比b+樹要低,空間使用率更高

資料結構之 多路查詢樹

計算機的儲存一般分為兩種 1 記憶體儲存,2 硬碟儲存 記憶體的儲存一般用作cpu的快取記憶體,而我們的硬碟的資料可永久儲存。現在我們使用的硬碟一般分為機械硬碟和固態硬碟兩種,前者的讀取資料速度較慢,但是造價低,後者讀取資料速度快,但是造價較高。考慮到成本因數,一般較多使用的還是機械硬碟。因為機械硬...

多路查詢樹之2 3樹 資料結構和演算法79

讓程式設計改變世界 change the world by program 關於多路查詢樹的講解,我們在這系列教程中主要以b樹來講。別誤會哈,小甲魚沒有罵人,ta真就叫b樹,b 樹。但是我們現在還不能直接講這個,因為直接講不容易接受,所以我們先談下b樹的兩個特例 2 3樹和2 3 4樹。我們要談b樹...

多路查詢樹

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