算法通关村14关 | 堆结构

news2024/9/22 13:39:38

1. 堆的概念与特征

堆是将一组数据按照完全二叉树的存储顺序,将数据存储在一维数组中的结构,对的结构有两种,一种称为大顶堆,一种称为小顶堆。

  • 小顶堆:任意节点的值均小于等于它的左右孩子,并且最小的值位于堆顶,即根节点处
  • 大顶堆:任意节点的值均大于等于它的左右孩子,并且最大的值位于堆顶,即根节点处

也可称为大根堆,小根堆,或者最大堆,最小堆,

假设一个节点的下标为i。

  1. 当i = 0时,为根节点。
  2. 当i >= 1时,父节点为(i - 1) / 2。

有些地方叫做堆,有些地方叫做队列,两者到底是什么关系?

优先队列:就是一种队列,它的工作是poll()/peek()出队列中最大、最小的那个元素,所以叫带有优先级的队列。能够实现优先功能的队列不一定只有堆,例如二项堆、平衡树、线段树、c++会用二进制分组的vector来实现一个优先队列。

堆:堆是一个很大的概念,他并不一定是完全二叉树,用完全二叉树是因为这个容易被数组存储,但除了二叉堆之外,我们还有二项堆,斐波那契堆,这种不属于二叉树。

2. 对的构造过程

使用数组构建堆,按照层次将所有元素依次填入二叉树中,使其成为二叉树,然后不断调整,使其最终符合堆结构。

将元素依次排列到完全二叉树上去,如下图所示。

  1. int i = (size - 2) / 2 = 4(思考一下这里为什么是size-2而不是size -1)。找到数组中的4号下标。65大于其孩子,满足最大堆性质,不用交换。
  2. 然后 i = i - 1;用2和其孩子比较,2和204交换。交换之后满足最大堆,如下图左
  3. 54和其孩子比较,54和92交换,92所在子树满足最大堆,如下图右。
  4. 23和其孩子比较,23和204交换,交换完之后,23的子树却不满足了,还需要调整其子树,如下两图
  5. 12和204交换,仍然出现不平衡情况,继续调整子树。直到根节点满足要求。

这样就建成了一个大顶堆,根元素是最大的那个

3. 插入操作

插入300,将其按顺序插入到31的右孩子位置,然后不断向上爬,31<300,所以两者交换,再向上发现300比65大,交换,300>204,交换,最后就是最新堆。

4. 删除操作

        堆中的数据特殊,对堆中数据进行的操作都是针对堆顶的元素,即每次从堆顶获取的最大值或最小值,其他的不关心,所以删除的时候,也是删除堆顶。删除堆顶整个结构会被破坏,需要再次调整。如果直接删除堆顶,群龙无首就不易管理了。实际策略是将队中的最后 一个元素与根元素交换,然后再删除堆的最后一个元素。之后再交换调最大堆,直到堆顶元素满足最大堆性质。

交换完成之后

关于堆的使用口诀

查找:找大用小,大的进;找小用大,小的进。

排序:升序用小,降序用大。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Matlab(GUI程式设计)

目录 1.MatlabGUI 1.1 坐标区普通按钮 1.1.1 对齐组件 1.1.2 按钮属性 1.1.3 脚本说明 1.1.4 选择呈现 1.3 编译GUI程序 在以前的时候&#xff0c;我们的电脑还是这样的 随着科技的不断进步&#xff0c;我们的电脑也发生着翻天覆地的改变1990s&#xff1a; 在未来&#xff0c…

(三)行为模式:7、观察者模式(Observer Pattern)(C++示例)

目录 1、观察者模式&#xff08;Observer Pattern&#xff09;含义 2、观察者模式的UML图学习 3、观察者模式的应用场景 4、观察者模式的优缺点 &#xff08;1&#xff09;优点&#xff1a; &#xff08;2&#xff09;缺点 5、C实现观察者模式的实例 1、观察者模式&…

DP读书:鲲鹏处理器 架构与编程(十一)鲲鹏生态软件架构 AND 硬件特定软件

鲲鹏生态软硬件构成 鲲鹏软件构成硬件特定软件1. Boot Loader2. SBSA 与 SBBR3. UEFI4. ACPI 鲲鹏软件构成 鲲鹏处理器的软件生态是一个不断发展的软件生态&#xff0c;服务器本身也具有复杂度多样性&#xff0c;经过很长时间的发展服务器硬件有不同的操作系统方案&#xff0c…

创造商业新机遇,短视频商城APP崭露头角

随着移动互联网和社交媒体的飞速发展&#xff0c;短视频平台逐渐成为人们获取信息和娱乐的重要渠道。基于此&#xff0c;打造短视频商城APP成为引爆颠覆式购物新潮的利器。短视频商城APP结合了短视频分享和电子商务的优势&#xff0c;为用户提供了一种全新的购物体验。 颠覆传统…

AI 模型:数据收集和清洗

为了训练AI模型,需要收集和准备足够的数据。数据应该涵盖各种情况和场景,以确保系统在各种情况下都能准确地运行。数据原始来源应该是真实的,并且应该涵盖系统预计的使用情况。数据应该根据特定的需求进行采样和处理,可以来自各种来源,例如公共数据集、第三方数据提供商、…

在项目管理中,如何做好进度规划?这两点很重要!

生活中&#xff0c;做事前做好计划&#xff0c;结果总不会太差。如果是走哪算哪&#xff0c;到最后可能什么也做不好。日常生活中尚且如此&#xff0c;在项目管理中涉及人员、任务多&#xff0c;所以&#xff0c;项目经理必须具备规划能力&#xff0c;统筹项目的各种组织和要素…

