伸展树的学习(一):学习的前提

    学习伸展树差不多有两个多星期了吧!慢慢地也领悟到了它最基本的实现,都不敢说是:初窥门庭!最先看的是杨思雨的论文《伸展树的基本操作与应用》。现在回头看确实写得挺清晰易懂,但是可能是自己看书没仔细看,或许是悟性太差吧!一直没看懂,特别是结点旋转的那几张图,即把X旋转到树的根结点!

    后来也不知道是看到哪篇博客,讲想看懂伸展树,最好先学习一下SBT(陈启峰《Size Balanced Tree》),当然了解线段树是必须的,重点是线段树的懒操作!我就是看SBT(Size Balanced Tree(SBT)平衡二叉树)才明白旋转是怎么回事的!

    建议学习的同学自己画画图,一般画画可能就懂了!如果明白旋转了,基本上伸展树也就看懂了一半了!

    但是呢,看SBT又容易进入一个误区,那就是把思维固定到:伸展树与SBT一样,是一种二叉查找树。SBT一般是以key为关键值来组织数据,最后树的中序遍历保证存储的值是按从小到大顺序排列。比如数组:a[]={4,3,1,2,5},把a[i]放入SBT中后,中序遍历的结果就变成了:1 2 3 4 5!我个人觉得伸展树是不一样的,伸展树中序遍历能保证数组的下标从小到大输出,但不能保证数据是从小到大输出的。它维护的是区间,动态的区间,这与线段树更相似。而且伸展树与线段树相比,多了以下几个功能:插入一组数据到指定区间,删除一段区间的数据,反转区间等(参见POJ3580)。

   关于伸展树的操作,有很多的论文,这里我就不具体写了,就算写出来肯定也没那些大牛写得好!就把论文放到51cto下载版块里,以后自己想看也能很快找到!

  参考文档:

 

Size Balanced Tree(SBT)平衡二叉树

:http://blog.csdn.net/acceptedxukai/article/details/6921334

 

杨思雨:《伸展树的基本操作与应用》

Crash: 《运用伸展树解决数列维护问题》

Mashuo: 《伸展树操作详解》

由于相关的资料比较多,比较杂,包括代码,论文,我就打包放到下载版块中去,顺便也赚点下载豆!

下载地址:http://down.51cto.com/data/542004

你可能感兴趣的:(tree,splay,伸展树,数列维护,动态区间维护)