当前位置: 首页 > news >正文

浅谈 fhq-treap —— 或是 Splay 的不二选择?

本文章同步发布至 浅谈 fhq-treap —— 或是 Splay 的不二选择?

一、从 BST 谈起

BST 的意思是二叉搜索树,它满足对于所有子树的根节点 \(x\),满足 \(v_{rson} > v_x > v_{lson}\),也就是说,它的中序遍历为一个有序的序列。

这就是一个 BST,其的中序遍历为 1 3 4 5 6 7 8

BST 的实现很简单,但由于它的结构不稳定,如上面两张图都是同一个中序遍历,所以会被构造数据卡到 \(O(n)\),但随机数据下仍然为 \(O(\log_2n)\)

二、关于 treap

treap 上的每一个点有两个值:权值和键值。

  • 权值:我们采用 BST 进行维护,使得 \(v_{rson} > v_x > v_{lson}\)
  • 键值:我们随机化键值,然后采用小根堆维护键值,使得 \(g_x < g_{lson},g_{rson}\)

为什么这棵树的结构是一定的?我们发现 treap 的根节点的键值一定最小,也就是我们的根节点确定了。

此时我们左右两棵子树的权值范围确定了,再根据键值的限制,左右儿子也会确定下来,同理,这颗树也会确定下来。

确定好结构后,我们的 treap 就很好实现了,treap 分为有旋和无旋两种,有旋就是 Splay 等,这里我们将以 fhq-treap 代表的无旋树。

二-ex、关于复杂度

对于权值我们是无法控制的,但对于键值,根据随机化我们的 Heap 高度是 \(\log_2n\),也就是这颗树的高度被 Heap 所限,为 \(\log_2n\),此时的操作复杂度就为 \(O(\log_2n)\)

三、分裂与合并

fhq-treap 的优点是编写简单,可以实现很多操作,但缺点是需要利用多次分裂与合并操作来进行维护,常数大。

1.分裂

我们的分裂操作是将权值小于等于 \(x\) 的树从原树上分裂下来,将一颗 \([l,r]\) 范围内的树变为 \([l,x]\)\([x+1,r]\),将一颗 treap 分裂为两颗 treap。

由于 treap 的性质,我们发现分裂后的两颗 treap 的结构也是一定的!

我们来思考如何分裂:

  1. 对于一棵以 \(u\) 为根的子树,根据 BST 的特点,我们发现若 \(u\) 的左儿子 \(u_{lson}\) 权值 \(val \le x\),那么它的左子树一定也小于 x,此时我们可以把这颗树先分离出来(以 \(x \le 5\) 为例):

  2. 对于右子树的操作和左子树一样,但是对于右儿子的权值 \(\le x\),我们只将右儿子与其的左子树加入新树,而右儿子的右子树需要再次递归判断。

  3. 对于左儿子的权值 \(\ge x\),我们需要递归它左儿子的左子树,对于右儿子也一样。

http://www.zskr.cn/news/54478.html

相关文章:

  • 实用指南:分布式架构未来趋势:从云原生到智能边缘的演进之路
  • vba 处理特定段落前的表观空行中的分页符
  • 人工智能之编程进阶 Python高级:第七章 数据库类模块
  • linux for 跳出循环
  • Linux用户管理相关知识
  • 人工智能之编程进阶 Python高级:第五章 时间类模块
  • NSSCTF(WebFTP —— easyupload1.0) - 实践
  • 推迟win11更新137年的方法
  • CF954H
  • 实用指南:centos7.2安装HAProxy1.5.18
  • mysql 安装python3.11和pip3.11
  • 用最纯粹的白话,解析 AI Memory
  • 2025苏州代理记账口碑榜:3 家靠谱机构/公司出圈,财税服务选对不踩坑!
  • 完整教程:电脑控制DFPlayer Mini MP3播放音乐
  • 在 RTE2025 大会,我看到了 AI 语音如何让机器学会「与人相处」丨社区来稿
  • 【C++】哈希表的搭建【开放定址法vs链地址法】
  • linux flash player
  • 2025年东营搬家公司哪家便宜?双福搬家公司,东营单位搬家/东营设备搬运/东营跨省搬家/覆盖全场景,服务东营河口/ 东营垦利/ 东营跨省搬家公司推荐
  • SharedWorker 与 Worker 的区别
  • 块状链表
  • win11为什么我的不显示虚拟机平台选项
  • 常规链表建立
  • HDLBits网站学习——Procedures
  • linux firewall
  • 2025 最新电磁灶厂家权威推荐榜:聚焦商用大功率 / 智能款,国际测评认证口碑实力双优品牌合集商用多头/商用智能/SUKIO/3500 瓦大功率/SUKI0/硕高电磁灶公司推荐
  • 移动端反射探针格式用什么比较合理
  • linux find 删除
  • 完整教程:Navicat - 连接 mysql 、 sqlserver 数据库 步骤与问题解决
  • 2025年平衡重制造企业权威推荐榜单:平衡块订做/后平衡铁工厂/尾部配重铁源头厂家精选
  • 03.入门篇-集成开发环境