从多路搜索树到 B-树

1. 什么是 B 树

  • B 树是为磁盘或其他直接存取的辅助存储设备而设计的一种平衡二叉树
    • B 树类似于红黑树,但它们在降低磁盘 I/O 操作数方面要更好一点,
    • 许多数据库系统使用 B 树或者 B 树的变种来存储信息;

2. B 树的用武之地 —— 外存搜索

当数据规模大到内存已不足以容纳时(此时就需要存放在外存中),常规平衡二叉搜索树的效率将大打折扣。其原因在于,查找过程对外存的访问次数过多。例如,若将 109(1 billion = 10 亿)个记录在外存中组织为 AVL 时,则每次查找大致都需要做 30 次外存访问。那么,应该如何有效减少外存操作呢?

为此需要充分利用磁盘之类外部存储器的一个特性,单就时间成本而言,读取物理地址连续的 1000 个字节,与读取单个字节几乎没有区别。也即外部存储更适宜于批量式访问,不妨通过时间成本相对较低的多次内存操作,来替代时间成本相对较高的单次外存操作。

相应地,需要将通常的二叉搜索树,改造为多路搜索树 —— 在中序遍历的意义下,这也是一种等价变换。

  • 以两层为间隔,结点与其左孩子、右孩子,合并为一个大节点(3 个关键码),下分 4 路,进而得到四路搜索树;
  • 以三层为间隔,结点与其两个孩子四个孙子合并为一个含有 7 个关键码(key)、8 个分支的“大结点”,进而得到 8 路搜索树;
  • 一般地,以 k 层为间隔进行重组,会将二叉搜索树转化为等价的 2k 路搜索树,统称多路搜索树;
原文地址:https://www.cnblogs.com/mtcnn/p/9423682.html