1. Splay 树的均摊 O(log n) 如何通过伸展操作实现?zig/zig-zig/zig-zag 三种情况的旋转规则与势能函数 Φ=Σlog(size(x)) 的摊还分析
Splay 树的均摊 O(log n) 如何通过伸展(splay)操作实现?zig、zig-zig、zig-zag 三种旋转规则与势能函数 Φ=Σlog(size(x)) 的摊还分析是怎样的?
- 伸展操作的旋转规则
- zig / zig-zig / zig-zag
- 势能函数摊还分析
Splay 树在每次访问后把目标节点伸展到根,方法是对目标节点反复执行三种旋转:zig(父节点是根,单旋转)、zig-zig(目标、父、祖父在同一直线,先旋父再旋目标)、zig-zag(目标、父、祖父不在同一直线,先旋目标再旋父)。通过势能函数 Φ = Σlog(size(x))(size 为子树大小),每次伸展的摊还代价为 O(log n),因为 zig-zig/zig-zag 使势能净下降,抵消旋转成本。总操作序列摊还 O(log n)。
伸展通过"双旋转"把目标推上根,同时优化树结构。势能分析:每次 zig-zig 或 zig-zag 的摊还代价 ≤ c·(log(size(z)) - log(size(x))) + O(1),叠加后振幅 O(log n),故均摊 O(log n)。zig 处理少量边界情况。这种"访问即重构"的方案让频繁访问的节点靠近根。