各种均摊

有关数学的均摊

比较trivial。但也不是那么trivial。

大概是观察到有那么一个东西在操作中持续变小,然后使用势能分析发现复杂度是正确的。

大概率会有一部分是打暴力,这就是均摊(

颜色段均摊

ODT珂朵莉树/颜色段均摊。

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\)就是均摊下来的单次代价。

posted @ 2025-02-15 20:19  RandomShuffle  阅读(28)  评论(0)    收藏  举报