B-树 的其他
B-樹主要為了在外存上維護(hù)大量數(shù)據(jù), 減少IO操作.? 其中的內(nèi)存操作與磁盤操作相比可以忽略。 t取值一般較大, 在50-2000之間。
?
相比于一般的二叉樹紅黑樹等, B-樹的深度低很多;
?
一般磁盤中的一頁或者虛擬內(nèi)存的一頁為整個(gè)節(jié)點(diǎn)的最大大小。
?
有一點(diǎn)迷惑的是, 如何在B-樹中記錄磁盤地址呢? 比如某內(nèi)節(jié)點(diǎn)有50個(gè)關(guān)鍵字,51個(gè)孩子; 孩子地址如何用磁盤地址表述呢?
?
?
?
算法中特別值得注意的一點(diǎn):
為了防止在滿節(jié)點(diǎn)上插入,導(dǎo)致分裂; 如果此時(shí)父節(jié)點(diǎn)也是滿的, 需要回溯分裂父節(jié)點(diǎn)
為了防止在最低保障的節(jié)點(diǎn)上刪除, 導(dǎo)致需要合并; 如果此時(shí)父節(jié)點(diǎn)也是最低保障, 導(dǎo)致父節(jié)點(diǎn)也需要回溯的合并
?
為了避免這些情況:
在插入時(shí), 在向下的遞歸插入路徑上, 只要遇到滿節(jié)點(diǎn), 就分裂
在刪除時(shí), 在向下的遞歸刪除路徑上, 只要遇到最低關(guān)鍵字個(gè)數(shù)保障節(jié)點(diǎn), 就合并?!净蛘邠Q到其兄弟節(jié)點(diǎn)上進(jìn)行刪除; 當(dāng)自己與兄弟節(jié)點(diǎn)都是最低保障時(shí),就合并】
?
?
從算法中可以看出:
節(jié)點(diǎn)的插入, 肯定是插入到葉節(jié)點(diǎn)中
節(jié)點(diǎn)的刪除, 也可以認(rèn)為是在葉節(jié)點(diǎn)上刪除。 (如果在內(nèi)節(jié)點(diǎn)中找到需要?jiǎng)h除的k, 就使用相鄰孩子節(jié)點(diǎn)的值k' 替換k, 然后遞歸的在孩子節(jié)點(diǎn)中刪除k' )
?
總結(jié)
- 上一篇: extern C 的作用
- 下一篇: 区间树