无旋式treap

news/2025/2/25 7:49:18/文章来源:https://www.cnblogs.com/-include-lmt/p/18735300

无旋式 Treap(Treap 即 Tree + Heap)是一种自平衡的二叉搜索树,结合了二叉搜索树(BST)和堆(Heap)的性质,在 C++ 算法中有着重要的应用。下面从定义、原理、常见操作、代码示例等方面详细介绍无旋式 Treap。
定义与原理

定义

  • 无旋式 Treap 本质上是一棵二叉搜索树,每个节点除了存储键值(Key)外,还额外维护一个随机优先级(Priority)。它的键值满足二叉搜索树的性质,即左子树的所有节点键值小于根节点键值,右子树的所有节点键值大于根节点键值;而优先级满足堆的性质,通常是大根堆,即每个节点的优先级大于其左右子节点的优先级。

原理

  • 无旋式 Treap 与传统的有旋 Treap 不同,它不通过旋转操作来维护树的平衡,而是利用分裂(Split)和合并(Merge)这两个基本操作来实现插入、删除等操作,从而保证树的平衡性。随机赋予的优先级使得树在平均情况下具有较好的平衡性,避免了二叉搜索树可能出现的极端不平衡情况(如退化为链表),进而保证了各种操作的时间复杂度接近 。

常见操作

分裂操作(Split)

  • 功能:将一棵 Treap 按照给定的键值 分裂成两棵 Treap,一棵包含所有键值小于等于 的节点,另一棵包含所有键值大于 的节点。
  • 实现思路:从根节点开始递归地比较当前节点的键值与 的大小。如果当前节点的键值小于等于 ,则将当前节点及其左子树划分到左子树中,并继续对其右子树进行分裂;反之,则将当前节点及其右子树划分到右子树中,并继续对其左子树进行分裂。

合并操作(Merge)

  • 功能:将两棵 Treap 合并成一棵 Treap,要求第一棵 Treap 的所有键值都小于第二棵 Treap 的所有键值。
  • 实现思路:比较两棵 Treap 根节点的优先级,选择优先级较高的节点作为新的根节点。如果第一棵 Treap 的根节点优先级高,则将其右子树与第二棵 Treap 合并作为新的右子树;否则,将第二棵 Treap 的左子树与第一棵 Treap 合并作为新的左子树。

插入操作

  • 功能:向 Treap 中插入一个新的节点。
  • 实现思路:首先创建一个新节点,其键值为要插入的值,优先级为随机生成。然后将原 Treap 按照新节点的键值进行分裂,得到两棵 Treap,再将新节点与这两棵 Treap 依次合并。

删除操作

  • 功能:从 Treap 中删除一个指定键值的节点。
  • 实现思路:将原 Treap 按照要删除的键值进行分裂,得到两棵 Treap,一棵包含所有键值小于等于要删除键值的节点,另一棵包含所有键值大于要删除键值的节点。然后再将包含小于等于要删除键值节点的 Treap 按照要删除键值减 1 进行分裂,得到三棵 Treap,中间那棵只包含要删除的节点,将其舍弃,最后将剩下的两棵 Treap 合并。

板子

应用场景

  • 数据存储与检索:可用于高效地存储和检索数据,例如在数据库系统中实现索引结构。
  • 区间查询:结合分裂和合并操作,可以方便地实现区间查询,例如查找某个范围内的所有元素。
  • 动态数据处理:适用于需要频繁插入和删除操作的动态数据集,能够在保证操作效率的同时维护数据的有序性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/889381.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

读DAMA数据管理知识体系指南04数据治理(上)

读DAMA数据管理知识体系指南04数据治理(上)1. 数据治理 1.1. Data Governance, DG1.1.1. 定义是在管理数据资产过程中行使权力和管控,包括计划、监控和实施1.1.2. 数据治理职能是指导所有其他数据管理领域的活1.1.3. 目的是确保根据数据管理制度和最佳实践正确地管理数据1.1…

Virtual Box设置桥接模式

一、硬件 1.查看宿主机ip cmd命令:ipconfig 无线局域网适配器 WLAN:连接特定的 DNS 后缀 . . . . . . . :IPv6 地址 . . . . . . . . . . . . : 保密本地链接 IPv6 地址. . . . . . . . : fe80::f087:44c8:88bc:b041%11IPv4 地址 . . . . . . . . . . . . : 192.168.43.149子网…

