婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 數(shù)據(jù)結構-樹(三):多路搜索樹B樹、B+樹

數(shù)據(jù)結構-樹(三):多路搜索樹B樹、B+樹

熱門標簽:福建外呼電銷機器人加盟 400電話申請廠家現(xiàn)貨 徐涇鎮(zhèn)騰訊地圖標注 昌德訊外呼系統(tǒng) 電話機器人的價格多少錢一個月 中國地圖標注公司 百度地圖標注要什么軟件 天津公司外呼系統(tǒng)軟件 自己做地圖標注需要些什么

多路搜索樹

  1. 完全二叉樹高度:O(log2N),其中2為對數(shù)
  2. 完全M路搜索樹的高度:O(logmN),其中M為對數(shù),樹每層的節(jié)點數(shù)
  3. M路搜索樹主要用于解決數(shù)據(jù)量大無法全部加載到內(nèi)存的數(shù)據(jù)存儲。通過增加每層節(jié)點的個數(shù)和在每個節(jié)點存放更多的數(shù)據(jù)來在一層中存放更多的數(shù)據(jù),從而降低樹的高度,在數(shù)據(jù)查找時減少磁盤訪問次數(shù)。
  4. 所以每層的節(jié)點數(shù)和每個節(jié)點包含的關鍵字越多,則樹的高度越矮。但是在每個節(jié)點確定數(shù)據(jù)就越慢,但是B樹關注的是磁盤性能瓶頸,所以在單個節(jié)點搜索數(shù)據(jù)的開銷可以忽略。

 B樹

B樹是一種M路搜索樹,B樹主要用于解決M路搜索樹的不平衡導致樹的高度變高,跟二叉樹退化為鏈表導致性能問題一樣。B樹通過對每層的節(jié)點進行控制、調(diào)整,如節(jié)點分離,節(jié)點合并,一層滿時向上分裂父節(jié)點來增加新的層等操作來來保證該M路搜索樹的平衡。具體規(guī)則如下:

  1. 根節(jié)點的兒子樹個數(shù)在2到M之間,其他非葉子節(jié)點的兒子樹個數(shù)在M/2和M之間。如果兒子樹個數(shù)因為分裂超過了M則此時需要向上遞歸分裂父節(jié)點,當找到一個不需要再分裂的父節(jié)點則停止分裂。該分裂過程直到根節(jié)點,如果需要分裂根節(jié)點,則會產(chǎn)生兩個根,故需要創(chuàng)建一個新的根來將這兩個根作為兒子節(jié)點,此時樹的高度會增加1。
  2. 每個非葉子節(jié)點的關鍵字的值從左到右依次變大,第i個關鍵字代表子樹i+1中的最小關鍵字;(其中對于根節(jié)點來說i在1到(2到M)之間,其他非葉子節(jié)點則是1到(M/2到M)之間);
  3. B樹的所有數(shù)據(jù)項都存放到葉子節(jié)點,非葉子節(jié)點不存放數(shù)據(jù),非葉子節(jié)點只存放用于指示搜索方向的關鍵字,即索引。這樣有利于將更多的非葉子節(jié)點加載到內(nèi)存中,方便進行數(shù)據(jù)查找;
  4. 所有葉子節(jié)點都在相同的深度并且每個葉子節(jié)點包含L/2到L項數(shù)據(jù)。

 M和L的大小選擇

  1. M為B樹的階數(shù)或者說是路數(shù)
  2. L為每個葉子節(jié)點最多存放的數(shù)據(jù)項個數(shù)
  3. 在B樹中,每個節(jié)點都是一個磁盤區(qū)塊,所以需要根據(jù)磁盤區(qū)塊的大小來決定M和L。

 磁盤區(qū)塊大小與M的計算

  1. 每個非葉子節(jié)點存放了關鍵字和指向兒子樹的指針,具體數(shù)量為:M階的B樹,每個非葉子節(jié)點存放了M-1個關鍵字和M個指向兒子樹的指針,故加入每個關鍵字的大小為8字節(jié)(如Java的long類型就是8字節(jié)),每個指針為4字節(jié),則M階B樹的每個非一葉子節(jié)點需要:8 * (M-1) + 4 * M = 12M - 8個字節(jié)。
  2. 如果規(guī)定每個非葉子節(jié)點(磁盤區(qū)塊)占用內(nèi)存不超過8K,即8192,則M最大為683,即683*12-8=8192。

 葉子節(jié)點數(shù)據(jù)項個數(shù)L

  1. 假如每個數(shù)據(jù)項大小也是256字節(jié),則由于磁盤區(qū)塊大小為8K,即8192個字節(jié),而每個葉子節(jié)點可以存放L/2到L個數(shù)據(jù)項,所以每個葉子節(jié)點最多存放:8192/256=32個數(shù)據(jù)項,即L的大小為32。
  2. 一棵5階的B樹的結構如下,即M和L等于5:其中每個非葉子節(jié)點包含最多M-1=5-1=4個關鍵字,包含M,即5個指向子樹指針。L等于5,則每個葉子節(jié)點最多存放5個數(shù)據(jù)項。

 

B+樹

B+樹結構跟B樹基本一致,唯一的區(qū)別是B+樹的葉子節(jié)點之間通過指針相連形成一個鏈表,故便于遍歷所有的葉子節(jié)點,即獲取所有或者搜索關鍵字某一范圍的所有數(shù)據(jù)項。MySQL的InnoDB存儲引擎就是會用B+樹作為索引實現(xiàn)。

以上所述是小編給大家介紹的多路搜索樹B樹、B+樹詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

您可能感興趣的文章:
  • MySQL優(yōu)化中B樹索引知識點總結
  • 淺談MySQL的B樹索引與索引優(yōu)化小結
  • 完整B樹算法Java實現(xiàn)代碼
  • c語言B樹深入理解

標簽:昌都 北京 陜西 荊門 梅河口 黔西 駐馬店 鄂爾多斯

巨人網(wǎng)絡通訊聲明:本文標題《數(shù)據(jù)結構-樹(三):多路搜索樹B樹、B+樹》,本文關鍵詞  數(shù)據(jù)結構,樹,三,多路,搜索,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《數(shù)據(jù)結構-樹(三):多路搜索樹B樹、B+樹》相關的同類信息!
  • 本頁收集關于數(shù)據(jù)結構-樹(三):多路搜索樹B樹、B+樹的相關信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 枣庄市| 东方市| 阿荣旗| 河津市| 旌德县| 九江市| 河南省| 凌源市| 宁蒗| 宿迁市| 当涂县| 长海县| 邛崃市| 金华市| 胶南市| 和顺县| 花莲县| 双峰县| 乌什县| 丹凤县| 洛阳市| 蒙自县| 息烽县| 阿拉善左旗| 新干县| 开封县| 延边| 独山县| 新宁县| 乡宁县| 松江区| 成都市| 阳东县| 城固县| 永寿县| 玉溪市| 西华县| 茌平县| 桃江县| 临泉县| 汝阳县|