淺析B-樹分裂
一、B-樹的定義(適合查詢的平衡的多叉樹。)
一顆M階(M>2)的B-樹,是一顆平衡的M路平衡搜尋樹,可以是空樹或者滿足B-樹的性質
二、B-樹的性質?
(1) 根節點至少有兩個孩子
(2) 每個非根節點至少有M/2(上取整)個孩子,至多有M個孩子
(3) 每個非根節點至少有M/2-i個關鍵字,至多有M-1個關鍵字,並且以升序排列
(4) key[i]和key[i+1]之間的孩子節點的值介於key[i]、key[i+1]之間
(5) 所有葉子節點都在同一層
三、B-樹分裂圖示
給定一組數:{12 45 9 78 60 55 58}
(1) 先插入12
(2) 再插入45
(3) 插入9
(4) 插入78
(5) 插入60
(6) 插入55
(7) 插入58
四、B-樹的基本操作
1、 建立
2、 插入
(1) 若B樹的根為空,則直接插入(new上一個新的節點,插入,更新size )
(2)0當B樹不為空時
a、在B樹中查詢插入位置的key,若找到則不插入返回;若沒找到,則插入到葉子結點。
b、檢測當前插入節點是否滿足B樹的性質,若滿足則返回,不滿足時則需要分裂。(分裂如上所示)
3、查詢(主要查詢兩個方向:一是找key在不在;二是若key不在則找位置)
(1)從B樹的根節點開始查詢(中序遍歷查詢或者折半查詢),若找到則返回;若無則進行下一步
(2)找不到key值時,則需要將key與節點中的key值作比較,小於節點的key值時,則往左子樹裡面查詢;若大於時,往右子樹裡 面找。一直重複下去,最後返回需要插入的位置。
注意點:搬移元素的時候,孩子節點會比關鍵字多搬移一個元素
程式碼沒有附上,讀者可自行編寫!!!
相關文章
- 『分享』兩篇講 B-樹 B+ 樹的文章
- 線段樹分裂 學習筆記筆記
- 咬文嚼圖式的介紹二叉樹、B樹/B-樹二叉樹
- iOS Block淺淺析iOSBloC
- 【學習筆記】線段樹合併 & 分裂筆記
- 淺析RedisRedis
- Jvm 淺析JVM
- CGLib淺析CGLib
- 淺析XMLXML
- MongoDB淺析MongoDB
- 淺析 JWTJWT
- 淺析 DDD
- RunLoop 淺析OOP
- 淺析 ReentrantLockReentrantLock
- Unstated淺析
- 淺析SharedPreferences
- Nginx淺析Nginx
- 淺析PromisePromise
- ejs 淺析JS
- 淺析KubernetesStatefulSet
- AIDL淺析AI
- ArrayList淺析
- 演算法之樹(一,B-樹原理詳解)(Java版)-持續更新補充演算法Java
- 淺析AIGC for MMKGAIGC
- Seata原理淺析
- 淺析JNDI注入
- 淺析DES原理
- shadow DOM 淺析
- 淺析Promise原理Promise
- AQS原理淺析AQS
- css: clip淺析CSS
- Webpack 原理淺析Web
- Jackson - 淺析@JsonIncludeJSON
- InheritedWidget原理淺析
- Kubernetes Scheduler淺析
- koa原理淺析
- 淺析 React FiberReact
- HTTP Cache 淺析HTTP