【NuGet攻略】C#开发者必备技能:构建发布开发工具包

来源 https://mp.weixin.qq.com/s/YqKTdyLXuODBLxnhar52Xg 2025年02月22日 17:44 广东前言 在 C# 开发领域里,构建代码库,分享与使用可复用代码的机制是十分必要的,它可以提高开发效率。通常,我们把可复用代码打包后的文件称为包(Package)。 在 .NET 中,通过使用 NuGet…

【2025穿越时空 怀旧经典】VMware Workstation Pro助你重返WindowsXP,让怀旧不再是空谈!

🚀 个人主页 极客小俊 ✍🏻 作者简介:web开发者、设计师、技术分享 🐋 希望大家多多支持, 我们一起学习和进步! 🏅 欢迎评论 ❤️点赞💬评论 📂收藏 📂加关注使用VMware Workstation Pro 虚拟机安装XP系统 让你瞬间回到黄金年代准备WindowsXP ISO镜像文件 大家…

【2025最新】VMware Workstation Pro 虚拟机配置与安装VMware Tools 感受它的强大~

🚀 个人主页 极客小俊 ✍🏻 作者简介:web开发者、设计师、技术分享 🐋 希望大家多多支持, 我们一起学习和进步! 🏅 欢迎评论 ❤️点赞💬评论 📂收藏 📂加关注安装VMware Tools VMware Tools是什么 VMware Tools是VMware虚拟机中自带的一种增强工具,它提供了一…

【2025最新】 神奇!VMware Workstation Pro虚拟机还原与删除功能,让你轻松应对各种场景!

🚀 个人主页 极客小俊 ✍🏻 作者简介:web开发者、设计师、技术分享 🐋 希望大家多多支持, 我们一起学习和进步! 🏅 欢迎评论 ❤️点赞💬评论 📂收藏 📂加关注删除虚拟机 删除虚拟机其实很简单,首先选择你要删除的虚拟机, 然后鼠标右键, 选择移除即可! 如图但这…

VMware Workstation Pro 虚拟机基础配置教程,方便你的神操作!

🚀 个人主页 极客小俊 ✍🏻 作者简介:web开发者、设计师、技术分享 🐋 希望大家多多支持, 我们一起学习和进步! 🏅 欢迎评论 ❤️点赞💬评论 📂收藏 📂加关注VMware Workstation Pro 基本配置与操作 在我们安装好VMware之后,接下来我们可以对VMware做一个基本的…

web开发 辅助学习管理系统开发日记 day1

现在时间:2025/2/25/2:52 在这个寒假与很多人交流之后我决心从算法竞赛转开发了,比预计的时间要早一点不过也无伤大雅。可能会在博客上分享一些自己开发中遇到的一些问题和知识。 本来一直在着手的苍穹外卖的开发,但由于知识上存在各种漏洞,以及自己的能力问题,决心先从简单…

2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤

在1 使用ollama完成DeepSeek本地部署中使用ollama完成deepSeek的本地部署和运行,此时我可以在PowerShell中通过对话的方式与DeepSeek交流,但此时本地模型不具备联网搜索能力,无法根据网上信息来回答我的问题,同时我也无法将我自己的知识给他参考,这样本地模型相比直接使用…

【毕业设计】【河蟹识别微信小程序】项目总结

一、项目需求与背景 1. 项目背景与需求近年来,相关水产公司以及水产研究所等,利用类似水池生态育种等群体育种方法, 共培育了“长江 1 号”、“长江 2 号”、 “光合 1 号”、“诺亚 1 号”、“江海 21 号”以及“长荡湖 1 号”总计 6 类优良品种。这些新培育的河蟹品种,不仅…

日志(logging)

【一】函数式简单配置 import logging logging.debug(debug message) logging.info(info message) logging.warning(warning message) logging.error(error message) logging.critical(critical message)默认情况下Python的logging模块将日志打印到了标准输出中,且只…

解决Docker连接XQuartz报错

背景 打开XQuartz,在桌面右上角菜单栏中的XQuartz偏好设置中的安全性中启用 "允许从网络客户端连接",并重启XQuartz生效,后续操作中要保持XQuartz为打开状态,不要退出XQuartz报错内容: root@9b90039a4d17:~# ros2 run turtlesim turtlesim_node Authorization r…