算法通关村第十四关-青铜挑战认识堆

大家好我是苏麟 , 今天带大家认识认识堆 .

堆是将一组数据按照完全二叉树的存储顺序,将数据存储在一个一维数组中的结构。

堆有两种结构,一种称为大顶堆,一种称为小顶堆 :

大顶堆

大顶堆的任何一个父节点的值,都大于或等于它左、右孩子 节点的值。

小顶堆

最小堆的任何一个父节点的值,都小于或等于它左、右孩子 节点的值。


堆的根节点叫作堆顶

大顶堆小顶堆的特点决定了:大顶堆的堆顶是整个堆中的最大元素;小顶堆的堆顶是整个堆中的最小元素。

堆的自我调整

所谓堆的自我调整,就是把一个不符合堆性质的完全二叉树,调整成一个堆 .

下面让我们以最小堆为例,看一看二叉堆是如何 进行自我调整的 

插入节点

当堆插入节点时,插入位置是完全二叉树的最后一个位置。例如插入一个 新节点,值是 0

这时,新节点的父节点 5 比 0 大,显然不符合最小堆的性质。于是让新节点“上 浮”,和父节点交换位置

继续用节点 0 和父节点 3 做比较,因为 0 小于 3,则让新节点继续“上浮”

继续比较,最终新节点 0 “上浮”到了堆顶位置

这就是插入的过程 .

删除节点

堆删除节点的过程和插入节点的过程正好相反,所删除的是处于堆顶的节点。例如删除最小堆的堆顶节点 1 

这时,为了继续维持完全二叉树的结构,我们把堆的最后一个节点 10 临时补到 原本堆顶的位置

接下来,让暂处堆顶位置的节点10和它的左、右孩子进行比较,如果左、右孩子节点中最小的一个(显然是节点2)比节点10小,那么让节点10“下沉”

继续让节点10和它的左、右孩子做比较,左、右孩子中最小的是节点7,由于10 大于7,让节点10继续“下沉”

这样一来,二叉堆重新得到了调整

大家好好理解一下 .

这期就到这里 , 下期见!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

道可云会展元宇宙平台全新升级,打造3D沉浸式展会新模式

随着VR虚拟现实、人工智能、虚拟数字人等元宇宙技术的快速发展,各个行业正试图通过元宇宙技术寻求新的发展突破口,会展行业也不例外。会展作为经贸领域的重要产业形态,越来越多的企业和组织开始寻求通过元宇宙技术为展会赋能,以满…

【MySQL】视图 + 用户管理

视图 前言正式开始视图用户管理user表创建新用户修改用户密码权限管理给用户赋权剥夺权限 前言 本篇所讲的视图和我上一篇事务中所讲的读视图不是一个东西,二者没有任何关系,如果看过我前一篇博客的同学不要搞混了。 其实视图和用户管理本来是想着分开…

集简云语聚AI新增模型测试,支持多模型同时进行交互,快速评估不同模型性能

语聚AI模型测试 在ChatGPT爆火的推动下,由生成式 AI 掀起的全球人工智能新浪潮就此拉开了序幕,人工智能也成为越来越多企业提升业务效率、优化业务流程的首选方案。 然而,面对层出不穷的AI模型,每个模型在完善度、功能性、易用性…

php5构造无字母数字的webshell实现任意命令执行

目录 引言 如果是在php7 如果是在php5 现在我们来上传文件 最后的结果: 看本篇前可以先看这一篇:利用异或、取反、自增bypass_webshell_waf-CSDN博客 引言 上一篇介绍了如何构造出一个无字母数字的webshell,但是如果后端的代码变成了这…

MIT线性代数笔记-第20讲-克拉默法则,逆矩阵,体积

目录 20.克拉默法则,逆矩阵,体积求逆公式克拉默法则用行列式关联体积 打赏 20.克拉默法则,逆矩阵,体积 求逆公式 考虑二阶方阵,有 [ a b c d ] − 1 1 a d − b c [ d − b − c a ] \begin{bmatrix} a & b \\ …

若依项目前后端部署记录

