堆的原理解析

news2024/11/26 12:22:47

看这篇文章需要对比较器有一定的了解,可以看我的这篇文章:

认识比较器_鱼跃鹰飞的博客-CSDN博客

堆的实际存储方式是数组,但是脑海中应该把他想象成一种树的结构

依次加入下标0-8的9个数(添加过程中会不断的和父节点大小进行比较,具体怎么比较根据当前堆是大根堆还是小根堆确定),对应的关系如下:

在这棵树中,对于某一个节点(数组中下标为i),他的父节点是: (i - 1)/2

他的左右子节点(如果存在,存在的判断条件是节点的坐标小于heapSize)分别是2*i + 1 和 2 * i + 2

堆分为大根堆和小根堆:

大根堆可以理解为整棵树以及树的所有子树都满足:当前树的最大节点是树的根节点

小根堆刚好相反,根是最小的节点,下面我们以大根堆为例来认知树的创建和调整的过程:

往堆中添加元素的过程:依次往堆中(实际上的数组和脑海中的树中)放入以下几个数:12,10,6, 8, 11

 这个过程中添加11的时候有一步调整,因为11放在4位置违背了大根堆的原则(以10为根的这棵子树的根节点10不是这棵子树的最大节点)。

调整的过程:跟父节点比较直到父节点大于等于当前节点或者当前节点已经是根节点为止(只跟父节点比较,不管兄弟)。

堆的获取最大值并从堆中弹出的过程:

 步骤:1.把根节点和堆中最后一个元素交换

2.当前根节点跟自己的左右孩子最大的比较,如果孩子比较大就和最大孩子交换。

3.一直调整到比左右孩子都大或者左右孩子不在堆中为止。

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

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

相关文章

舰船交流电网绝缘监测及故障定位的研究及产品选型

摘要:交流电网和电气设备的绝缘状况直接影响舰船电力系统安全,其绝缘电阻的下降是一个不可避免的过程,成为了电网安全的严重隐患。电气设备绝缘材料的劣化过程是不可逆的,对舰船交流电网进行绝缘在线监测及快速定位绝缘故障支路&a…

浅谈:JVM垃圾回收

一、四种类加载器(双亲委托/全盘委托机制) 1.启动类加载器: 加载 Java 核心类库,无法被 Java 程序直接引用。 2.扩展类加载器: 加载 Java 的扩展库。Java 虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载 Java 类。 3.系统类加载器: 它根据 Java 应用的类…

seleniumUI自动化登录失败案例重新尝试WhileTrue

一个用户每次登录失败,失败N次,无法进入下一url时,怎样会重新尝试N次重新登录呢 ? 我们可以使用wihile true判断,并使用currenturl判断,下面就介绍以下个人的方法 currenturlEGTconfigFile.driver.curren…

Opencv识别车牌

Opencv识别车牌 #encoding:utf8 import cv2 import numpy as np Min_Area 50 #定位车牌 def color_position(img,output_path): colors [#([26,43,46], [34,255,255]), # 黄色 ([100,43,46], [124,255,255]), # 蓝色 ([35, 43, 46], [77, 255, 255]) # 绿色 ] hsv cv2.cvtCo…

推荐 7 个超牛的 Spring Cloud 实战项目

个 把一个大型的单个应用程序和服务拆分为数个甚至数十个的支持微服务,这就是微服务架构的架构概念,通过将功能分解到各个离散的服务中以实现对解决方案的解耦。 关于微服务相关的学习资料不多,而 GitHub 上的开源项目可以作为你微服务之旅…

STM32平衡小车 mpu6050学习

MPU6050简介 MPU6050是一款性价比很高的陀螺仪,可以读取X Y Z 三轴角度,X Y Z 三轴加速度,还有内置的温度传感器,在姿态解析方面应用非常广泛。 二、硬件连接 由于采用IIC通信,最基本的只需要采用四根线就可以了。分别VCC,GND,SCL,SDA连接到单片机 SCL-----PB6 SDA---…

23种设计模式之观察者模式(黑马程序员)

观察者模式 一、概述二、结构三、实现四、总结在最后 一、概述 观察者模式又被称为发布-订阅模式(Publish/Subscribe)模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有…

java 键值对详解及java键值对代码

在 Java中,对象可以理解为一个列表。这个列表里面的每个元素都是一个“键”,而每个“键”都是一个值。 键值对的概念,并不是在 Java中第一次出现,在 java 1.x中就已经有了。那时候它的意思是在一个命名空间中建立两个名字相同的对…

