日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

b - 数据结构实验之查找二:平衡二叉树_文件系统的灵魂数据结构 B树

發(fā)布時(shí)間:2024/7/23 windows 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 b - 数据结构实验之查找二:平衡二叉树_文件系统的灵魂数据结构 B树 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

其實(shí)平衡二叉樹的代碼實(shí)現(xiàn)已經(jīng)挺復(fù)雜的了,但是一山更比一山高,B樹算法的原理和代碼實(shí)現(xiàn)都比平衡二叉樹要更為復(fù)雜。

我沒有讓大家知難而退的意思,面試的時(shí)候肯定不會(huì)讓你寫B(tài)樹這么復(fù)雜的算法,大家先聽我講講B樹這種數(shù)據(jù)結(jié)構(gòu)的思想吧。

一看文章標(biāo)題就知道B樹與文件系統(tǒng)的實(shí)現(xiàn)有很大關(guān)系,這個(gè)還是挺重要的。代碼實(shí)現(xiàn)可能后面我會(huì)補(bǔ)上,其實(shí)意義也不大,真的

先聲明一點(diǎn):B-tree樹即B樹。B即Balanced平衡,因?yàn)锽樹的原英文名稱為B-tree,而國內(nèi)很多人喜歡把B-tree譯作B-樹,這是個(gè)非常不好的直譯,很容易讓人產(chǎn)生誤解,人們可能會(huì)以為B-樹和B樹是兩種樹。

B樹產(chǎn)生的背景不管是二叉樹、二叉查找樹還是平衡二叉樹,它們都有諸多限制,比如:
  • 每個(gè)結(jié)點(diǎn)只能存儲(chǔ)一個(gè)元素。

  • 結(jié)點(diǎn)的度至多為2,即使是平衡二叉樹,在存儲(chǔ)百萬、千萬級(jí)別的數(shù)據(jù)量時(shí),也會(huì)導(dǎo)致樹的深度特別大,而深度大就會(huì)影響查找效率。

這里提一下平衡二叉樹的缺點(diǎn):由于平衡二叉樹需要左旋和右旋來調(diào)整樹的結(jié)構(gòu),因此在頻繁插入和刪除的場(chǎng)景下,每插入或刪除一個(gè)結(jié)點(diǎn),都極有可能導(dǎo)致樹的不平衡,性能也會(huì)大打折扣。紅黑樹(后面會(huì)介紹)就是來解決這個(gè)問題的。

前面講的幾種數(shù)據(jù)結(jié)構(gòu),都是純內(nèi)存操作,但是當(dāng)數(shù)據(jù)量特別大(如數(shù)據(jù)庫中千萬級(jí)別的數(shù)據(jù)表、磁盤中的上萬個(gè)文件等),內(nèi)存都存不下了怎么辦?在這種情況下,需要用外存(硬盤)來存儲(chǔ),而對(duì)數(shù)據(jù)的處理則需要不斷地從硬盤調(diào)入調(diào)出。

此時(shí),時(shí)間復(fù)雜度的計(jì)算就會(huì)發(fā)生變化,因?yàn)檫€要額外考慮對(duì)硬盤的訪問次數(shù)和單次訪問時(shí)間等。

為了降低對(duì)硬盤的訪問次數(shù),需要設(shè)計(jì)新的數(shù)據(jù)結(jié)構(gòu)。前面講的幾種樹,結(jié)點(diǎn)都只能存一個(gè)元素,因此,當(dāng)元素非常多的時(shí)候,要么結(jié)點(diǎn)的度非常大,要么樹的深度非常大,這兩種情況都會(huì)導(dǎo)致對(duì)硬盤的訪問次數(shù)偏大。如果每個(gè)結(jié)點(diǎn)能存多個(gè)元素,那么樹的總結(jié)點(diǎn)數(shù)就會(huì)大大減少,對(duì)磁盤的訪問次數(shù)也會(huì)相應(yīng)的大大減少。

由于有如上限制,為此引入了多路查找樹的概念。

多路查找樹:結(jié)點(diǎn)的度可以大于2,并且每一個(gè)結(jié)點(diǎn)可以存儲(chǔ)多個(gè)元素。由于是查找樹,所以結(jié)點(diǎn)之間存在某種特定的排序關(guān)系。

B樹的基本概念本文要講的主題是B樹,B樹是一種平衡的多路查找樹。其實(shí)B樹和多路查找樹是一個(gè)意思,網(wǎng)上很多資料也是這樣認(rèn)為的,但是也可以認(rèn)為多路查找樹和B樹不是一個(gè)意思,因?yàn)槎嗦凡檎覙洳灰欢ㄊ瞧胶獾摹樹的階:所有結(jié)點(diǎn)中的最大孩子數(shù)。其實(shí)跟樹的度一個(gè)意思。一個(gè)m階B樹的屬性:
  • 如果根結(jié)點(diǎn)不是葉子結(jié)點(diǎn),則其至少有兩顆子樹。

  • [m/2]<=k<=m,[m/2]為向上取整,比如9階B樹,5<=k<=9。每一個(gè)非根分支結(jié)點(diǎn)都有k個(gè)孩子和k-1個(gè)元素;葉子結(jié)點(diǎn)有k-1個(gè)元素。

  • 所有葉子結(jié)點(diǎn)在同一層(平衡)。

  • 所有分支結(jié)點(diǎn)有下列信息數(shù)據(jù):(n,A0,K1,A1,K2,A2,...,Kn,An),n是結(jié)點(diǎn)存儲(chǔ)的元素個(gè)數(shù),Ai表示子樹,Ki表示元素,而從A0到An的值是從小到大排序的,這跟二叉查找樹的性質(zhì)一樣。

下面來演示一下如何在B樹上查找元素,如下圖,是一顆B樹。

  • 如果要查找元素7,首先從硬盤上讀取根節(jié)點(diǎn)(第一次讀磁盤)

  • 即讀到了3,5,8三個(gè)元素,發(fā)現(xiàn)7并不在其中,但由于5<7<8,因此找到了A2,然后根據(jù)A2再讀取一次硬盤(第二次讀磁盤)

  • 此時(shí)讀到了2,6,7三個(gè)元素,找到了元素7

  • 兩次磁盤讀取就查找了我們想要的元素,非常高效,B樹就是這樣一種為內(nèi)外存數(shù)據(jù)交互為設(shè)計(jì)的數(shù)據(jù)結(jié)構(gòu)。

    本文介紹了B樹產(chǎn)生的背景和基本概念,下一篇文章將介紹B樹結(jié)點(diǎn)的插入和刪除操作,以及后面將陸續(xù)介紹B+樹、紅黑樹等。

    總結(jié)

    以上是生活随笔為你收集整理的b - 数据结构实验之查找二:平衡二叉树_文件系统的灵魂数据结构 B树的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。