勢能分析(splay分析)


定義

第$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]):

  1. y為根
  2. x,y,z同一條直線
  3. 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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM