设 w(x) 为 x 的子树大小的对数。
初始势能:φ(0)=∑log2(sz(x))≤∑log2n=nlog2n。
一下假设 x 为 rotate 的点,p 为 father,g 为祖先。
1、Zig 操作
时间:Θ(1)
显然有 w′(x)=w(p)(自己画个图就知道了)。
势能变化:ΔφZig=w′(x)−w′(p)−w(x)−w(p)≤w′(p)−w(x)。
2、Zig-Zag 操作
时间:Θ(1)。
势能变化:ΔφZig−Zag=w′(x)+w′(p)+w′(g)−w(x)−w(p)−w(g)=w′(x)+w′(g)−w(x)−w(p)≤w′(p)+w′(g)−2w(x)。
如果 sz(p)≥sz(g),有 2sz′(g)≤sz(x)⇒1+w′(g)≤w′(x)。
如果 sz(p)<sz(g),有 2sz′(p)≤sz′(x)⇒1+w′(p)≤w′(x)。
有 w′(p)<w′(x),w′(q)<w′(x) 代入可得 ΔφZig−Zag≤2w′(x)−w(x)−1。
假设一共执行 k 次操作,那么 c^=c+Δϕ=∑2w′(x)−w(x)+Θ(k)−Θ(k)=∑w′(x)−w(x)。
3、Zig-Zig 操作
时间:Θ(1)
势能变化:ΘφZig−Zig=tZig−Zig+w′(x)+w′(p)+w′(g)−w(x)−w(p)−w(g)=w′(p)+w′(g)−w(x)−w(p)≤w′(x)+w′(g)−2w(x)≤2(w′(x)−w(x))。
由于一次 Splay 操作中可能多次进行 Zig-Zag 操作,为了摊还实际代价,需存在常数 −1。qwq
sz′(x)=sz(A)+1+SZ(B)+1+sz(C)+1+sz(D)+1+2=sz(x)+sz′(g)+2。
因此 2w′(x)−w′(g)−w(x)=log2(sz(x)sz(g)sz(x)2)=log2(sz(x)sz(g)(sz(g)+sz(x)+2)2)≤log2(sz(x)sz(g)2sz(x)sz(g))=1。
所以 ΔZig−Zig≤3(w′(x)−w(x))−1。
假设有 k 次操作,c^=c+Δϕ=Θ(k)+∑w′(x)−w(x)−Θ(k)=∑w′(x)−w(x)。
得证。
转载自 RSY 的博客:(Splay 时间复杂度证明(势能分析))[https://www.luogu.com.cn/blog/123456--abcdef/splay-shi-jian-fu-za-du-zheng-ming-shi-neng-fen-xi-post]