1. Scapegoat 树的重建机制中沿路径找第一个 size(child)>α·size(node) 的节点整棵重建,α 的取值如何影响均摊 O(log n)?
说明 Scapegoat 树的重建机制,解释为什么沿插入路径找第一个不满足平衡条件的节点整棵重建,以及 α 的取值如何影响均摊复杂度?
- Scapegoat 树的平衡判定与重建时机
- 沿路径向上找 scapegoat 节点的过程
- α 取值对均摊 O(log n) 的影响
Scapegoat 树是不显式存储平衡因子的自平衡 BST。插入后若新节点到根的路径上存在某个节点,其某个子树大小超过 α 倍该节点大小(如 size(child) > α·size(node),取 α∈(0.5,1)),则该节点被选为 scapegoat,把以它为根的整个子树重建为完全平衡的 BST。因为每次插入最多只重建一次,且一个节点被重建后至少需要大约 (1-α)/α 次新插入才能再次成为 scapegoat,势能法可证明插入的均摊复杂度为 O(log n)。
α 必须大于 0.5,否则无法保证平衡条件;α 越小树越平衡(查找更快)但重建更频繁。经典 α 取 0.7 左右。重建只发生在插入路径上第一个失衡节点,且整棵子树重建后重新平衡,势能随之释放,从而支撑均摊 O(log n)。