“B 树也用高分支度降低树高,但节点内通常仍做比较或块内搜索;Fusion tree 的额外收益来自把多个整数比较压进一个字操作。若键跨越许多机器字、比较器要执行昂贵语义,或 $w$ 小到不能…”
形式陈述 ​
本页采用 minimum degree
查找在当前节点内定位分隔区间,再只沿一个子女下降。插入时,在进入满节点前把其中间键提升到父节点,并将余下键分成两个至少含
若一个节点恰好装入一个外存块,树高为
直觉 ​
B 树与二叉平衡搜索树都控制根叶路径,但它不是后者的子类:B 树直接以多路节点和块传输为对象,让一次读取带回许多键与子指针,用高扇出把二叉结构的多层判断压进一个外存块。半满约束保证节点不会因更新逐渐退化成稀疏长链,叶同深则让任意查找承担相近的块传输次数。
分裂、借位和合并不是事后修补外观,而是在局部恢复明确占用不变量。插入只可能向上增加一个分隔键,删除只沿访问路径补足即将下降的子女,因此更新无需重写整棵树。
例子与边界 ​
删除若直接从只含
文献中的“order”有时指最大子女数,有时指最小子女数或最大键数;不固定约定便会让节点上下界相差一。B 树也不是二叉搜索树,节点内可以有许多分隔键。重复键、卫星记录放在内部还是外部、节点内采用线性还是二分查找,均属于实现层契约。
推论与应用 ​
B 树用于文件系统、数据库索引和需要外存动态有序集合的场景。块大小越大,可容纳的分隔键越多,树高通常越低;但实际扇出还受键、指针和记录大小影响。I/O 复杂度应以真实节点是否能在一块内传输为前提。
B+ 树把记录全部放到叶层并链接叶节点,适合范围扫描;它复用 B 树的高扇出与占用思想,却改变了内部节点和查询终点,需作为独立结构定义。
参考资料
- Rudolf Bayer and Edward M. McCreight, “Organization and Maintenance of Large Ordered Indexes,” Acta Informatica 1, 1972, pp. 173–189.
- Thomas H. Cormen et al., Introduction to Algorithms, 4th ed., MIT Press, 2022, Ch. 18, B-trees.