向下调整算法(详解)c++

算法流程: 

  1. 与⽗结点的权值作⽐较,如果⽐它⼤,就与⽗亲交换; 
  2. 交换完之后,重复 1 操作,直到⽐⽗亲⼩,或者换到根节点的位置

大家可能会有点疑惑,这个是大根堆,22是怎么跑到上面的?刚开始的时候都是大根堆,比如22的位置,原本是99,是一个合法的大根堆,我们在删除堆的元素的时候,就会让小元素(22)跑到顶部,因为删除堆顶元素的操作是,堆尾本来有一个22,堆顶元素是99,我们要把99删掉,就是拿99和22交换,此时删除数组里面最后一个元素,就是删除99,22跑到上面的时候左右两边的子树都是一个合法的大根堆,就是22,不是平白无故爬上来的,是在删除堆顶元素的时候跑上来的,跑完之后左右子树全都是一个合法的堆,此时我们在执行向下调整到算法才是有意义的,如果22跑到上面的时候,左右边的子树都不是一个合法的大根堆的话,向下调整是没有意义的。 

时间复杂度

最差情况下,我会从根节点一直转移,转移一个树的高度,因此它的时间复杂度也是O(logN)

代码实现

void down(int parent)//拿当前结点和孩子作比较
{
	int child = parent * 2;
	//当孩子存在指向向下调整算法
	while (child <= n) //左孩子都不存在,右孩子一定不存在
	{
		//找最大的孩子
		//存在右孩子并且右孩子大于左孩子,条件满足指向最大的孩子,否则不作为
		if (child + 1 <= n && heap[child + 1] > heap[child]) child++;
		if (heap[parent] >= heap[child]) return; //如果父节点大于孩子节点就不用调整了
		
		swap(heap[parent], heap[child]); //交换父子节点
		parent = child; //父节点向下走
		child = parent * 2; //孩子向下走
	}
}

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

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

相关文章

unity学习25:用 transform 进行旋转和移动,简单的太阳地球月亮模型,以及父子级关系

目录 备注内容 1游戏物体的父子级关系 1.1 父子物体 1.2 坐标关系 1.3 父子物体实际是用 每个gameobject的tranform来关联的 2 获取gameObject的静态数据 2.1 具体命令 2.2 具体代码 2.3 输出结果 3 获取gameObject 的方向 3.1 游戏里默认的3个方向 3.2 获取方向代…

C基础算法与实现

前言 通过业务侧输入需求,使用代码完成。 1.偶数立方和 编写函数求1~100中奇数的平方与偶数的立方的和 1.1代码实现结果 1.2源码示例 #include <stdio.h>// 计算1到100中奇数的平方与偶数的立方的和 int calculateSum() {int sum 0;// 遍历1到100之间的所有数字for (…

基于SSM实现的乡村振兴文化平台系统功能实现十八

一、前言介绍&#xff1a; 1.1 项目摘要 农耕文明是广大群众在几千年的农业生产生活中智慧的结晶&#xff0c;不仅是乡土文化的核心和精髓&#xff0c;还是中华文明的起源和基因。因此&#xff0c;传承和发扬优秀乡村文化&#xff0c;是传承农耕文明的必然要求。 文化振兴是乡…

如何让一个用户具备创建审批流程的权限

最近碰到一个问题&#xff0c;两个sandbox&#xff0c;照理用户的权限应该是一样的&#xff0c;结果开发环境里面我可以左右的做各种管理工作&#xff0c;但是使用change set上传后&#xff0c;另一个环境的同一个用户&#xff0c;没有相对于的权限&#xff0c;权限不足。 当时…

实现B-树

一、概述 1.历史 B树&#xff08;B-Tree&#xff09;结构是一种高效存储和查询数据的方法&#xff0c;它的历史可以追溯到1970年代早期。B树的发明人Rudolf Bayer和Edward M. McCreight分别发表了一篇论文介绍了B树。这篇论文是1972年发表于《ACM Transactions on Database S…

解锁维特比算法:探寻复杂系统的最优解密码

引言 在复杂的技术世界中&#xff0c;维特比算法以其独特的魅力和广泛的应用&#xff0c;成为通信、自然语言处理、生物信息学等领域的关键技术。今天&#xff0c;让我们一同深入探索维特比算法的奥秘。 一、维特比算法的诞生背景 维特比算法由安德鲁・维特比在 1967 年提出…

CPU 100% 出现系统中断 怎么解决

CPU 100% 出现系统中断 怎么解决 电脑开机时会掉帧&#xff0c;切换到桌面时就会卡顿&#xff0c;然后打开任务管理器就会看到系统中断的cpu占用率达到100%&#xff0c;过一段时间再打开还是会有显示100%的占用率&#xff0c;这个问题怎么解决&#xff1f; 文章目录 CPU 100% …

Python 梯度下降法(五):Adam Optimize

文章目录 Python 梯度下降法&#xff08;五&#xff09;&#xff1a;Adam Optimize一、数学原理1.1 介绍1.2 符号说明1.3 实现流程 二、代码实现2.1 函数代码2.2 总代码2.3 遇到的问题2.4 算法优化 三、优缺点3.1 优点3.2 缺点 Python 梯度下降法&#xff08;五&#xff09;&am…

