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