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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【数据结构】B树的理解

發(fā)布時間:2024/2/28 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【数据结构】B树的理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

B樹滿足的條件

B樹是一種多路搜索樹(并不是二叉的):

1.定義任意非葉子結點最多只有M個兒子;且M>2;

2.根結點的兒子數為[2, M];

3.除根結點以外的非葉子結點的兒子數為[M/2, M];

4.每個結點存放至少M/2-1(取上整)和至多M-1個關鍵字;(至少2個關鍵字)

5.非葉子結點的關鍵字個數=指向兒子的指針個數-1;

6.非葉子結點的關鍵字:K[1], K[2], …, K[M-1];且K[i] < K[i+1];

7.非葉子結點的指針:P[1], P[2], …, P[M];其中P[1]指向關鍵字小于K[1]的子樹,P[M]指向關鍵字大于K[M-1]的子樹,其它P[i]指向關鍵字屬于(K[i-1], K[i])的子樹;

8.所有葉子結點位于同一層;

其結構可以簡單定義為:

typedef struct {/*文件數*/int file_num;/*文件名(key)*/char * file_name[max_file_num];/*指向子節(jié)點的指針*/BTNode * BTptr[max_file_num+1];/*文件在硬盤中的存儲位置*/FILE_HARD_ADDR offset[max_file_num]; }BTNode;

下面動圖是往B樹中依次插入6 10 4 14 5 11 15 3 2 12 1 7 8 8 6 3 6 21 5 15 15 6 32 23 45 65 7 8 6 5 4

再舉個例子說明B樹的查找過程,如下圖:(M=3)

為了簡單,這里用少量數據構造一棵3叉樹的形式,實際應用中的B樹結點中關鍵字很多的。上面的圖中比如根結點,其中17比表示一個磁盤文件的文件名;小紅方塊表示這個17文件內容在硬盤中的存儲位置;p1表示指向17左子樹的指針。

假如每個盤塊可以正好存放一個B樹的結點(正好存放2個文件名)。那么一個BTNODE結點就代表一個盤塊,而子樹指針就是存放另外一個盤塊的地址。

下面,咱們來模擬下查找文件29的過程:

1、根據根結點指針找到文件目錄的根磁盤塊1,將其中的信息導入內存?!敬疟PIO操作 1次】
此時內存中有兩個文件名17、35和三個存儲其他磁盤頁面地址的數據。根據算法我們發(fā)現17<29<35,因此我們找到指針p2。
2、根據p2指針,我們定位到磁盤塊3,并將其中的信息導入內存?!敬疟PIO操作 2次】
此時內存中有兩個文件名26,30和三個存儲其他磁盤頁面地址的數據。根據算法我們發(fā),26<29<30,因此我們找到指針p2。
3、根據p2指針,我們定位到磁盤塊8,并將其中的信息導入內存?!敬疟PIO操作 3次】
此時內存中有兩個文件名28,29。根據算法我們查找到文,29,并定位了該文件內存的磁盤地址。
4、分析上面的過程,發(fā)現需要3次磁盤IO操作和3次內存查找操作。關于內存中的文件名查找,由于是一個有序表結構,可以利用折半查找提高效率。至于IO操作時影響整個B樹查找效率的決定因素。

當然,如果我們使用平衡二叉樹的磁盤存儲結構來進行查找,磁盤4次,最多5次,而且文件越多,B樹比平衡二叉樹所用的磁盤IO操作次數將越少,效率也越高。

總結

以上是生活随笔為你收集整理的【数据结构】B树的理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。