我试图理解摊销的复杂性并在网上进行了几次搜索,但我找不到一个好的资源。
那么任何一个人都可以解释每个操作的分摊复杂性是什么以及它如何在splay树中变成O(lg n)?
答案 0 :(得分:1)
对splay树执行的任何操作是否插入delete..etc成本由splay操作支配。因此,仅考虑展开操作的成本,该展开操作是在要展开的节点上执行的旋转。
The amortized function is given by a=c+3Rfinal(v)-3Rinitial(v)
其中a是摊余成本,c是实际成本,Rfinal是展开操作后的等级,Rinitial是旋转前节点的等级。(任何节点的等级由其子树的高度即日志给出| S |其中S是根据它生成的节点数)
现在考虑最差的情况,其中要展开的节点是叶子,因此其初始等级由0给出。 在将其展示到顶部之后,即作为根节点,其等级变为log n,其中n是树中节点的总数。
a<= 2+3logn-0
O(logn).