定義
第$x$次操作后,勢能為$\phi(x)$,該操作實際復雜度$c(x)$,均攤復雜度$a(x)$。
定義$a(x)=c(x)+\phi(x)-\phi(x-1)$。
那么總復雜度為$\phi(n)-\phi(0)+\sum c(x) $。
簡單應用
Q:對於一個初始為0的二進制數,每次+1,求n次操作復雜度。
A:定義$\phi(x)$為$i$次操作后1的個數,對於一次+1 ,1個0->1,x個1->0,那么$a(x)= (1+x) + (1-x)=2$,則總復雜度$o(n)$,常數2。
splay分析
定義x節點的勢能為$\chi(x)=log(size(x))$(size表示子樹大小)。
那么$\phi(n)-\phi(0) \leq n log(n)$。
雙旋分三種情況(y=fa[x],z=fa[y]):
- y為根
- x,y,z同一條直線
- x,y,z不為同一條直線
(弄錯了不想改...祖孫關系以圖為准)
對於1:

\[ c(x)=1+ \chi(x^{'})+\chi(y^{'})-\chi(x)-\chi(y)=1+\chi(y^{'})-\chi(y) \]
對於2:

\[ c(x)=2+\chi(x^{'})+\chi(y^{'})+\chi(z^{'})-\chi(x)-\chi(y)-\chi(z) \]
\[ c(x)=2+\chi(x^{'})+\chi(y^{'})-\chi(y)-\chi(z) \leq 2+\chi(z^{'})+\chi(x^{'})-2\chi(z) \]
而
\[ \chi(x^{'})+\chi(z)-2\chi(z^{'})=log({(size(2+1)+1)\times(size(3+4)+1)\over {(3+size(3+4+2+1))}^2}) \leq log( {1 \over 4})=-2 \]
那么
\(c(x)\leq 2+\chi(z^{'})+\chi(x^{'})-2\chi(z) \leq 3(\chi(z^{'})-\chi(z))\)
對於3:

\[ c(x)=2+\chi(x^{'})+\chi(y^{'})+\chi(z^{'})-\chi(x)-\chi(y)-\chi(z) \]
\[ c(x)=2+\chi(x^{'})+\chi(y^{'})-\chi(y)-\chi(z) \leq 2+\chi(x^{'})+\chi(y^{'})-2\chi(z) \]
而
\[ 2\chi(z^{'})-\chi(x^{'})-\chi(y^{'})=log({(size(1+3+4+2)+3)^2 \over{(size(1+3)+1) \times (size(4+2)+1)}}) \geq 2 \]
故
\[ c(x) \leq 2(\chi(z^{'})-\chi(z)) \]
綜上
可以把$(\chi(z^{'})-\chi(z))$的常數都看為3。
一次splay復雜度為$3 (\chi(root)-\chi(z))+1 \leq 3 log(n)+1$。
然后這個還要乘上rotate的常數。
不過在實際應用下,可以認為常數為8。