利用三维CNN对阿尔茨海默病进行多模态研究

文章目录 Is a PET All You Need? A Multi-modal Study for Alzheimer’s Disease Using 3D CNNs摘要方法实验结果讨论结论 Is a PET All You Need? A Multi-modal Study for Alzheimer’s Disease Using 3D CNNs 摘要 提出了一个系统评估多模态dnn的框架重新评估基于FDG-P…

Android-实现一个登录页面(kotlin)

准备工作 首先,确保你已经安装了 Android Studio。如果还没有安装,请访问 Android Studio 官网 下载并安装。 前提条件 - 安装并配置好 Android Studio Android Studio Electric Eel | 2022.1.1 Patch 2 Build #AI-221.6008.13.2211.9619390, built …

如何使用命令行添加配置码云仓库SSH秘钥-git仓库也一样

使用命令行添加配置码云仓库SSH秘钥 为什么要如何使用命令行添加配置码云仓库SSH秘钥?生成密钥你可以按如下命令来生成 sshkey:可以参考下图执行指令 添加密钥登录你的码云,鼠标移入头像,设置。点击 SSH公钥,打开配置页面&#x…

新型数字智慧城市综合趋势解决方案(ppt可编辑)

本资料来源公开网络,仅供个人学习,请勿商用,如有侵权请联系删除 新型智慧城市解决方案总体架构 新型智慧城市顶层规划(咨询)服务概述 服务定义:提供面向城市及其产业的智慧化咨询服务,涵盖需求…

linux——进程的概念与状态

大家好,我是旗帜僵尸。今天我将带领大家学习进程的概念。 本篇文章将继续收录于我的linux专栏中,若想查看关于linux其它知识的文章也可以点击右方链接。旗帜僵尸——linux 文章目录 一、进程概念冯诺依曼体系结构OS(操作系统Operator System&…

突破传统监测模式:业务状态监控HM的新思路

作者:京东保险 管顺利 一、传统监控系统的盲区,如何打造业务状态监控。 在系统架构设计中非常重要的一环是要做数据监控和数据最终一致性,关于一致性的补偿,已经由算法部的大佬总结过就不在赘述。这里主要讲如何去补偿&#xff…

电子阅读器市场角力,AI成为关键变量

配图来自Canva可画 近年来,随着国家“书香型社会”建设政策的出台,公众的阅读需求正在逐年增加,各类读书产品和读书活动,也如同雨后春笋般涌现,人们的阅读体验日益得到丰富。比如,昨天世界读书日举行的“不…

Photoshop在启动时出现读取计算机特定首选项时出错,或者提示暂存盘已满导致打不开该如何处理

上午还能用,下午打开Photoshop时就报此错误 点击确定后,出现下图错误 首先,先试试删除设置文件。在长按shiftctrlalt的情况下用鼠标右键点击Photoshop图标,点击打开(此间别松手),就会出现下图&a…

“智慧赋能 强链塑链”|工程物资供应链管理中的数字化应用

工程项目中的供应链管理至关重要 工程建设行业是国民经济的重要支柱之一,虽然在总产值上持续保持增长态势,但近年来行业的利润总额增速已连续多年呈现下降趋势。究其原因,可以大体从两个方面来看:一是行业盈利能力出现下降&#x…

Xshell CentOs Linux命令2

上一次我们说了几个命令,文件的创建删除等,还有就是文件查看,今天我们继续看几个命令。 echo echo命令 我们看到我们在echo 后面跟一个字符串,不同会帮我们打印在屏幕上,这里我们需要补充一些东西,在Linu…

多线程常见的锁策略

目录 1.1 乐观锁 和 悲观锁 1.2 轻量级锁 和 重量级锁 1.3 自旋锁 和 挂起等待锁 1.4 互斥锁 和 读写锁 1.5 可重入锁 和 不可重入锁 1.6 公平锁 和 非公平锁 1.7 synchronized 锁的属性 一、锁策略 说到锁,Java 里面常用的锁有 synchronized ,锁…

安全防御 --- 态势感知、VPN

一、态势感知 1、概念 态势感知(SA --- Situational Awareness)是对一定时间和空间内的环境元素进行感知,并对这个元素的含义进行理解,最终预测这些元素在未来的发展状态。 作用: 态势感知能够检测出超过20大类的云上…