引言
树作为可以大幅度缩小查找时间复杂度的数据结构,有很多变种。我们熟悉的二叉查找树查找的时间复杂度为O(logN)。为了维持二叉树的高度,人们开发出了平衡二叉树,这样能够将搜索的时间复杂度控制在O(logN)。然而平衡二叉查找树为了维持平衡,需要不断检测自己的结构是否平衡,若非平衡结构,则需要不断维护结构达到新的平衡,动态插入和删除的代价也随之增加。另外,二叉查找树虽然在时间复杂度方面表现很出色,但是会涉及到比较高的磁盘IO成本。当大量数据存储时,如果每次磁盘IO只得到一个节点的数据,二叉查找树将会有巨量的磁盘IO次数,造成巨大的代价。为了减少磁盘IO次数,必须降低树的深度,有两个思路。
(1)二叉树变为多叉树减小树的深度。
(2)将多个数据存储于一个一个节点中
B树
B树的定义
根据《算法导论》中的定义,设 t 为B树的最小度,一颗最小度为 t 的B树满足以下条件:
- 每个节点最少包含 t - 1 个数据,最多包含 2t - 1 个数据,根节点至少包括1个数据。
- 每个节点中的数据都按照非降序排列。
- 每个节点中的数据都会完成对子树的范围切割。若节点有 n 个数据,则会有 n + 1 个指针指向 n + 1 个子树。
- 所有叶子节点的深度是一样的,为树的高度,代表着B树的平衡。
B树结构: