每天一点算法-堆(Day9)

简介: 每天一点算法-堆(Day9)

上一篇介绍了完全二叉树,今天介绍的就是一颗完全二叉树,但要被放到数组里做实现。

最大堆、最小堆

最小堆(小根堆):所有父结点小于子结点的堆。

最大堆(大根堆):所有父结点大于子结点的堆。

堆操作

的操作一般有以下基本操作:上浮(子结点与其父结点互换位置)、下沉(父结点与其子结点互换位置)、插入pop(删除最大堆中的最大值或者最小堆中的最小值)等。为了实现这些,需要给结点按顺序定一个下标,并用数组来存放。即:

若某结点的下标为 i, 则其 左儿子的下标为 2*i+1右儿子的下标为 2*i+2

以下是一个小根堆存放数组示例:

下面介绍两个比较重要的操作——插入pop

插入

不破坏原的规则的情况下插入一个结点。以上面的小根堆为例,现在尝试插入一个结点"27":
插入操作流程

pop

pop操作第一步是把根结点删除,没了根就不能是堆了,于是可以先把最后一个结点充当根(若是以其他结点补充到根会使还原堆的规则更复杂),接下来要做的就是还原最大堆和最小堆的特性(父子结点关系),以小根堆为例的流程:

1.删除原有根;

2.最后一个结点充当根,值记做M;

3.M与其左右子结点中,若两个子节点都大于M,则完成还原,退出流程;若有子结点大于M,则取大于M中的左右子节点中最大的一个与M互换;

4.M重复第3步直到完成还原或者M已经是叶节点。

图示(画图软件很费时间,手画吧,字丑了点请见谅):
pop操作

相关文章
|
4月前
|
存储 机器学习/深度学习 算法
数据结构与算法:堆
朋友们大家好啊,本篇文章来到堆的内容,堆是一种完全二叉树,再介绍堆之前,我们首先对树进行讲解
数据结构与算法:堆
|
23天前
|
数据采集 算法
基于PSO粒子群算法的三角形采集堆轨道优化matlab仿真
该程序利用PSO算法优化5个4*20矩阵中的模块采集轨迹,确保采集的物品数量及元素含量符合要求。在MATLAB2022a上运行,通过迭代寻优,选择最佳模块组合并优化轨道,使采集效率、路径长度及时间等综合指标最优。具体算法实现了粒子状态更新、需求量差值评估及轨迹优化等功能,最终输出最优轨迹及其相关性能指标。
|
2月前
|
算法 Java 开发者
Java面试题:Java内存探秘与多线程并发实战,Java内存模型及分区:理解Java堆、栈、方法区等内存区域的作用,垃圾收集机制:掌握常见的垃圾收集算法及其优缺点
Java面试题:Java内存探秘与多线程并发实战,Java内存模型及分区:理解Java堆、栈、方法区等内存区域的作用,垃圾收集机制:掌握常见的垃圾收集算法及其优缺点
28 0
|
2月前
|
存储 算法 Java
Java面试题:解释JVM的内存结构,并描述堆、栈、方法区在内存结构中的角色和作用,Java中的多线程是如何实现的,Java垃圾回收机制的基本原理,并讨论常见的垃圾回收算法
Java面试题:解释JVM的内存结构,并描述堆、栈、方法区在内存结构中的角色和作用,Java中的多线程是如何实现的,Java垃圾回收机制的基本原理,并讨论常见的垃圾回收算法
29 0
|
2月前
|
算法 安全 调度
逆天改命!Python高级数据结构堆(Heap)与优先队列,让你的算法效率飙升至宇宙级!
【7月更文挑战第8天】Python的heapq模块和queue.PriorityQueue实现了堆和优先队列,提供高效算法解决方案。堆用于Dijkstra算法求解最短路径,例如在图论问题中;PriorityQueue则在多线程下载管理中确保高优先级任务优先执行。这两个数据结构提升效率,简化代码,是编程中的强大工具。
32 0
|
3月前
|
存储 算法
【数据结构和算法】---二叉树(2)--堆的实现和应用
【数据结构和算法】---二叉树(2)--堆的实现和应用
16 0
|
3月前
|
存储 算法 Java
面试高频算法题汇总「图文解析 + 教学视频 + 范例代码」之 二分 + 哈希表 + 堆 + 优先队列 合集
面试高频算法题汇总「图文解析 + 教学视频 + 范例代码」之 二分 + 哈希表 + 堆 + 优先队列 合集
|
4月前
|
存储 机器学习/深度学习 算法
数据结构与算法⑬(第四章_中_续二)堆解决Topk问题+堆的概念选择题
数据结构与算法⑬(第四章_中_续二)堆解决Topk问题+堆的概念选择题
45 3
|
4月前
|
Arthas 监控 算法
JVM工作原理与实战(二十五):堆的垃圾回收-垃圾回收算法
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了垃圾回收算法评价标准、标记清除算法、复制算法、标记整理算法、分代垃圾回收算法等内容。
59 0
JVM工作原理与实战(二十五):堆的垃圾回收-垃圾回收算法
|
4月前
|
算法 C++
c++算法学习笔记 (19) 堆
c++算法学习笔记 (19) 堆