B樹(B樹 ,B 樹 ,B 樹)與多叉樹

2021-10-03 14:15:19 字數 2244 閱讀 5384

我們先來看看二叉樹存在的問題

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

二叉樹需要載入到記憶體的,如果二叉樹的節點少,沒有什麼問題,但是如果二叉樹的節點很多(比如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樹

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

除了2-3樹,還有2-3-4樹,概念和2-3樹類似,也是b樹,如圖:

b樹b-tree即b樹,b即balanced,平衡的意思,b-tree就是指的b樹.

2-3樹和2-3-4樹,他們就是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+樹完全比b樹好,反之亦然.

b*樹

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

如圖:

b樹的說明:

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

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

B樹,B 樹,B 樹,B 樹

小彰的部落格 b樹 即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比結點...

B樹 B 樹 B 樹 B 樹

b 樹即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left 和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比結點關鍵字小,就...

B樹 B 樹 B 樹 B 樹

b樹 即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比結點關鍵字小,就進...