前言 本文较乱,用于笔者记录项目部署过程,对于想学习若依项目部署的同学看文章可能会导致误导,建议读者多查资料,保持疑问并谨慎验证。 项目官方指导: 环境部署 | RuoYi 1、环境部署相关 JDK > 1.8 (推荐1.8版本…

堆排序算法

我们之前学了堆: 数据结构---堆-CSDN博客 数据结构:堆的实现-CSDN博客 我们知道堆有小堆和大堆之分,根节点不是最小就是最大的,我们可以利用这个特点实现堆排序 思路: 为什么我们要选择堆排序呢 它的效率相比于冒泡…

【Java】浅析FutureTask的核心方法get

前言 在进行多线程编程时,我们离不开两个重要的任务接口:Runnable、Callable。一个线程想要运行,首先它得知道它的任务是什么(它要做什么),而这两个接口恰好是用于表示一个线程需要执行的任务。 Runnable和…

Vmware安装Centos7

CentOs7镜像文件下载 centos7 镜像文件下载-CSDN博客 配置虚拟机 打开Vmware,点击新建虚拟机 典型安装与自定义安装 典型安装:VMware会将主流的配置应用在虚拟机的操作系统上,对于新手来很友好。 自定义安装:自定义安装可以针…

【Python表白系列】如何实现爱心光波的表白效果(完整代码)

文章目录 爱心光波环境需求完整代码详细分析系列文章爱心光波 环境需求 python3.11.4PyCharm Community Edition 2023.2.5pyinstaller6.2.0(可选,这个库用于打包,使程序没有python环境也可以运行,如果想发给好朋友的话需要这个库哦~)【注】 python环境搭建请见:https://w…

如何下载IEEE出版社的Journal/Conference/Magazine的LaTeX/Word模板

当你准备撰写一篇学术论文或会议论文时,使用IEEE(电气和电子工程师协会)的LaTeX或Word模板是一种非常有效的方式,它可以帮助你确保你的文稿符合IEEE出版的要求。无论你是一名研究生生或一名资深学者,本教程将向你介绍如…

【C/PTA —— 13.指针2(课内实践)】

C/PTA —— 13.指针2(课内实践) 一.函数题6-1使用函数实现字符串部分复制6-2 拆分实数的整数部分和小数部分6-3 存在感 二.编程题7-1 单词反转 一.函数题 6-1使用函数实现字符串部分复制 void strmcpy(char* t, int m, char* s) {int len 0;char* ret …

Python过滤掉特定区域内的矩形框

Python过滤掉特定区域内的矩形框 前言前提条件相关介绍实验环境过滤掉特定区域内的矩形框方法一:直接法(for循环遍历)代码实现输出结果 方法二:列表推导式代码实现输出结果 前言 由于本人水平有限,难免出现错漏&#x…

Vue2+echarts 实现图表的简单绘制

Echarts是一个基于JavaScript的开源可视化库,由百度开发和维护。它通过简单的配置方式,就可以实现各种复杂的数据可视化和图表展示。Echarts支持多种图表类型,包括柱状图、折线图、饼图、散点图、漏斗图等,同时还支持地图可视化和…

zabbix6.4.0配置邮件及企微机器人群聊告警

一、邮件告警 根据公司邮箱自行配置,电子邮件、用户账号密码填自己的邮箱账号密码 动作本次使用的默认的,如果为了更加美观可自行修改。 二、企业微信机器人告警 首先在企微上创建群聊,之后添加群聊机器人 将地址复制,后面用 …

0Ω电阻最大过流能力及作用用途

0Ω电阻最大过流能力及作用用途 0Ω电阻过流能力0Ω电阻的作用 0Ω电阻过流能力 0Ω电阻不一定是真正的0Ω电阻,0Ω电阻存在一定的阻值偏差,主要看生产电阻厂商做哪种了。厂商都是根据电阻标准文件 EN60115-2, 里头0Ω电阻实际最大阻值有 10…

五、关闭三台虚拟机的防火墙和Selinux

目录 1、关闭每台虚拟机的防火墙 2、关闭每台虚拟机的Selinux 2.1 什么是SELinux

Visual Studio2022创建Windows服务程序

文章目录 Visual Studio2022创建Windows服务程序打开工具创建新项目创建成功重命名服务添加安装程序编写逻辑生成程序安装服务打开服务启动服务停止服务卸载服务修改项目配置重新生成安装服务启动服务 Visual Studio2022创建Windows服务程序 打开工具 创建新项目 创建成功 重命…

【翻译】直流电动机的控制

直流电(DC)电机由于其转矩易于控制,速度控制范围广,已广泛应用于可调速驱动或可变转矩控制中。然而,直流电机有一个主要的缺点,即它们需要机械装置,如换向器和刷子来连续旋转。这些机械部件需要…

改进YOLO5:结合CVPR2023最新 PConv |包含 YOLOv5 / YOLOv8 模型 YAML 文件

改进YOLO5:结合CVPR2023最新 PConv |包含 YOLOv5 / YOLOv8 模型 YAML 文件 一、论文总结PConv模块优势二、YOLOv51. yaml文件2. common代码文件三、YOLOv81. yaml2. modules文件添加3. Task文件4. 测试