旋转数为奇数的八字树


9

将项目插入展开树时,将基于Z字形或Z字形模式成对执行旋转。如果要执行奇数个旋转,则可以从叶子开始进行额外的旋转,也可以保存额外的旋转并在根部进行。有关系吗?

例如,在附加的图像中,我将4插入BST,然后将其“展开”到根目录。在图的顶部,我首先在叶子节点处找到“ zig-zig”对,并从底部开始执行“ zig-zag”展开,最后在根部进行右旋。在图的底部,我首先从叶子开始进行奇数旋转,然后对根进行曲折展开。

哪个是对的?还是两者都会导致通常的八卦树表演?

两种方法以奇数转数张开

Answers:


4

对于分析确实没有关系。分析splay-tree性能的关键引理是访问引理。它指出splay(x)操作的摊销成本小于,其中是树的根,。子树的权重是其节点权重的总和。(将根据引理的应用来选择权重(正)。)使用的潜在函数。1+3(r(t)r(x))tr(u):=log(weight of u's subtree)Φ(T)=x node of Tr(t)

访问引理的证明着眼于单个zig / zig-zag / zig-zig等操作的成本。你得到

  1. 之字形或zag运算的成本为,其中是运算后的范围,是向上旋转的节点。1+3(r+(u)r(u))r+u

  2. 之字形/锯齿形和对称操作的成本为。3(r+(u)r(u))

如果将这些差异加起来以在单个splay(x)中执行的操作,则得到的望远镜总和为。1+3(r(t)r(x))

如果更改旋转顺序,您将获得相同的总和。唯一的区别是现在“ +1”来自第一个旋转而不是最后一个旋转。您甚至可以在中间进行Zig旋转。所有进一步的(经典的)分析都依赖于访问引理。

但是,最后执行一次旋转的原因是,您事先不知道节点的深度是偶数还是奇数。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.