网络安全(黑客)自学笔记学习路线

谈起黑客&#xff0c;可能各位都会想到&#xff1a;盗号&#xff0c;其实不尽然&#xff1b;黑客是一群喜爱研究技术的群体&#xff0c;在黑客圈中&#xff0c;一般分为三大圈&#xff1a;娱乐圈 技术圈 职业圈。 娱乐圈&#xff1a;主要是初中生和高中生较多&#xff0c;玩网恋…

Spring Boot业务代码中使用声明式事务@Transactional失效踩坑点总结

&#x1f468;‍&#x1f4bb;本文专栏&#xff1a;业务代码踩坑总结 &#x1f468;‍&#x1f4bb;本文简述&#xff1a;Spring Boot业务代码中使用声明式事务Transactional失效踩坑点总结 &#x1f468;‍&#x1f4bb;上一篇文章&#xff1a; &#x1f468;‍&#x1f4bb;有…

Leetcode394 字符串解码

思路&#xff1a;类似于入栈出栈的操作&#xff0c;分层保存数字和字符串&#xff0c;然后逐层相乘合并&#xff0c;通过判断当前字符和上一个字符类型来确定数字是否结束 class Solution:def decodeString(self, s: str) -> str:current_str [""]current_num[]…

第二章 局部图像描述子

文章目录 第二章 局部图像描述子2.1Harris角点检测器2.2SIFT&#xff08;尺度不变特征变换&#xff09;2.2.1兴趣点2.2.2描述子2.2.3检测兴趣点 第二章 局部图像描述子 本章旨在寻找图像间的对应点和对应区域。本章将介绍用于图像匹配的两种局部描述子算法。本书的很多内容中都…

RocketMQ 安装与入门

文章目录 简介下载下载目录地址 安装部署环境要求下载二进制包解压即可启动 NameServer 启动BrokerProxy单组节点单副本模式启动 使用Java客户端发布订阅消息1. 创建主题 topic2. 创建Java工程使用Maven引入Java SDK包生产者代码 ProducerDemo消费者代码 ConsumerDemo RocketMQ…

SPSS教程:如何绘制带误差的折线图

SPSS教程&#xff1a;如何绘制带误差的折线图 1、问题与数据 研究者想研究45-65岁健康男性中&#xff0c;静坐时长和血胆固醇水平的关系&#xff0c;故招募100名研究对象询问其每天静坐时长&#xff08;time&#xff09;&#xff0c;并检测其血液中胆固醇水平&#xff08;cho…

VSCode下载、安装及配置、调试的一些过程理解

第一步先下载了vscode&#xff0c;官方地址为&#xff1a;https://code.visualstudio.com/Download 第二步安装vscode&#xff0c;安装环境是win10&#xff0c;安装基本上就是一步步默认即可。 第三步汉化vscode&#xff0c;这一步就是去扩展插件里面下载一个中文插件即可&am…

安全测试-django防御安全策略

django安全性 django针对安全方面有一些处理&#xff0c;学习如何进行处理设置&#xff0c;也有利于学习安全测试知识。 CSRF 跨站点请求伪造&#xff08;Cross-Site Request Forgery&#xff0c;CSRF&#xff09;是一种网络攻击方式&#xff0c;攻击者欺骗用户在自己访问的网…

【实验二】基尔霍夫定律和叠加定理

【实验内容】 【实验报告】 表一线路图 表二线路图 线路1 线路2 同时作用 【得分】

两台电脑共享文件设置

步骤一&#xff1a;确保网络连接正常&#xff0c;可网线直连。 两台电脑IP设置&#xff0c;例&#xff1a; 步骤二&#xff1a;启用共享功能。 1.在【控制面板】中选择【网络和Internet】&#xff1b; 2.点击【网络和共享中心】&#xff0c;在左侧导航栏中&#xff0c;点击【…

政府网站之守护:如何确保信息真实与透明,避免政治风险?

在数字化时代&#xff0c;政府网站已经成为公众获取官方信息和政府政策的主要途径。确保这些信息的真实性、透明性和及时性是维护 政府公信力的关键。特别是在涉及落马官员、政治敏感信息等内容时&#xff0c;更需要加强审查与管理&#xff0c;避免带来不必要的政治风险。 那…

视频云存储/安防监控/AI视频智能分析网关V3:工服检测功能详解

在一些工地、后厨、化工、电力等特定的场景中&#xff0c;工服的穿戴是必不可少的。这不仅是安全制度的要求&#xff0c;更能降低工作风险、提高工作效率。TSINGSEE青犀AI 边缘计算网关硬件 —— 智能分析网关可以通过实时监测和识别工人的工装穿戴情况&#xff0c;确保他们符合…

DBeaver 23.1.5 发布

导读DBeaver 是一个免费开源的通用数据库工具&#xff0c;适用于开发人员和数据库管理员。DBeaver 23.1.5 现已发布&#xff0c;更新内容如下. Data editor 重新设计了词典查看器面板 UI 空间数据类型&#xff1a;曲线几何线性化已修复 数据保存时结果选项卡关闭的问题已解决…

springboot实战(三)之多环境部署配置文件生效方式

环境&#xff1a; jdk&#xff1a;1.8 springboot版本&#xff1a;2.7.15 配置&#xff1a; 1.新建yml文件 在resources包中创建application-dev.yml、application-testing.yml两个yml文件 2.配置 在application.yml进行配置生效文件 3.注意事项 新建yml的名称必须以&qu…