树堆

✍ dations ◷ 2025-08-15 10:00:29 #树结构

树堆(英语:Treap),是有一个随机附加域满足堆的性质的二叉搜索树,其结构相当于以随机数据插入的二叉搜索树。其基本操作的期望时间复杂度为 O ( log n ) {\displaystyle O(\log {n})} 。相对于其他的平衡二叉搜索树,Treap的特点是实现简单,且能基本实现随机平衡的结构。

Treap=Tree+Heap。Treap本身是一棵二叉搜索树,它的左子树和右子树也分别是一个Treap,和一般的二叉搜索树不同的是,Treap纪录一个额外的数据,就是优先级。Treap在以关键码构成二叉搜索树的同时,还满足堆的性质。Treap维护堆性质的方法用到了旋转,只需要两种旋转,编程复杂度比Splay要小一些。

给节点随机分配一个优先级,先和二叉搜索树的插入一样,先把要插入的点插入到一个叶子上,然后跟维护堆一样,如果当前节点的优先级比根大就旋转,如果当前节点是根的左儿子就右旋如果当前节点是根的右儿子就左旋。

由于旋转是 O ( 1 ) {\displaystyle O(1)} 的,最多进行h次(h是树的高度),插入的复杂度是 O ( h ) {\displaystyle O(h)} 的,在期望情况下 h = O ( log n ) {\displaystyle h=O(\log {n})} ,所以它的期望复杂度是 O ( log n ) {\displaystyle O(\log {n})}

因为Treap满足堆性质,所以只需要把要删除的节点旋转到叶节点上,然后直接删除就可以了。具体的方法就是每次找到优先级最大的儿子,向与其相反的方向旋转,直到那个节点被旋转到了叶节点,然后直接删除。

删除最多进行 O ( h ) {\displaystyle O(h)} 次旋转,期望复杂度是 O ( log n ) {\displaystyle O(\log {n})}

和一般的二叉搜索树一样,但是由于Treap的随机化结构,Treap中查找的期望复杂度是 O ( log n ) {\displaystyle O(\log {n})}

二叉搜索树有一个特性,就是每个子树的形态在优先级唯一确定的情况下都是唯一的,不受其他因素影响,也就是说,左子树的形态与树中大于根节点的值无关,右子树亦然。这是因为Treap满足堆的性质,Treap的根节点是优先级最大的那个节点,考虑它的左子树,树根也是子树里面最大的一点,右子树亦然。所以Treap相当于先把所有节点按照优先级排序,然后插入,实质上就相当于以随机顺序创建的二叉搜索树,只不过它并不需要一次读入所有数据,可以一个一个地插入。而当这个随机顺序确定的时候,这个树是唯一的。因此在给定优先级的情况下,只要是用符合要求的操作,通过任何方式得出的Treap都是一样的,所以不改变优先级的情况下,特殊的操作不会造成Treap结构的退化。而改变优先级可能会使Treap变得不够随机以致退化。

Treap的其它操作的期望复杂度同样是 O ( log n ) {\displaystyle O(\log {n})}

相关

  • 大东部大区大东部(法语:Grand Est)是法国的大区之一,由阿尔萨斯、香槟-阿登、洛林3个大区合并而成,于2016年1月1日正式成立、同年9月28日改用现名。2014年,法国政府开始谋划行政区划改革方案
  • 十br /一第八第十埃及第十一王朝是古埃及历史上第一中间时期的一个王朝,其首都位于底比斯。
  • 戴维·吉尔戴维·吉尔爵士,KCB FRS FRSE LLD(英语:Legum Doctor)(英语:Sir David Gill,1843年6月12日-1914年1月24日),苏格兰天文学家,知名于天文距离测量、天体照相学和大地测量学。他的职业生涯
  • 马祖卡玛祖卡(波兰语:Mazurek),原为波兰一种民间舞蹈,其形式现在仍保留在许多芭蕾舞舞剧中,其音乐经过肖邦等人的发展后,已成为古典音乐中一种经典舞曲。玛祖卡起源于波兰中部马佐夫舍地
  • 基因组内部冲突根据自私基因理论,若一基因的表现型能确保其较为成功的复制及传递,该基因的频率即会上升。一般情况下,能提升个体存活率及繁殖成功率(适存度)的基因,较易达成此一目标;然而,在某些情
  • 杰森·沃斯杰森·理查德·沃斯(Jayson Richard Werth,1979年5月20日-)是美国职棒大联盟的右外野手,生涯15年效力于蓝鸟、道奇、费城人与国民等球队,现已退休。沃斯来自一个运动世家。他的父
  • 酥头令酥头令(江淮官话扬州话/.mw-parser-output .IPA{font-family:"Charis SIL","Doulos SIL","Linux Libertine","Segoe UI","Lucida Sans Unicode","Code2000","Gentium","Genti
  • 荒木伸吾荒木伸吾(1939年1月1日-2011年12月1日)是日本著名的动画制作师及角色设计师,爱知县名古屋市出身。1964年加入动画制作公司“虫プロダクション”,并参与制作动画《小狮王》开始进
  • 李中山李中山(韩语:리 중산,又译作李锺山,1924年-2011年7月23日),朝鲜人,原朝鲜人民军军需动员总局局长(2005年)。1997年4月授人民军次帅军衔。为金日成去世,金正日上台后获得晋昇,成为朝鲜中
  • 卓肇昌卓肇昌(闽南语:Toh tiāu-tshiong,?-?),字思克,台湾清领时期凤山县人,乾隆十五年(1750年)举人,曾出任屏山书院山长,并参与编撰《重修凤山县志》,著有多首竹枝词传世。卓肇昌父亲卓梦采为清