均攤分析(Amortized Analysis)
聚合方法(Aggregate Method)
Aggregate 方法不夠精確,下面的兩種方法可以為每種操作分配不同的均攤代價,能夠提供比較精確的上界。
記賬方法(Accounting Method)
勢能方法(Potential Method)
框架
- 從一數據結構 \(D_0\) 開始
- 第 i 次操作將 \(D_{i-1}\) 變為 \(D_i\)
- 第 i 次操作的代價為 \(c_i\)
勢能函數:
\(\Phi:\ \{D_i\} \rightarrow \mathbb{R}\),其中,
- \(\Phi(D_0) = 0\)
- \(\Phi(D_i) \ge 0\)
均攤代價:\(\hat{c_i} = c_i + (\Phi(D_i) - \Phi(D_{i-1}))\)
均攤分析最核心的是不變式:\(\sum_{i=1}^n \hat{c_i} \ge \sum_{i=1}^n c_i\) 在整個操作序列中都成立。從 Accounting 方法的角度來看,就是賬戶余額非負;從 Potential 方法的角度來看,就是數據結構的勢能非負。
記賬法與勢能法的視角不同:記賬法關注的是每一步操作之后的賬戶余額,而勢能法關注的是每一步的代價。
