B-Tree(B-樹)底層原理

B-Tree(B-樹)

基本搜索結構

在這裏插入圖片描述

以上結構適合用於數據量不是很大的情況,如果數據量非常大,一次性無法加載到內存中,使用上述結構就不是很方便

B-樹概念

一種適合外查找的樹,它是一種平衡的多叉樹,稱爲B樹(B-樹")。一棵M階(M>2)的B樹,是一棵平衡的M路平衡搜索樹,可以是空樹或者滿足一下性質:

  1. 根節點至少有兩個孩子
  2. 每個非根節點至少有M/2(上取整)個孩子,至多有M個孩子
  3. 每個非根節點至少有M/2-1(上取整)個關鍵字,至多有M-1個關鍵字,並且以升序排列
  4. key[i]和key[i+1]之間的孩子節點的值介於key[i]、key[i+1]之間
  5. 所有的葉子節點都在同一層

B-樹的插入分析

假設M = 3. 即三叉樹,每個節點中存儲兩個數據,兩個數據可以將區間分割成三個部分,因此節點應該有三個孩子,節點的結構如下:

在這裏插入圖片描述
注意:孩子永遠比數據多一個。

用序列{53, 139, 75, 49, 145}構建B樹的過程如下:

在這裏插入圖片描述

在這裏插入圖片描述

插入75的過程如下:
1.按照插入排序思想將75插入到序列中
2.插入後該節點不滿足情況,需要對該節點進行分裂

分裂節點
在這裏插入圖片描述

1.找到節點數據域的中間位置
2.給一個新節點,將中間位置的數據搬移到新節點中
3.將中間位置數據搬移到父節點中
4.將節點連接好
在這裏插入圖片描述

在這裏插入圖片描述
1.找到該元素的插入位置(索要插入節點pCur)
2.按照插入排序思想將節點插入到該節點(pCur)的合適位置3.
檢測該節點是否滿足B樹的性質
滿足: 插入結束
不滿足:對節點進行分裂

插入過程:

  1. 如果樹爲空,直接插入新節點中,該節點爲樹的根節點
  2. 樹非空,找待插入元素在樹中的插入位置(注意:找到的插入節點位置一定在葉子節點中)
  3. 檢測是否找到插入位置(假設樹中的key唯一,即該元素已經存在時則不插入)
  4. 按照插入排序的思想將該元素插入到找到的節點中
  5. 檢測該節點是否滿足B-樹的性質:即該節點中的元素個數是否等於M,如果小於則滿足
  6. 如果插入後節點不滿足B樹的性質,需要對該節點進行分裂
    申請新節點
    找到該節點的中間位置
    將該節點中間位置右側的元素以及其孩子搬移到新節點中
    將中間位置元素以及新節點往該節點的雙親節點中插入,即繼續4
  7. 如果向上已經分裂到根節點的位置,插入結束
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章