B+树
B+樹
文章目錄
- B+樹
- 1.基礎概念
- 2.查找
- 3.插入
- 4.刪除
- 5.更新
- 6.示例
- 參考資料
1.基礎概念
B+樹是應數據庫需求出現的一種B樹的變形樹,是一個m叉多路平衡查找樹,B+樹的查找、插入和刪除操作都和 B樹基本類似。
一顆 m 階的 B+樹:
- 結點的關鍵字個數與子樹個數相同,即一個關鍵字對應一顆子樹
- 根結點的關鍵字范圍為 1 ≤ n ≤ m,但是非葉根結點必須至少有兩顆子樹
- 非根內部結點的關鍵字范圍為 ?m/2?\lceil{m/2}\rceil?m/2? ≤ n ≤ m
- 葉子結點的關鍵字范圍為 ?m/2?\lceil{m/2}\rceil?m/2? ≤ n ≤ m
- 葉子結點包含信息,非葉結點僅起到索引作用。葉子結點中出現所有的關鍵字,即使那些在非葉結點出現的關鍵字也會在葉子結點中出現
- 葉子結點中將關鍵字按大小順序排列,相鄰葉子結點按大小順序鏈接起來
- 分支節點僅包含它子節點中的關鍵字最大值和指向子節點的指針
B+樹比 B樹更適合作為操作系統的文件索引:
- B+樹節點小,一個節點可容納更多的關鍵字因此,訪問外存的次數少
- B+樹任何關鍵字的查找必須走一條從根結點到葉子結點的路
2.查找
通常在 B+樹中有兩個頭指針:一個指向根結點,另一個指向關鍵字最小的葉結點。我們可以對B+樹進行兩種查找運算:一種是從根結點開始的多路查找,另一種是從最小關鍵字開始的順序查找。
在多路查找過程中,如果非葉結點上的關鍵字等于給定值,也不停止,而是繼續沿著右指針向下,一直查到葉結點上有關鍵字等于給定值,然后返回對應的記錄地址;如果查不到,則記錄不存在。因此,在B+樹中進行多路查找,無論成功與否,都會返回一條由根結點到葉子結點的路徑。
對于記錄總數K,B+樹的叉樹 N,整個 B+樹的高度為 h=?log?n/2K?h = \lceil\log_{n/2} K\rceilh=?logn/2?K?。如果 K=1百萬,N=20,那么 B+樹高度為6,即在一個百萬記錄的文件中查找記錄,也只需要訪問6個樹結點。即使每個樹結點都占用一個磁盤塊,最多也只需要7次 I/O 操作(6次結點磁盤和1次記錄本身磁盤快)。
3.插入
B+樹的插入在葉子結點上進行,葉子結點可能會因為插入操作而變得過大從而需要分裂,必須調整相關結點保證 B+ 樹的平衡,否則查找操作的效率就會下降。
插入的規則如下:
4.刪除
刪除給定值為V的記錄,需要先找到鍵值V所在的葉結點,將該鍵值的索引項刪除。
刪除的規則如下:
5.更新
對于B+樹中數值的更新,不能簡單地進行對應數值的更改,則是需要采取先刪除再插入的策略,以保持B+樹索引結構的更新
6.示例
參考資料
數據結構(C語言版)第二版 —— 清華大學出版社
數據結構精講與習題詳解(C語言版)第二版 —— 清華大學出版社
總結
- 上一篇: 关于机器学习的一些推荐
- 下一篇: 九、表达式求值(1)