labelme_json_to_dataset ValueError: path is on mount ‘D:‘,start on C

这是你的labelme运行时label照片的盘和保存目的地址的盘不同都值得报错 labelme_json_to_dataset ValueError: path is on mount D:,start on C 只需要放一个盘但可以不放一个目录

中间件安全

一.中间件概述 1.中间件定义 介绍&#xff1a;中间件&#xff08;Middleware&#xff09;作为一种软件组件&#xff0c;在不同系统、应用程序或服务间扮演着数据与消息传递的关键角色。它常处于应用程序和操作系统之间&#xff0c;就像一座桥梁&#xff0c;负责不同应用程序间…

玩转大语言模型——配置图数据库Neo4j(含apoc插件)并导入GraphRAG生成的知识图谱

系列文章目录 玩转大语言模型——使用langchain和Ollama本地部署大语言模型 玩转大语言模型——ollama导入huggingface下载的模型 玩转大语言模型——langchain调用ollama视觉多模态语言模型 玩转大语言模型——使用GraphRAGOllama构建知识图谱 玩转大语言模型——完美解决Gra…

sizeof和strlen的对比与一些杂记

1.sizeof和strlen的对比 1.1sizeof &#xff08;1&#xff09;sizeof是一种操作符 &#xff08;2&#xff09;sizeof计算的是类型或变量所占空间的大小&#xff0c;单位是字节 注意事项&#xff1a; &#xff08;1&#xff09;sizeof 返回的值类型是 size_t&#xff0c;这是一…

书生大模型实战营6

文章目录 L1——基础岛玩转书生「多模态对话」与「AI搜索」产品MindSearch 开源的 AI 搜索引擎书生浦语 InternLM 开源模型官方的对话类产品书生万象 InternVL 开源的视觉语言模型官方的对话产品在知乎上的提交 L1——基础岛 玩转书生「多模态对话」与「AI搜索」产品 MindSea…

three.js+WebGL踩坑经验合集(6.1):负缩放,负定矩阵和行列式的关系(2D版本)

春节忙完一轮&#xff0c;总算可以继续来写博客了。希望在春节假期结束之前能多更新几篇。 这一篇会偏理论多一点。笔者本没打算在这一系列里面重点讲理论&#xff0c;所以像相机矩阵推导这种网上已经很多优质文章的内容&#xff0c;笔者就一笔带过。 然而关于负缩放&#xf…

Baklib解析内容中台与人工智能技术带来的价值与机遇

内容概要 在数字化转型的浪潮中&#xff0c;内容中台与人工智能技术的结合为企业提供了前所未有的发展机遇。内容中台作为一种新的内容管理和生产模式&#xff0c;通过统一管理和协调各种内容资源&#xff0c;帮助企业更高效地整合内外部数据。而人工智能技术则以其强大的数据…

Learning Vue 读书笔记 Chapter 4

4.1 Vue中的嵌套组件和数据流 我们将嵌套的组件称为子组件&#xff0c;而包含它们的组件则称为它们的父组件。 父组件可以通过 props向子组件传递数据&#xff0c;而子组件则可以通过自定义事件&#xff08;emits&#xff09;向父组件发送事件。 4.1.1 使用Props向子组件传递…

小程序电商运营内容真实性增强策略及开源链动2+1模式AI智能名片S2B2C商城系统源码的应用探索

摘要&#xff1a;随着互联网技术的不断发展&#xff0c;小程序电商已成为现代商业的重要组成部分。然而&#xff0c;如何在竞争激烈的市场中增强小程序内容的真实性&#xff0c;提高用户信任度&#xff0c;成为电商运营者面临的一大挑战。本文首先探讨了通过图片、视频等方式增…

【游戏设计原理】96 - 成就感

成就感是玩家体验的核心&#xff0c;它来自完成一件让自己满意的任务&#xff0c;而这种任务通常需要一定的努力和挑战。游戏设计师的目标是通过合理设计任务&#xff0c;不断为玩家提供成就感&#xff0c;保持他们的参与热情。 ARCS行为模式&#xff08;注意力、关联性、自信…

Linux系统上安装与配置 MySQL( CentOS 7 )

目录 1. 下载并安装 MySQL 官方 Yum Repository 2. 启动 MySQL 并查看运行状态 3. 找到 root 用户的初始密码 4. 修改 root 用户密码 5. 设置允许远程登录 6. 在云服务器配置 MySQL 端口 7. 关闭防火墙 8. 解决密码错误的问题 前言 在 Linux 服务器上安装并配置 MySQL …

读书笔记-《Redis设计与实现》(一)数据结构与对象(下)

各位朋友新年快乐~ 今天我们来继续学习 Redis 。 01 整数集合 当集合仅包含整数值&#xff0c;并且元素数量不多时&#xff0c;Redis 就会采用整数集合来作为集合键的底层实现。 typedef struct intset {// 编码方式uint32_t encoding;// 元素数量uint32_t length;// 数组in…