均摊分析(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 方法的角度来看,就是数据结构的势能非负。
记账法与势能法的视角不同:记账法关注的是每一步操作之后的账户余额,而势能法关注的是每一步的代价。