自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java編程內(nèi)功-數(shù)據(jù)結(jié)構(gòu)與算法「多路查找樹」

開發(fā) 后端 算法
本篇繼續(xù)給大家介紹關(guān)于Java編程的相關(guān)知識,今天主要介紹數(shù)據(jù)結(jié)構(gòu)與算法「多路查找樹」的相關(guān)內(nèi)容。

[[391530]]

 二叉樹的問題分析

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

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

  1. 在構(gòu)建二叉樹時(shí),需要多次進(jìn)行I/O操作(海量數(shù)據(jù)存在數(shù)據(jù)庫或文件中),節(jié)點(diǎn)海量,構(gòu)建樹時(shí),速度有影響。
  2. 節(jié)點(diǎn)海量,也會(huì)造成二叉樹的高度很大,會(huì)降低操作速度。

多叉樹

  1. 在二叉樹中,每個(gè)節(jié)點(diǎn)有數(shù)據(jù)項(xiàng),最多有兩個(gè)子節(jié)點(diǎn)。如果允許每個(gè)節(jié)點(diǎn)可以有更多的數(shù)據(jù)項(xiàng)和更多的節(jié)點(diǎn),就是多叉樹(multiway tree).
  2. 如2-3樹,2-3-4樹就是多叉樹,多叉樹通過重新組織節(jié)點(diǎn),減少樹的高度,能對二叉樹進(jìn)行優(yōu)化。
  3. 舉例說明(下面的2-3樹)就是一顆多叉樹

B樹的基本介紹

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

B樹說明:

  1. B樹的階:節(jié)點(diǎn)的最多子節(jié)點(diǎn)個(gè)數(shù),比如2-3樹的階是3,2-3-4樹的階是4.
  2. B樹的搜索:從根節(jié)點(diǎn)開始,對節(jié)點(diǎn)內(nèi)的關(guān)鍵字(有序)序列進(jìn)行二分查找,如果命中則結(jié)束,否則進(jìn)入查詢關(guān)鍵字所屬范圍的子節(jié)點(diǎn);重復(fù),直到所對應(yīng)的子指針為空,或已經(jīng)是葉子節(jié)點(diǎn)。
  3. 關(guān)鍵字集合分布在整棵樹中,即葉子節(jié)點(diǎn)和非葉子節(jié)點(diǎn)都存放數(shù)據(jù)。
  4. 搜索可能在非葉子節(jié)點(diǎn)結(jié)束
  5. 其搜索性能等價(jià)于在關(guān)鍵字內(nèi)全集做一次二分查找。

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

  1. 如圖B樹通過重新組織節(jié)點(diǎn),降低了樹的高度。
  2. 文件系統(tǒng)及數(shù)據(jù)庫系統(tǒng)的設(shè)計(jì)者利用了磁盤預(yù)讀原理,將一個(gè)節(jié)點(diǎn)的大小設(shè)為等于一個(gè)頁(頁的大小通常為4k),這樣每個(gè)節(jié)點(diǎn)只需一次I/O就可以完全載入。
  3. 將樹的度M(樹中某個(gè)父節(jié)點(diǎn)含有最多子節(jié)點(diǎn)的個(gè)數(shù))設(shè)置為1024,在600億個(gè)元素中,最多只需4次I/O操作就可以讀取到想要的元素,B樹廣泛用于文件存儲(chǔ)系統(tǒng)及數(shù)據(jù)庫系統(tǒng)中。

B+樹基本介紹

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

