总结自《introduction to algorithm》第3版,第18章的B-Tree。实现是用的java代码
B-Tree其实是一种多路平衡树,主要是用在对辅存中的数据做增删改查,所以更大的时间消耗其实是在读写辅存。不过为了实现的简便我在实现中并不考虑辅存的读写。
定义
节点 x x 的属性
- 关键字的个数
- 每个关键字缝隙( x.keyi−x.keyi+1 x . k e y i − x . k e y i + 1 ) 之间有一个孩子节点,即共有 x.n+1 x . n + 1 个孩子(除叶子节点外)
- x.isleaf 标识是否是叶子
- 关键字有严格的递增顺序
此外,除了叶子节点外,每个节点的关键字都有一个上界和下界,我们称 t t 为B-Tree 的度,则,
接下来我们来证明B-tree 的高度 h≤logtn+12 h ≤ l o g t n + 1 2节点的实现,我这里是将每个节点底层用两个数组来实现,一个entry,另外一个是childs,且大小固定为