Lec17 - B-Trees
BST Height
BST在最好情况与最坏情况下的树高,以及对应时间复杂度差异很大
- 最好情况下(完全二叉树)为\(\Theta(\log N)\)
- 最坏情况下(成链)为\(\Theta(N)\)
其中这两种描述是最具体的
高度、深度与平均深度
- 节点深度指的是离根节点的距离
- 树的高度指的是最深的叶子节点的深度
- 平均深度指的是每个节点深度和的平均值
如果我们随机向BST中插入或删除节点,可以发现这棵树具有\(\Theta(\log N)\)的平均深度与高度
B-Tree
思路
但是我们不能保证插入的节点是随机的,因此可能会导致BST逐渐偏向一边高
因此我们需要避免在底部添加过多的节点
我们可以将多个值放入同一个节点中,这样可以保证叶子的深度不发生改变
但我们为了寻找元素,需要遍历同一个节点的多个值,花费时间与形成列表的长度有关
我们可以设置一个长度限制,当一个节点中值的数量超过了限制,就把中间的值给他的父节点
若出现节点值位于父节点两个值之间的节点,则让他们单独成一个节点
若根中的值超过限制,我们取中间的值作为新的根节点,让树增加一层
观察发现,这种树有着很好的平衡性
- 若分离根节点,所有节点都会下移一层
- 若分离其他节点,树高不变
B-Tree
以上推导出的树形结构被称为B-树,其中
- 长度限制L=3的又称2-3-4树或2-4树
- 长度限制L=2的又称2-3树
数字指代一个节点可能有多少个孩子
B树常用于比较小的长度限制(L=2或L=3)或非常的大的长度限制
不变量
- 所有叶子到根的距离相同
- 具有k个元素的非叶子节点一定有k+1个孩子
树高
若L为一个节点最大元素数量,则树高应在\(\log_{L+1}(N)\)至\(\log_{2}(N)\)之间
- 最大树高为所有非叶子节点有一个元素时
- 最小树高为所有节点有L个元素时
- 平均树高为\(\Theta(\log N)\)
时间复杂度
最坏情况下,需要遍历H+1个节点,每个节点需要遍历L个元素
故复杂度为\(O(HL)\)其中带入H化简为\(O(\log N)\)