首页 > 其他 > 详细

伸展树(Splay tree)浅谈

时间:2014-04-10 18:01:40      阅读:449      评论:0      收藏:0      [点我收藏+]

树看的越来越多,越来越神奇。

看伸展树这种神级数据结构之前,建议大家首先彻底明白二叉搜索树,这是万树的基础。

然后可以去看下treap,最好再去看下红黑树。如果有线段树的基础那更好了,我们会发现线段树难以实现一些直接删除,直接插入的数据。

这个时候就体现出神级数据解耦 伸展树的魅力了,他的区间操作的非常优雅的。


有了这些基础之后,那就可以splay了。

zig,zag,zig和zag的组合。splay也就是通过一系列的左右旋转达到了splay的目的,把当前节点旋转到指定节点的下面。


具体信息可以查看:http://blog.csdn.net/niuox/article/details/8018280

里面有介绍如何运用伸展树进行区间操作,这是我们学伸展树的一个关键所在,否则,一般的二叉搜索树,我们用treap或者set完全可以搞定。

昨天睡不着我想,splay不过是一种平衡树而已,我们是不是可以用红黑树来达到区间操作的呢,或者用treap。。。。不晓得。不过红黑树代码太长。。。

void Rotate(node *x, int c) // 旋转操作,c=0 表示左旋,c=1 表示右旋
{
    node *y = x->pre;
    y->ch[! c] = x->ch[c];
    if (x->ch[c] != Null) x->ch[c]->pre = y;
    x->pre = y->pre;
    if (y->pre != Null)
        if (y->pre->ch[0] == y) y->pre->ch[0] = x;
        else y->pre->ch[1] = x;
    x->ch[c] = y, y->pre = x;
    if (y == root) root = x; // root 表示整棵树的根结点
}

这么一段旋转的代码,写的非常优雅,把所选右旋都集合在一起了,无聊的人可以把他拆开2个。。



具体的题目:

hdu 1754  

我先闪人  有空再来继续。。。。未完待续。。。。

伸展树(Splay tree)浅谈,布布扣,bubuko.com

伸展树(Splay tree)浅谈

原文:http://blog.csdn.net/cnh294141800/article/details/23341337

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!