最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2019年04月11日 09:23:38   作者:A-Coder  
這篇文章主要介紹了多路搜索樹(shù)B樹(shù)、B+樹(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

多路搜索樹(shù)

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

 B樹(shù)

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

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

 M和L的大小選擇

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

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

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

 葉子節(jié)點(diǎn)數(shù)據(jù)項(xiàng)個(gè)數(shù)L

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

 

B+樹(shù)

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

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

相關(guān)文章

  • 淺談MYSQL存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)

    淺談MYSQL存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)

    本文主要介紹了淺談MYSQL存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • MySQL:explain結(jié)果中Extra:Impossible?WHERE?noticed?after?reading?const?tables問(wèn)題

    MySQL:explain結(jié)果中Extra:Impossible?WHERE?noticed?after?rea

    這篇文章主要介紹了MySQL:explain結(jié)果中Extra:Impossible?WHERE?noticed?after?reading?const?tables問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 計(jì)算機(jī)管理服務(wù)中找不到mysql的服務(wù)的解決辦法

    計(jì)算機(jī)管理服務(wù)中找不到mysql的服務(wù)的解決辦法

    MySQL是一種流行的開(kāi)源關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),用于存儲(chǔ)和管理大量數(shù)據(jù),在計(jì)算機(jī)管理中,啟動(dòng)MySQL服務(wù)是一項(xiàng)重要的任務(wù),因?yàn)樗梢源_保數(shù)據(jù)庫(kù)系統(tǒng)的順利運(yùn)行,這篇文章主要給大家介紹了關(guān)于計(jì)算機(jī)管理服務(wù)中找不到mysql的服務(wù)的解決辦法,需要的朋友可以參考下
    2023-05-05
  • MySQL筆記之字符串函數(shù)的應(yīng)用

    MySQL筆記之字符串函數(shù)的應(yīng)用

    字符串操作在程序設(shè)計(jì)中是非常重要的組成部分,而MySQL數(shù)據(jù)庫(kù)中的字符串操作卻相當(dāng)簡(jiǎn)單
    2013-05-05
  • 簡(jiǎn)單談?wù)凪ySQL5.7 JSON格式檢索

    簡(jiǎn)單談?wù)凪ySQL5.7 JSON格式檢索

    MySQL 5.7.7 labs版本開(kāi)始InnoDB存儲(chǔ)引擎已經(jīng)原生支持JSON格式,該格式不是簡(jiǎn)單的BLOB類似的替換。下面我們來(lái)詳細(xì)探討下吧
    2017-01-01
  • 數(shù)據(jù)庫(kù)管理中文件的使用教程

    數(shù)據(jù)庫(kù)管理中文件的使用教程

    本文將詳細(xì)介紹數(shù)據(jù)庫(kù)管理中文件的使用,需要了解更多的朋友可以參考下
    2012-11-11
  • Mysql 8 新特性 window functions 的作用

    Mysql 8 新特性 window functions 的作用

    MySQL是眾多網(wǎng)站技術(shù)棧中的標(biāo)準(zhǔn)配置,是廣受歡迎的開(kāi)源數(shù)據(jù)庫(kù),已經(jīng)推出了8.0的第一個(gè)候選發(fā)行版本。接下來(lái)通過(guò)本文給大家分享Mysql 8 新特性 window functions 的作用,需要的朋友參考下吧
    2017-11-11
  • MySQL 整體架構(gòu)介紹

    MySQL 整體架構(gòu)介紹

    這篇文章主要介紹了MySQL 整體架構(gòu)的相關(guān)資料,幫助大家更好的了解和使用MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下
    2020-10-10
  • 通過(guò)mysql-proxy完成mysql讀寫(xiě)分離

    通過(guò)mysql-proxy完成mysql讀寫(xiě)分離

    前不久做了下mysql讀寫(xiě)分離的實(shí)驗(yàn),也參考了很多的資料,謝謝哪些提供資料的兄弟
    2014-05-05
  • 如何通過(guò)配置自動(dòng)實(shí)現(xiàn)ValueList中hql語(yǔ)句的整型參數(shù)轉(zhuǎn)換

    如何通過(guò)配置自動(dòng)實(shí)現(xiàn)ValueList中hql語(yǔ)句的整型參數(shù)轉(zhuǎn)換

    本篇文章是對(duì)通過(guò)配置自動(dòng)實(shí)現(xiàn)ValueList中hql語(yǔ)句的整型參數(shù)轉(zhuǎn)換進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06

最新評(píng)論

龙州县| 通道| 瑞昌市| 钟山县| 凉山| 济宁市| 泽库县| 宁陕县| 克山县| 都昌县| 浦东新区| 高雄市| 建湖县| 北流市| 芦山县| 特克斯县| 岑溪市| 四会市| 电白县| 苏州市| 聂拉木县| 伊宁县| 龙山县| 南皮县| 普定县| 集安市| 乐山市| 丰县| 大埔县| 天津市| 福州市| 毕节市| 海淀区| 谷城县| 凤庆县| 东乡族自治县| 鹤山市| 汉沽区| 南丹县| 陕西省| 惠安县|