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

《征服数据结构》树堆(Treap)

摘要:

1,Treap的介绍

2,Treap节点的插入

3,Treap节点的删除

4,Treap和笛卡尔树的区别

1,Treap的介绍

Treap又叫树堆,属于一种自平衡二叉搜索树,是由单词Tree和Heap构成,是一种具有二叉搜索树和堆两种数据结构的特性。在前面我们讲过《笛卡尔树》,它也是一种具有二叉搜索树和堆的两种数据结构的特性,关于它俩的区别我们后面在介绍。

我们知道如果随机使用一组数据创建二叉搜索树,则二叉搜索树很可能会退化成一个链表,增加了操作的时间复杂度。这个时候我们可以给每个节点随机生成一个优先级,这个优先级要满足堆的特性。因为是随机生成的,所以从概率上来说退化成链表的可能性就非常小。

Treap在节点插入和删除的时候也会进行旋转,因为它不是高度平衡的,所以Treap比我们前面讲的《AVL树》要简单很多,在讲解之前我们先来看下Treap的节点类。

Java 代码:

class TreapNode {int key, priority;TreapNode left, right;public TreapNode(int key) {this.key = key;// 节点优先级,满足堆的特性,随机生成的this.priority = new Random().nextInt();this.left = this.right = null;}
}

C++ 代码:

struct TreapNode {int key, priority;TreapNode *left = nullptr;TreapNode *right = nullptr;// 节点优先级priority,满足堆的特性,随机生成的TreapNode(int key) : key(key), priority(rand()) {}
};

节点类中有一个优先级priority,它是随机生成的,要满足堆的特性,这里我们使用最大堆,堆顶元素是优先级最高的。

再来看下节点的旋转,旋转不会改变二叉搜索树的特性,但会改变堆的特性,旋转的目的就是把优先级高的节点往上调整,优先级低的节点往下调整,这和我们前面讲的《数据结构堆》类似,不过在堆中是直接交换,不是通过旋转。

ea1a7ae8745d50a6669026df1ca39869.png

357713933934536f35e12ef2edf3b2c8.png

相关文章:

《征服数据结构》树堆(Treap)

摘要: 1,Treap的介绍 2,Treap节点的插入 3,Treap节点的删除 4,Treap和笛卡尔树的区别 1,Treap的介绍 Treap又叫树堆,属于一种自平衡二叉搜索树,是由单词Tree和Heap构成,是…...

论文笔记:OneBit: Towards Extremely Low-bit Large Language Models

202402 arxiv 1 背景 模型量化主要通过把模型的线性层【nn.Linear】(Embedding 层和 Lm_head 层除外)转化为低精度表示实现空间压缩 此前工作的基础是利用 Round-To-Nearest(RTN)方法把高精度浮点数近似映射到附近的整数网格然而…...

英语文化中的音乐分类及其发展历史(Classical、Jazz、Rock、Pop、Electronic、Country、RB、Hip-Hop)

文章目录 英语文化中的音乐分类及其发展历史1. 简介2. 古典音乐 (Classical Music)2.1 起源与发展2.2 技术与风格 3. 爵士音乐 (Jazz Music)3.1 起源与发展3.2 技术与风格 4. 摇滚音乐 (Rock Music)(Rock and roll)4.1 起源与发展4.2 技术与风格 5. 蓝调…...

C语言-栈、队列、二叉树

12 栈、队列、二叉树 目录 12 栈、队列、二叉树 一、栈、队列、二叉树是什么? 二、栈 1. 特点:先进后出 -- 有底的盒子 2. 使用场景:函数调用 -- 中断机制 3. 实现栈的形式: 三、队列 1. 特点:先进先出 -- 水…...

pinia-plugin-persistedstate 插件不生效

引入使用该插件使用时发现不生效 原因:pinia实例调用顺序不当 将: // import ./assets/main.css import { createApp } from vue import { createPinia } from pinia import piniaPluginPersistedstate from pinia-plugin-persistedstate import App fr…...

sqlite 合并两个数据库中的特定表

sqlite 合并两个数据库中的特定表 命令行python 版本 命令行 .open v1/mydb.db attach v2/mydb.db as db2; insert into main.表1 select * from db2.表1; insert into main.表2 select * from db2.表2; .exit参数说明v1/mydb.db主db文件路径,合并后的结果就是它…...

winform中设置DateTimePicker参数为空

在C#中,使用DateTimePicker控件时,您可以将其Value属性设置为null或者DateTime.MinValue来表示没有选定的日期或时间。以下是如何设置默认值为空的示例代码: dateTimePicker1.Value DateTime.MinValue; 或者,如果您希望用户不能…...

Python爬虫(8)

JsonPath介绍使用 JsonPath是一种轻量级的查询库,可以从JSON文本数据中进行筛选和提取操作。有点类似于使用XPath在HTML数据中提取数据的功能。JsonPath 也可以通过使用类似于 XPath 的表达式来访问 JSON对象中的属性和元素,并支持通配符、筛选器和函数…...

靓图!多点创新!CEEMDAN-Kmeans-VMD-CNN-LSTM-Attention双重分解+卷积长短期+注意力多元时间序列预测

靓图!多点创新!CEEMDAN-Kmeans-VMD-CNN-LSTM-Attention双重分解卷积长短期注意力多元时间序列预测 目录 靓图!多点创新!CEEMDAN-Kmeans-VMD-CNN-LSTM-Attention双重分解卷积长短期注意力多元时间序列预测效果一览基本介绍程序设计…...

zdpgo_gin_limit 为zdpgo_gin打造的接口限流框架,当API接口需要限制访问频率的时候可以使用此框架

zdpgo_gin_limit 为zdpgo_gin打造的接口限流框架,当API接口需要限制访问频率的时候可以使用此框架 安装 go get github.com/zhangdapeng520/zdpgo_gin_limit使用教程 基于内存的限流 package mainimport (gin "github.com/zhangdapeng520/zdpgo_gin"…...

Java1234的Vue学习笔记

第一节 vue.js简介 简介 第二节 vue开发工具 vscode 第三节:vue HelloWorld实现 理解vue双向绑定v-model的概念 底层数据改变视图对应显示会变,视图绑定数据变会影响底层数据,对应MVVM模式http://blog.java1234.com/blog/articles/510.html <!DOCTYPE html> <…...

嵌入式八股-C++面试91题(20240809)

1. 讲一讲封装、继承、多态是什么&#xff1f; 封装&#xff1a;将具体实现过程和数据封装成一个类&#xff0c;只能通过接口进行访问&#xff0c;降低耦合性&#xff0c;使类成为一个具有内部数据的自我隐藏能力、功能独立的软件模块。 意义&#xff1a;保护代码防止被破坏&…...

如何恢复误删视频?找回误删视频文件的办法分享

在数字化时代&#xff0c;视频已成为我们生活中不可或缺的一部分&#xff0c;记录着珍贵的回忆、工作资料或是学习素材。然而&#xff0c;在电脑上一不小心误删视频文件&#xff0c;该怎么办&#xff1f;视频误删怎么恢复&#xff1f;有什么小技巧可以找回删除的视频&#xff1…...

游戏手柄开发一款游戏

使用游戏手柄开发一款游戏是一个既有趣又充满挑战的项目。这通常涉及多个步骤&#xff0c;包括选择合适的硬件、学习编程技能、设计游戏逻辑以及测试和优化游戏。以下是一个大致的步骤指南&#xff0c;帮助你开始这个过程&#xff1a; 1. 确定游戏类型和概念 游戏类型&#x…...

【阿旭机器学习实战】【39】脑肿瘤数据分析与预测案例:数据分析、预处理、模型训练预测、评估

《------往期经典推荐------》 一、【100个深度学习实战项目】【链接】&#xff0c;持续更新~~ 二、机器学习实战专栏【链接】&#xff0c;已更新31期&#xff0c;欢迎关注&#xff0c;持续更新中~~ 三、深度学习【Pytorch】专栏【链接】 四、【Stable Diffusion绘画系列】专…...

深度学习基础 - 梯度垂直于等高线的切线

深度学习基础 - 梯度垂直于等高线的切线 flyfish 梯度 给定一个标量函数 f ( x , y ) f(x, y) f(x,y)&#xff0c;它的梯度&#xff08;gradient&#xff09;是一个向量&#xff0c;表示为 ∇ f ( x , y ) \nabla f(x, y) ∇f(x,y)&#xff0c;定义为&#xff1a; ∇ f ( x…...

py2exe打包

要用到py2exe打包python程序&#xff0c;记录一下。 写一个setup.py文件&#xff0c;内容如下&#xff1a; from distutils.core import setup import py2exeoptions {"py2exe":{"compressed": 1, # 0或1 1压缩&#xff0c;0不压缩"optimize&quo…...

Gerrit存在两个未审核提交且这两个提交有冲突时的解决方案

Gerrit存在两个未审核提交且这两个提交有冲突时的解决方案 问题背景 用户A提交了一个记录&#xff0c;用户A的记录未审核此时用户B又提交了&#xff0c;这个时候管理员去合并代码&#xff0c;合了其中一个后再去合另一个发现合并不了&#xff0c;提示冲突&#xff0c;这个时候另…...

基于单片机的智能风扇设计

摘 要: 传统风扇无法根据周围环境的温度变化进行风速的调整&#xff0c;必须人为地干预才能达到需求 。 本文基于单片机的智能风扇主要解决以往风扇存在的问题&#xff0c;其有两种工作模式: 手动操作模式和自动运行模式&#xff0c;人们可以根据需要进行模式选择。 在自动运行…...

【实战】Spring Security Oauth2自定义授权模式接入手机验证

文章目录 前言技术积累Oauth2简介Oauth2的四种模式授权码模式简化模式密码模式客户端模式自定义模式 实战演示1、mavan依赖引入2、自定义手机用户3、自定义手机用户信息获取服务4、自定义认证令牌5、自定义授权模式6、自定义实际认证提供者7、认证服务配置8、Oauth2配置9、资源…...

保姆级教程:PX4 EKF调参实战,手把手教你搞定Q、R矩阵(附避坑指南)

PX4 EKF调参实战&#xff1a;从传感器噪声到Q/R矩阵优化的完整指南 当无人机在强风环境下突然出现位置漂移&#xff0c;或是穿越机在高速机动时姿态估计突然发散——这些场景背后往往隐藏着扩展卡尔曼滤波器(EKF)参数配置不当的问题。作为PX4飞控的核心状态估计算法&#xff0c…...

ViPER4Windows-Patcher 音效修复工具:让无损音质在Windows 10/11完美呈现

ViPER4Windows-Patcher 音效修复工具&#xff1a;让无损音质在Windows 10/11完美呈现 【免费下载链接】ViPER4Windows-Patcher Patches for fix ViPER4Windows issues on Windows-10/11. 项目地址: https://gitcode.com/gh_mirrors/vi/ViPER4Windows-Patcher &#x1f3…...

【AI智能体】Dify 实战:构建企业级自然语言SQL查询引擎

1. 从个人工具到企业级解决方案的跨越 第一次接触Dify的自然语言转SQL功能时&#xff0c;我被它的便捷性惊艳到了。只需要输入"显示上季度销售额最高的产品"&#xff0c;系统就能自动生成正确的SQL语句。但当我尝试在团队中推广使用时&#xff0c;各种问题接踵而至&a…...

GKD规则分享功能:导出与导入自动化配置的实用技巧

GKD规则分享功能&#xff1a;导出与导入自动化配置的实用技巧 GKD作为一款强大的Android自动化工具&#xff0c;其规则分享功能让用户能够轻松导出和导入精心配置的自动化规则。无论是备份个人设置还是分享给朋友&#xff0c;这个功能都能大幅提升使用效率&#xff01;&#x…...

WRNavigationBar最佳实践:10个实用技巧提升你的iOS开发效率

WRNavigationBar最佳实践&#xff1a;10个实用技巧提升你的iOS开发效率 【免费下载链接】WRNavigationBar 超简单&#xff01;&#xff01;&#xff01; 一行代码设置状态栏、导航栏按钮、标题、颜色、透明度&#xff0c;移动等 WRNavigationBar which allows you to change …...

QT6 + CMake + QML开发:你的图片和QML文件加载不出来?可能是.qrc没配对

QT6 CMake QML开发&#xff1a;资源加载失败的终极排查指南 当你花了几个小时精心设计了QML界面&#xff0c;却在运行时看到一片空白或"找不到文件"的错误提示时&#xff0c;那种挫败感每个QT开发者都深有体会。特别是在QT6和CMake的现代开发环境中&#xff0c;资源…...

面试复盘(Debrief)的艺术:挂了面试不可怕,如何通过感谢信获取真实Feedback并为下次“埋伏笔”?

在2026年竞争极其激烈的北美科技求职市场中&#xff0c;即使是背景最优秀的候选人&#xff0c;也必然会经历面试失败。在工业界的招聘漏斗中&#xff0c;由于技术栈匹配度、团队预算&#xff08;Headcount&#xff09;变动或单纯的竞争者过强&#xff0c;收到拒信&#xff08;R…...

StructBERT情感分类模型在教育领域的情绪分析应用

StructBERT情感分类模型在教育领域的情绪分析应用 教育工作者如何从海量学生反馈中快速识别情绪变化&#xff1f;AI情感分析技术正在重新定义教学体验优化方式 1. 教育场景中的情感分析需求 在日常教学过程中&#xff0c;学生通过各种渠道表达他们的感受和体验&#xff1a;课程…...

PyTorch 2.8镜像精彩案例分享:使用AnimateDiff生成动漫风格短视频合集

PyTorch 2.8镜像精彩案例分享&#xff1a;使用AnimateDiff生成动漫风格短视频合集 1. 开箱即用的高性能深度学习环境 PyTorch 2.8深度学习镜像为创作者和开发者提供了一个强大的工具箱&#xff0c;特别适合需要生成高质量视频内容的场景。这个经过深度优化的环境基于RTX 4090…...

终极Google Drive下载解决方案:专业级gdrivedl实战指南

终极Google Drive下载解决方案&#xff1a;专业级gdrivedl实战指南 【免费下载链接】gdrivedl Google Drive Download Python Script 项目地址: https://gitcode.com/gh_mirrors/gd/gdrivedl Google Drive文件下载是许多开发者和技术爱好者面临的常见挑战&#xff0c;特…...