各种均摊
有关数学的均摊
比较trivial。但也不是那么trivial。
大概是观察到有那么一个东西在操作中持续变小,然后使用势能分析发现复杂度是正确的。
大概率会有一部分是打暴力,这就是均摊(
颜色段均摊
ODT珂朵莉树/颜色段均摊。
很好的ODT。
势能分析
强而有力的分析复杂度手段。
首先需要明白的一点是,这里分析的都是复杂度上界,分析的好与坏关系着上界的紧与松,好好分析一下或许会发现复杂度还是挺低的。
与之类似的有记账分析,先来谈谈这个。
记账分析是给当前的复杂度较低的操作提前支付一部分费用,之后进行复杂度较高的操作时我们认为使用了提前支付的费用。
以对栈的操作为例,每次push,或者pop,或者连续pop\(k\)次。
我们可以在每次push时,认为费用是\(1\),并且提前支付\(1\)的费用。之后pop可以认为使用了提前支付的费用。pop\(k\)次看上去是\(O(k)\)的,但是也可以与pop同样分析。
于是总复杂度是\(O(n)\)的,均摊每次操作\(O(1)\)。
这个的难点在于提前支付的费用需要去猜测调整,以得到一个合适的上界。
而势能分析就是给每个状态设置一个势能,记作\(\phi(S)\)。
然后设每次操作的复杂度为\(c_i\),又记\(\hat c_i=c_i+\phi(S')-\phi(S)\),\(S'\)表示操作后的状态。
那么\(\sum \hat c_i=\sum c_i+\phi(S_n)-\phi(S_0)\)。
我们设置\(\phi(S)\)时,只要满足\(\forall i,\phi(S_i)\ge \phi(S_0)\),那么上面那坨式子分析出来的就是一个上界,每次的\(\hat c_i\)就是均摊下来的单次代价。

浙公网安备 33010602011771号