数据结构---堆

news2024/10/7 10:19:55

·定义
·基本操作
·建堆
·堆排序
·优先队列

一、堆的定义
·堆必须是一个完全二叉树
·还得满足堆序性

什么是完全二叉树呢?
·完全二叉树只允许最后一行不为满
·且最后一行必须从左到右排序
·最后一行元素之间不可有间隔,中间不可有空缺

如下几棵树是完全二叉树:
在这里插入图片描述
不是完全二叉树:

在这里插入图片描述

二、堆序性:
根据堆序性,可以把对分为两类:
·大根堆:每个父节点都大于它的子节点
·小根堆:每个父节点都小于它的子节点
节点下标为i,左节点为2i+1,右节点为2i+2

在这里插入图片描述
三、堆的基本操作
·上滤
·下滤
下滤:我们把根节点向下调整的方法叫做下滤。复杂度:O(logN)

以大根堆为例,我们将破坏堆序性的元素跟其他的最大子节点比较,如果小于它的最大子节点就与之交换,持续比较,交换,直到该元素大于它的子节点为止,或者移动到底部为止。

在这里插入图片描述
经过下滤:
在这里插入图片描述
·上滤:我们把子节点向上调整的方法叫做上滤
这一次的情况是只有树的最后一个元素破坏了堆序性,同理让它和它的父元素进行过比较。复杂度为:O(logN)

在这里插入图片描述
经过上滤:
在这里插入图片描述


四、如果有一个乱序的数组,要怎么操作才能把它转化成堆呢?
建堆方法:

·自顶向下:对应的操作为上滤,步骤为:1.插入堆,2.上滤
–将新元素放在堆的最后一位,然后对其进行上滤操作。
复杂度为O(N logN)

·自下向上:从倒数第二层开始,对每个父节点进行下滤。复杂度为O(N)
思路:先把下面的元素调整成堆(根先不管),然后再对父节点进行下滤操作,具体操作是从倒数第二排开始。


五、应用:
1.优先队列:可以用小根堆实现,因为小根堆根元素就是最小元素
·插入队列:上滤操作本来就是插入堆的操作,复杂度O(logN)
·弹出最小元素,弹出后要把剩下的元素调整成堆,复杂度O(logN),方法:

1、把最后一个元素放到根节点
2、进行下滤操作

2.堆排序(复杂度O(N logN)):
·存放的结果,会存放在堆的空节点里。
·我们使用大根堆进行从小到大的排序,使用小根堆进行从大到小的排序。

以大根堆从小到大排序为例:
步骤一:把根节点与最后一个没排序的节点进行交换
步骤二:寻找最大的根节点
重复步骤一二

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

CSS基础学习

HTMLCSSJavaScript 结构表现交互 学习内容: CSS是什么CSS怎么用(快速入门)CSS选择器(重点难点)美化网页(文字,阴影,超链接,列表,渐变…)盒子模型…

基于电压型磁链观测器的异步电机矢量控制学习

导读:本期主要介绍电压型磁链观测器(voltage flux observer)在静止坐标系下的表现形式,应用在异步电机矢量控制系统中。如需要文中的仿真模型,关注微信公众号:浅谈电机控制,获取。一、引言磁链估…

万字长文--详解Node.js(快速入门)

Node.js基础与扩展Node.js1、初识Node.js与内置模块1.1 Node.js初识1.2 fs文件系统模块1.3 path路径模块1.4 http模块2、模块化2.1 模块化的基本概念2.2 Node.js中模块化2.3 npm与包2.4 模块的加载机制3、Express3.1 初识Express3.2 Express路由3.3 Express中间件3.4 使用Expre…

LeetCode刷题复盘笔记—一文搞懂贪心算法之45. 跳跃游戏 II问题(贪心算法系列第五篇)

今日主要总结一下可以使用贪心算法解决的一道题目,45. 跳跃游戏 II 题目:45. 跳跃游戏 II Leetcode题目地址 题目描述: 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度…

论文投稿指南——中文核心期刊推荐(铁路运输)

【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…

Windows卸载与清除工具“ Geek 与 CCleaner ” (带你快速了解)

📜 “作者 久绊A” 专注记录自己所整理的Java、web、sql等,IT技术干货、学习经验、面试资料、刷题记录,以及遇到的问题和解决方案,记录自己成长的点滴。 🍁 操作系统【带你快速了解】对于电脑来说,如果说…

什么是闭包,Python闭包

闭包,又称闭包函数或者闭合函数,其实和前面讲的嵌套函数类似,不同之处在于,闭包中外部函数返回的不是一个具体的值,而是一个函数。一般情况下,返回的函数会赋值给一个变量,这个变量可以在后面被…

