Treap

来源:互联网 发布:问道钓鱼软件 编辑:程序博客网 时间:2024/05/22 05:10

一直想学习平衡树,这几天终于学会了平衡树的一种简单的实现方法,Treap!
先从宏观上讨论下什么是Treap.
Treap是一棵概率型的自平衡二叉搜索树,节点包含两个域fix和value,对于任意节点,对于value来说,树是二叉搜索树,对于fix来讲,树是二叉堆。要注意的是,value是插入到平衡树容器中的元素(显然value的定义域是个偏序集),而fix则是在元素插入时随机生成的数据。Treap不是严格的平衡树,但由于fix元素取值是均匀的,会使树趋向于平衡(实际应用中它的效果相当不错)。
当元素一个新的节点插入到树中时(以value为关键字确定位置),要在不改变树中序遍历的前提下,维护fix,这就需要平衡化旋转技术,Treap之所以简洁的一个原因就是他只有‘左旋’,‘右旋’两种操作,左旋会将右子树变为根,右旋会将左子树变为根;而Treap的删除同样很简单,只要不断将根节点向叶节点方向旋转,当根为的子树为1or2时,即可直接删除。
这里先越过实现,讨论的Treap的用途,首先他可以作为一种排序方法;其次可以作为高效的字典,判定某个状态是否存在;更高级的用法是,附加值域f,这样就可以建立value->f的映射关系。

原创粉丝点击