B+樹說明:

  1. B+樹的搜索與B樹也基本相同,區(qū)別是B+樹只有達(dá)到葉子節(jié)點(diǎn)才能命中(B樹可以在非葉子節(jié)點(diǎn)命中),其性能也等價(jià)于在關(guān)鍵字全集做一次二分查找。
  2. 所有關(guān)鍵字出現(xiàn)在葉子節(jié)點(diǎn)的鏈表中(即數(shù)據(jù)只能在葉子節(jié)點(diǎn)【也叫稠密索引】),且鏈表中的關(guān)鍵字(數(shù)據(jù))恰好是有序的。
  3. 不可能在非葉子節(jié)點(diǎn)命中。
  4. 非葉子節(jié)點(diǎn)相當(dāng)于葉子節(jié)點(diǎn)的索引(稀疏索引),葉子節(jié)點(diǎn)相當(dāng)于是存儲(chǔ)(關(guān)鍵字)數(shù)據(jù)的數(shù)據(jù)層。
  5. 更適合文件索引系統(tǒng)。
  6. B樹和B+樹各有自己的場景,不能說B+樹完全比B樹好,反之亦然。

B*樹基本介紹

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

B 樹說明:*

  1. B*樹定義了非葉子節(jié)點(diǎn)關(guān)鍵字個(gè)數(shù)至少為(2/3)*M,即塊的最低使用率為2/3,而B+樹的塊的最低使用率1/2。
  2. 從第一個(gè)特點(diǎn)可以看出,B*樹分配新節(jié)點(diǎn)的概率要比B+樹要低,空間使用率更高。

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

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

  1. 2-3樹的所有葉子節(jié)點(diǎn)都在同一層。(只要是B樹都滿足這個(gè)條件)
  2. 有兩個(gè)子節(jié)點(diǎn)的節(jié)點(diǎn)叫做二節(jié)點(diǎn),二節(jié)點(diǎn)要么沒有子節(jié)點(diǎn),要么有兩個(gè)子節(jié)點(diǎn)。
  3. 有三個(gè)子節(jié)點(diǎn)的節(jié)點(diǎn)叫做三節(jié)點(diǎn),三節(jié)點(diǎn)要么沒有子節(jié)點(diǎn),要么有三個(gè)子節(jié)點(diǎn)。
  4. 2-3是由二節(jié)點(diǎn)和三節(jié)點(diǎn)構(gòu)成的樹。

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

  1. 2-3樹的所有葉子節(jié)點(diǎn)都在同一層。(只要是B樹都滿足這個(gè)條件)。
  2. 有兩個(gè)子節(jié)點(diǎn)的節(jié)點(diǎn)叫做二節(jié)點(diǎn),二節(jié)點(diǎn)要么沒有子節(jié)點(diǎn),要么有兩個(gè)子節(jié)點(diǎn)。
  3. 有三個(gè)子節(jié)點(diǎn)的節(jié)點(diǎn)叫做三節(jié)點(diǎn),三節(jié)點(diǎn)要么沒有子節(jié)點(diǎn),要么有三個(gè)子節(jié)點(diǎn)。
  4. 當(dāng)按照規(guī)則插入一個(gè)數(shù)到某個(gè)節(jié)點(diǎn)時(shí),不能滿足上面三個(gè)要求,就需要拆,先向上拆,如果上層滿,則拆本層,拆后仍然需要滿足上面三個(gè)條件。
  5. 對于三節(jié)點(diǎn)的子樹的值大小仍然滿足(BST二叉排序樹)的規(guī)則。

 

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2021-03-18 08:44:20

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-04-23 09:12:09

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-03-24 10:41:04

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-04-13 09:37:41

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-03-09 06:30:32

JAVA數(shù)據(jù)結(jié)構(gòu)算法

2021-05-12 09:07:09

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-05-08 08:28:38

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-03-17 09:27:36

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-03-10 08:42:19

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-03-08 06:28:57

JAVA數(shù)據(jù)結(jié)構(gòu)與算法稀疏數(shù)組

2021-03-23 08:33:22

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-03-12 09:13:47

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-03-26 08:40:28

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-04-27 06:21:29

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-03-19 10:25:12

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-03-29 10:13:47

Java編程數(shù)據(jù)結(jié)構(gòu)算法

2021-04-01 10:34:18

Java編程數(shù)據(jù)結(jié)構(gòu)算法

2021-04-15 09:36:44

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-04-22 10:07:45

Java數(shù)據(jù)結(jié)構(gòu)算法

2021-03-14 08:27:40

Java數(shù)據(jù)結(jié)構(gòu)算法
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號