剑指 Offer 第5天、第6天

目录 剑指 Offer 04. 二维数组中的查找 剑指 Offer 50. 第一个只出现一次的字符 剑指 Offer 11. 旋转数组的最小数字 剑指 Offer 32 - I. 从上到下打印二叉树 剑指 Offer 32 - II. 从上到下打印二叉树 II 剑指 Offer 32 - III. 从上到下打印二叉树 III 剑指 Offer 04. 二…

Java线程池应用实例

线程池的学习基本概念好处应用场景ThreadPoolExecutor实例理解:执行流程自定义线程池4大核心参数测试demo结论:ExecutorService常用方法思考获取ExecutorService代码示例ScheduleExecutorService常用获取方式如下ScheduledExecutorService常用方法如下:代…

Linux | 一文带你真正搞懂Linux中的权限问题

在Linux下你有多少权限呢❓一、权限的基本概念二、Linux上的用户分类2.1 超级用户与普通用户2.2 用户之间的切换2.3 文件访问者的分类2.4 用户与访问者之间的联系三、文件属性与访问权限3.1 Linux下的文件类型(1)文件的八种类型(2&#xff09…

单机Eureka构建步骤

目录 一、Eureka基础知识 (一)什么是服务治理 (二)什么是服务注册 (三)Eureka两组件 二、单机Eureka构建步骤 (一)IDEA生成eurekaServer端服务注册中心 (二&#…

JavaWeb好用的工具、快捷键以及简单语法

一、VSCode ! tab生成一组默认页面模板lorem tab自动的生成一段随机的单词列模式编辑,将光标放在某个位置,然后按住alt,通过鼠标左键点击,就能选中多个位置一起修改/添加div.类名 tab可以直接创建一个类名为自己设定的块级元素…

前端布局神器display:flex

Flexbox,一种CSS3的布局模式,也叫做弹性盒子模型,用来为盒装模型提供最大的灵活性。首先举一个栗子,之前我们是这样实现一个div盒子水平垂直居中的。在知道对象高宽的情况下,对居中元素绝对百分比定位,然后…

java多线程的使用

温故而知新 --- Java多线程1. 关键字1.1 并发与并行1.2 进程和线程2. Java 线程2.1 Java的主线程2.2 线程声明周期3. Java 线程三种实现1.1 Big Data -- Postgres3. Java 线程三种实现1.1 Big Data -- Postgres4. Awakening1.1 Big Data -- Postgres1. 关键字 1.1 并发与并行 …

【图卷积网络】02-谱域图卷积介绍(一)

注:本文为第2章谱域图卷积介绍视频笔记,仅供个人学习使用 目录1、图卷积简介1.1 图卷积网络的迅猛发展1.2 回顾,经典卷积神经网络已在多个领域取得成功1.3 两大类数据1.4 经典卷积神经网络的局限:无法处理图数据结构1.5 将卷积扩展…

Linux查看本机状况命令

1.ip addr 查看自己的网络地址,网卡等情况 ping:查看网络可用性 2.top 查看当前计算机的cpu运行状况 在top状态下按1,可以查看自己的cpu是几核的 (下图中红框的值是空闲率,用100-空闲率就是CPU使用率,单位为%&…

sql调优相关

目录 1.调优步骤 2.小表驱动大表 3.order by 优化 4.group by优化 1.调优步骤 慢查询的开启并捕获explain慢SQL分析show profile查询SQL在Mysql服务器里面的执行细节和生命周期情况SQL数据库服务器的参数调优 2.小表驱动大表 EXISTS SELECT ... FROM table WHERE EXISTS (su…

10. 好客租房-RocketMQ快速入门[非项目必需]

本章节主要是学习RocketMQ, 目标快速入门, 能够回答或解决以下问题:了解什么是RocketMQ了解RocketMQ的核心概念动手安装RocketMQ服务快速入门,掌握RocketMQ的api使用对producer、consumer进行详解了解RocketMQ的存储特点10.1 RocketMQ简介与安装10.1.1 核心概念速通…

分享143个ASP源码,总有一款适合您

ASP源码 分享143个ASP源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下..., 143个ASP源码下载链接:https://pan.baidu.com/s/1Fd3_qaHDj2_BuslyFT8YVQ?pwdrjmi 提取码&#x…

数据库02_函数依赖,范式---软考高级系统架构师008

1.首先我们来看这个,给定一个X,能确定一个Y那么就说,X确定Y,或者Y依赖x,那么 比如y = x * x 就是x确定y,或者y依赖于x 2.然后再来看图,那么左边的部分函数依赖,就是,通过A和B能决定C,那么如果A只用给就能决定C,那么就是部分函数依赖. 3.然后再来看,可以看到,A可以决定B,那么…