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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

B+树操作方式

發(fā)布時間:2024/7/23 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 B+树操作方式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1 簡介

B+樹與B樹相似, 也存在不同. 可以理解為把所有元素都放在葉子節(jié)點, 索引B樹化的樹.

B+樹的一些性質:

1. B+樹的節(jié)點分類: 內部節(jié)點(索引節(jié)點), 葉子節(jié)點.?如果只有根節(jié)點有元素, 那么其可以是內部節(jié)點也可以是葉子節(jié)點.

2. B+樹與B樹最大的不同是內部節(jié)點不保存數(shù)據(jù), 只用與索引, 所有數(shù)據(jù)都放在葉子節(jié)點

3. 跟B樹相同的性質: m階B+樹每個節(jié)點(包括葉子節(jié)點和內部節(jié)點)最多有m-1個關鍵字

4. 節(jié)點內部的key同B樹相同, 也是從小到大排列, 對于內部節(jié)點的每個key, 其左樹中的所有key都小于該key, 右樹中的所有key都大于等于該key(注意是大于等于, 此處也是同B樹的不同)

5. 每個葉子節(jié)點都存有相鄰葉子節(jié)點的指針(雙向鏈表)

2 增刪操作

2.1 增加節(jié)點

跟B樹相同的是, 插入元素也是必須要插入葉子節(jié)點, 如果被插入的葉子節(jié)點的key數(shù)量達到階數(shù), 葉子節(jié)點進行分裂, 然后中間的節(jié)點(索引為m / 2的, 從0開始)復制一份進入父節(jié)點(注意此處是與B樹的不同, B樹是移到父節(jié)點, 而不是復制). 當索引節(jié)點滿了時, 就按照B樹的方式, 移動到父節(jié)點.

舉例說明:

1. 空的5階B+樹, 插入5:

2. 再插入8, 10, 15:

3. 插入16:

3.1 插入該節(jié)點

3.2 此時該節(jié)點達到了階樹5, 那么進行分裂, 索引(5 / 2 = 2)的節(jié)點(key為10)復制到父節(jié)點成為內部節(jié)點, 而子節(jié)點從該key進行分裂(該節(jié)點進入右邊, 注意新的兩個葉子節(jié)點要連起來):

4. 插入17:

5. 插入18

5.1 直接插入:

5.2 節(jié)點key數(shù)量達到了5, 裂開, 6復制進入父節(jié)點:

6. 插入一些數(shù)據(jù)后:

7. 插入7:

7.1 直接插入, 此時該節(jié)點key數(shù)量達到了階數(shù)5:

7.2 裂開, 7進入父節(jié)點

7.3 父節(jié)點分裂, 此時不需要復制:

2.2 刪除操作

首先就是在葉子節(jié)點中找到要刪除的節(jié)點, 如果沒有找到, 那么刪除失敗. 找到之后, 先把目標節(jié)點拿掉, 再看拿掉之后的節(jié)點key的數(shù)量, 如果大于ceil(m - 1) / 2 - 1(以后用最小key數(shù)量代替), 那么刪除動作結束. 如果小于的話, 就需要進行接下來的操作. 如果該節(jié)點的兄弟節(jié)點key數(shù)量大于最小key數(shù)量, 那么就向其借一個key, 注意更新其索引節(jié)點的key. 如果兄弟節(jié)點key不大于最小key數(shù)量, 那么就將二者合并, 形成一個新的葉子節(jié)點, 并把兩者的父節(jié)點中多余的key刪除, 同時按照B樹刪除節(jié)點的方式遞歸向上刪除.

舉例說明:

1. 初始狀態(tài):

2. 刪除22:

3. 刪除15

3.1 拿掉15:

3.2 發(fā)現(xiàn)此時節(jié)點key數(shù)量小于最小key數(shù)量?--- 2, 其兄弟節(jié)點有3個key, 大于2, 那么向其借用一個9, 并更新其父索引節(jié)點的key:

4. 刪除7

4.1 拿掉7:

4.2 其節(jié)點key小于2, 其兄弟節(jié)點key均為2, 沒有大于2, 所以就合并其與兄弟節(jié)點, 并刪除其父索引節(jié)點的key:

4.3 此時發(fā)現(xiàn)其父索引節(jié)點的key為1, 小于2, 那么就要按照B樹的方式, 其兄弟節(jié)點為2, 沒有大于2, 那么就將其父節(jié)點下移與該節(jié)點以及其兄弟節(jié)點合并:

總結

以上是生活随笔為你收集整理的B+树操作方式的全部內容,希望文章能夠幫你解決所遇到的問題。

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