溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

什么是Java多路查找樹

發(fā)布時間:2021-10-14 16:06:26 來源:億速云 閱讀:138 作者:iii 欄目:編程語言

本篇內(nèi)容主要講解“什么是Java多路查找樹”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“什么是Java多路查找樹”吧!

什么是Java多路查找樹

 二叉樹的問題分析

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

什么是Java多路查找樹

二叉樹需要加載到內(nèi)存,如果二叉樹的節(jié)點少,沒有什么問題,但是如果二叉樹的節(jié)點很多(比如1億),就存在如下問題:

  1. 鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)

  2. 在構(gòu)建二叉樹時,需要多次進行I/O操作(海量數(shù)據(jù)存在數(shù)據(jù)庫或文件中),節(jié)點海量,構(gòu)建樹時,速度有影響。

  3. 節(jié)點海量,也會造成二叉樹的高度很大,會降低操作速度。

多叉樹

  1. 鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)

  2. 在二叉樹中,每個節(jié)點有數(shù)據(jù)項,最多有兩個子節(jié)點。如果允許每個節(jié)點可以有更多的數(shù)據(jù)項和更多的節(jié)點,就是多叉樹(multiway tree).

  3. 如2-3樹,2-3-4樹就是多叉樹,多叉樹通過重新組織節(jié)點,減少樹的高度,能對二叉樹進行優(yōu)化。

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

什么是Java多路查找樹

B樹的基本介紹

B-Tree 樹即B樹,B即Balanced,平衡的意思。在mysql中說某種類型的索引是基于B樹或者B+樹,如下圖:

什么是Java多路查找樹

B樹說明:

  1. 鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)

  2. B樹的階:節(jié)點的最多子節(jié)點個數(shù),比如2-3樹的階是3,2-3-4樹的階是4.

  3. B樹的搜索:從根節(jié)點開始,對節(jié)點內(nèi)的關(guān)鍵字(有序)序列進行二分查找,如果命中則結(jié)束,否則進入查詢關(guān)鍵字所屬范圍的子節(jié)點;重復(fù),直到所對應(yīng)的子指針為空,或已經(jīng)是葉子節(jié)點。

  4. 關(guān)鍵字集合分布在整棵樹中,即葉子節(jié)點和非葉子節(jié)點都存放數(shù)據(jù)。

  5. 搜索可能在非葉子節(jié)點結(jié)束

  6. 其搜索性能等價于在關(guān)鍵字內(nèi)全集做一次二分查找。

B樹通過重新組織節(jié)點,降低樹的高度,并減少I/O讀寫次數(shù)來提升效率。

什么是Java多路查找樹

  1. 鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)

  2. 如圖B樹通過重新組織節(jié)點,降低了樹的高度。

  3. 文件系統(tǒng)及數(shù)據(jù)庫系統(tǒng)的設(shè)計者利用了磁盤預(yù)讀原理,將一個節(jié)點的大小設(shè)為等于一個頁(頁的大小通常為4k),這樣每個節(jié)點只需一次I/O就可以完全載入。

  4. 將樹的度M(樹中某個父節(jié)點含有最多子節(jié)點的個數(shù))設(shè)置為1024,在600億個元素中,最多只需4次I/O操作就可以讀取到想要的元素,B樹廣泛用于文件存儲系統(tǒng)及數(shù)據(jù)庫系統(tǒng)中。

B+樹基本介紹

B+樹是B樹的變體,也是一種多路查找樹

什么是Java多路查找樹

B+樹說明:

  1. 鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)

  2. B+樹的搜索與B樹也基本相同,區(qū)別是B+樹只有達到葉子節(jié)點才能命中(B樹可以在非葉子節(jié)點命中),其性能也等價于在關(guān)鍵字全集做一次二分查找。

  3. 所有關(guān)鍵字出現(xiàn)在葉子節(jié)點的鏈表中(即數(shù)據(jù)只能在葉子節(jié)點【也叫稠密索引】),且鏈表中的關(guān)鍵字(數(shù)據(jù))恰好是有序的。

  4. 不可能在非葉子節(jié)點命中。

  5. 非葉子節(jié)點相當于葉子節(jié)點的索引(稀疏索引),葉子節(jié)點相當于是存儲(關(guān)鍵字)數(shù)據(jù)的數(shù)據(jù)層。

  6. 更適合文件索引系統(tǒng)。

  7. B樹和B+樹各有自己的場景,不能說B+樹完全比B樹好,反之亦然。

B*樹基本介紹

B* 樹是 B+ 樹的變體,在B+樹的非根和非葉子節(jié)點再增加指向兄弟的指針。

什么是Java多路查找樹

B 樹說明:*

  1. 鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)

  2. B*樹定義了非葉子節(jié)點關(guān)鍵字個數(shù)至少為(2/3)*M,即塊的最低使用率為2/3,而B+樹的塊的最低使用率1/2。

  3. 從第一個特點可以看出,B*樹分配新節(jié)點的概率要比B+樹要低,空間使用率更高。

2-3樹基本介紹(最簡單的B樹)

2-3樹是最簡單的B-樹結(jié)構(gòu),具有如下特點:

  1. 鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)

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

  3. 有兩個子節(jié)點的節(jié)點叫做二節(jié)點,二節(jié)點要么沒有子節(jié)點,要么有兩個子節(jié)點。

  4. 有三個子節(jié)點的節(jié)點叫做三節(jié)點,三節(jié)點要么沒有子節(jié)點,要么有三個子節(jié)點。

  5. 2-3是由二節(jié)點和三節(jié)點構(gòu)成的樹。

2-3樹的插入規(guī)則:

  1. 鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)

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

  3. 有兩個子節(jié)點的節(jié)點叫做二節(jié)點,二節(jié)點要么沒有子節(jié)點,要么有兩個子節(jié)點。

  4. 有三個子節(jié)點的節(jié)點叫做三節(jié)點,三節(jié)點要么沒有子節(jié)點,要么有三個子節(jié)點。

  5. 當按照規(guī)則插入一個數(shù)到某個節(jié)點時,不能滿足上面三個要求,就需要拆,先向上拆,如果上層滿,則拆本層,拆后仍然需要滿足上面三個條件。

  6. 對于三節(jié)點的子樹的值大小仍然滿足(BST二叉排序樹)的規(guī)則。

到此,相信大家對“什么是Java多路查找樹”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI