神奇的splay

我当然知道所有的splay的核心操作都是讨论6种情况
可是我深刻地感受到似乎splay可以只写4行 ==||

###神奇splay
while f[p] <> 0 do
begin
if p是左节点 then 左旋 else 右旋;
end;

无法理解有什么区别

7 条评论

  • @ 2016-04-03 12:15:27

    画一下就知道区别了

  • @ 2016-03-08 19:45:57

    Orz

  • @ 2014-07-13 14:21:20

    ....很多题,如果你这么打Splay的话是不如暴力的。。。某同学亲测、、

  • @ 2014-07-10 18:43:03

    我记得splay树旋转+判定旋转就十几行

  • @ 2014-07-10 11:37:49

    单旋Splay的均摊复杂度显然不是logn的…………你自己想想都能知道…………Splay 1再Splay n重复10W次不搞死你都奇怪…………
    还有谁说双旋Splay不是四行?

    for ( int y; y = u.par; )
    {
    if ( !r.par ) Rot ( x ); else Rot ( d ( x ) == d ( y ) ? y : x ), Rot ( x );
    }

    • @ 2014-07-10 15:52:05

      是双旋操作可以保证势能分析的某个不等式吧 单旋理论上无法证明=。=胆子够大也可以去写

    • @ 2014-07-10 18:10:43

      可是每一种双旋都可以转化为2次单旋啊

    • @ 2014-07-10 18:19:16

      orz神犇,c++精简起来语风太神表示看不懂

    • @ 2014-07-10 19:15:40

      你说的是啊…………但是如果按照你那样Splay是单旋啊……………………?

    • @ 2014-07-11 11:20:05

      可是我觉得双旋与单旋,旋转总次数相等,而且最终旋转结果相同,其实是一样的啊

    • @ 2014-07-12 10:46:18

      我觉得您需要好好考虑一下“最终旋转结果相同这句话”,自己画一画也知道显然不一样吧…………

  • @ 2014-07-09 23:28:32

    ORZ~~~

  • @ 2014-07-09 12:27:03

    orz

  • 1

信息

ID
1507
难度
7
分类
数据结构 | 平衡树 点击显示
标签
递交数
2541
已通过
409
通过率
16%
被复制
4
上传者