红魔咖啡馆

头发越掉越多,头发越掉越少

0%

【CS61B】Lec17-B-Trees

Lec17 - B-Trees

BST Height

BST在最好情况与最坏情况下的树高,以及对应时间复杂度差异很大

  • 最好情况下(完全二叉树)为\(\Theta(\log N)\)
  • 最坏情况下(成链)为\(\Theta(N)\)

其中这两种描述是最具体的

高度、深度与平均深度

  • 节点深度指的是离根节点的距离
  • 树的高度指的是最深的叶子节点的深度
  • 平均深度指的是每个节点深度和的平均值

如果我们随机向BST中插入或删除节点,可以发现这棵树具有\(\Theta(\log N)\)的平均深度与高度

B-Tree

思路

但是我们不能保证插入的节点是随机的,因此可能会导致BST逐渐偏向一边高

因此我们需要避免在底部添加过多的节点

我们可以将多个值放入同一个节点中,这样可以保证叶子的深度不发生改变

但我们为了寻找元素,需要遍历同一个节点的多个值,花费时间与形成列表的长度有关

我们可以设置一个长度限制,当一个节点中值的数量超过了限制,就把中间的值给他的父节点

若出现节点值位于父节点两个值之间的节点,则让他们单独成一个节点

image-20250731203714505 image-20250731203719417

若根中的值超过限制,我们取中间的值作为新的根节点,让树增加一层

B-T

观察发现,这种树有着很好的平衡性

  • 若分离根节点,所有节点都会下移一层
  • 若分离其他节点,树高不变

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)\)