- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Mzoi 2008 Godric
手把手教你用TREAP
Godric
0 前言
作为一个Splayer,要写这样一篇关于treap的文章来推广treap,实在是
一件不太爽的事。然而不可否认,treap在OI中有着很重要的作用。在此谨以
这篇文章来简单介绍一下Treap。
由于作者本人数学基础的薄弱,难以给出很多操作时间效率的分析,因此本
文立足点是treap的实现,希望对那些已经对BST有所掌握,正在学习平衡树
的OIER有所帮助。同时由于作者本人的treap实践经历并不多,难免会有一些
对细节的疏忽甚至是严重错误,还请大牛指出。
1 什么是treap
1
Treap,或者叫做RandomizedBinarySearchTree,是一种平衡树 的替
代品,它采用的“平衡”规则和AVL,RB-TREE以及最近风头正劲的SBT有着很
大的区别。AVL和SBT采用的都是利用高度或树规模来保持整个树的高度不超
过O(logN),从而保证了各项操作的时间复杂度是O(logN)级别的。而treap
利用了“随机”的 思想,引入了随机的因素,从而达到避免二叉搜索树退化情
况的目的。
一个很有名的关于treap的等式是:treap=tree+heap。就我个人看来,
如果没有对这里的“heap”有着正确理解的话,往往会陷入一些误区。因为很
1 平衡树——这里的平衡树(BalancedBianrySearch Tree)仅指AVL,红黑树等“平衡”的二叉搜索树。
Mzoi 2008 Godric 1
Mzoi 2008 Godric
多人对于“heap”的概念可能不是太清楚,往往认为“二叉堆”和“堆”等同,
所以要能对treap有一个正确的理解,首先要明确这里的“heap”与二叉堆的
区别。
2 正确理解Treap
Treap=Tree+ Heap
1)Tree
Treap首先是一颗二叉树,更进一步说,treap首先是一种特殊的二叉
2
树——二叉搜索树 。由于满足BST的性质,treap能够用于很多需要一定“序”
关系的场合,这在后面的叙述中将会逐渐谈到。
2)Heap
对于Heap的理解说难也难,说容易也容易。只要记住这里的Heap只满
3
足Priority[Lch[T]]=Priority[T]和Priority[Rch[T]]=Priority[T] 这样的“堆性质”,
而不一定是二叉堆那样的完全二叉树。这在初期可能会对OIER们造成一些困惑,
但当你熟练了之后,就会发现这其实很好理解。
那么,这个优先级应该由什么来确定呢??这就是treap和其它BST不同
的地方——treap的优先级与输入的数据没有关系,而是利用系统生成的一个随
机数。由于引入了随机因素,正如随机化快速排序中那样,最坏情况的出现与输
入的数据没有了必然的联系,转而依靠随机数的出现序列,但当随机序列不好时,
又因为还受到数据的影响,导致最坏情况出现的概率非常小,因而treap的各
2 二叉搜索树——二叉搜索树(BinarySearchTree)有很多其它的叫法,例如排序二叉树等,有关二叉搜索
树的性质在此不再赘述。应该说在学习任何平衡树前首先要能够写出最一般的二叉搜索树,这对于学习好
平衡树有着很重要的意义。
3 treap中各结点间优先级的关系有着不同的实现,简便起见,本文中都采用子结点优先级不超过根结点优先
级的方法。
Mzoi 2008 Godric 2
Mzoi 2008 Godric
项操作都更偏向于O(logN)级别的,而不是
文档评论(0)