【数据结构】总结建堆方式、建堆时间复杂度对比分析

news2024/11/29 6:31:42

 

目录

一、建堆方式

1.堆的实现中——HeapPush()插入建堆

2.手动建堆——利用AdjustUp()向上调整建堆

3.手动建堆——利用AdjustDown()向下调整建堆

二、手动建堆时间复杂度对比分析

1.向上调整建堆时间复杂度O(N*logN)

2.向下调整建堆时间复杂度O(N)


一、建堆方式

1.堆的实现中——HeapPush()插入建堆

让我们回顾一下在堆的实现部分,我们是如何建堆的。

详细实现过程,可以回顾博客:【数据结构】 二叉树的顺序结构——堆的实现-CSDN博客

 

回顾一下 HeapPush()函数的实现

2.手动建堆——利用AdjustUp()向上调整建堆

在堆的应用中堆排序、top-k问题都用到了AdjustUp()手动建堆,该函数两个参数,一是存储空间首地址,二是孩子节点下标child,孩子结点下标和存储空间下标一一对应,用循环变量控制即可。

3.手动建堆——利用AdjustDown()向下调整建堆

在堆的应用中,我们为了少写一个AdjustUp()函数,所以一般用向上调整建堆。

向下调整建堆要满足左右子树都是堆。

❓但是实际手动建堆的情况,左右子树都不满足堆怎么办,该如何考虑:

方法:从倒数第一个非叶子结点(最后一个结点的父亲)开始调整 最后调整到根节点

二、手动建堆时间复杂度对比分析

1.向上调整建堆时间复杂度O(N*logN)

2.向下调整建堆时间复杂度O(N)

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

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

相关文章

springboot中mybatisplus注意事项

使用代码生成工具CodeGenerator 需要修改的内容 dsc.setUsername(“root”); mysql账号dsc.setPassword(“root”); mysql密码strategy.setInclude(“crm_edu”); 表名pc.setModuleName(“eduservice”); //模块名 package com.test.demo;import com.baomidou.mybatisplus.a…

(CVE-2012-1823)PHP-CGI远程代码执行漏洞(80端口)

(CVE-2012-1823)PHP-CGI远程代码执行漏洞(80端口) 一、介绍二、漏洞影响三、原理四、漏洞复现 一、介绍 php-cgi是一个类似于消息的“传递者”,它接收web容器收到的http数据包,并把里面的数据交给PHP解释器…

STM32修改主频+三种睡眠模式的实例

文章目录 前言修改主频测试 睡眠模式串口收发接线图关于配置立刻睡眠和等待睡眠模式的寄存器串口配置测试执行流程 停止模式对射式红外传感器计数接线图配置红外传感器与外部中断测试注意 待机模式RTC实时时钟接线图时钟配置测试 注意 前言 本内容主要实操修改主频与使用三种睡…

Git在windows和Linux安装并自动更新代码超详细讲解

一、Git官网安装 1、官网安装地址: Git - Downloading Packagehttps://git-scm.com/download/win 官网下载比较慢建议使用下面链接 2、国内镜像下载地址: CNPM Binaries Mirrorhttps://registry.npmmirror.com/binary.html?pathgit-for-windows/ 3、…

桥梁监控可视化大屏:现代桥梁管理的必备呀。

桥梁监控上可视化有几个重要的原因: 01.实时监控: 可视化的监控系统可以实时显示桥梁的各项监测数据,包括结构变形、振动、温度等,使监控人员能够实时了解桥梁的状态,及时发现异常情况并采取相应的措施。 02.数据分析…

STM32 | STC-USB驱动安装Windows 10(64 位)

Windows 10(64 位)安装方法 由于 Windows10 64 位操作系统在默认状态下,对于没有数字签名的驱动程序是不能安装成功的。所以在安装 STC-USB 驱动前,需要按照如下步骤,暂时跳过数字签名,即可顺利安装成功。…

【超详细】跑通YOLOv8之深度学习环境配置1

环境配置1下载安装内容如下: Anaconda:https://www.anaconda.com/download/success VScode:https://code.visualstudio.com/Download Pycharm:https://www.jetbrains.com/pycharm/download/?sectionwindows Visual Studio2019&a…

DELL T630服务器iDRAC分辨率调整办法

对于Dell T630服务器的iDRAC分辨率调整,您需要登录到iDRAC的Web界面。以下是详细的步骤: 登录iDRAC:在浏览器中输入iDRAC的IP地址,然后使用用户名(通常是“root”)和密码登录。 导航到虚拟控制台&#xff…

第十四篇:数据库设计精粹:规范化与性能优化的艺术

数据库设计精粹:规范化与性能优化的艺术 1. 引言 1.1 数据库设计在现代应用中的核心地位 在数字化的浪潮中,数据库设计如同建筑师手中的蓝图,是构建信息大厦的基石。它不仅关乎数据的存储与检索,更是现代应用流畅运行的生命线。…

STC8增强型单片机开发【电位器案例(ADC)⭐⭐】

目录 一、引言 二、硬件准备 三、电路连接 四、软件编程 五、案例实现 六、总结 一、引言 STC8系列增强型单片机以其高性能、低功耗和丰富的外设接口,在嵌入式系统开发中得到了广泛应用。其中,模数转换器(ADC)是单片机的一…

MapReduce | 二次排序

1.需求 主播数据--按照观众人数降序排序,如果观众人数相同,按照直播时长降序 # 案例数据 用户id 观众人数 直播时长 团团 300 1000 小黑 200 2000 哦吼 400 7000 卢本伟 100 6000 八戒 250 5000 悟空 100 4000 唐僧 100 3000 # 期望结果 哦吼 4…

[AIGC] 几道 redis数据结构相关面试题

文章目录 7. 数据类型的实现8. 什么是空间预分配以及惰性空间释放,SDS 是怎么实现的9. 为什么说 SDS 是二进制安全的呢10. 说说 redis 里的对象11. 使用 RedisObject 的好处12. RedisObject 的具体结构是什么 7. 数据类型的实现 8. 什么是空间预分配以及惰性空间释放…

网络无线网卡无法配置正确的 dns 服务器

网络无线网卡无法配置正确的 dns 服务器--解决办法 网络无线网卡无法配置正确的 dns 服务器--解决办法 网络无线网卡无法配置正确的 dns 服务器–解决办法 建议先使用疑难反馈(自带的) 打开网络适配中心 之后更改适配器设置,在点击 wlan 属…

Hotcoin Research | 市场洞察:2024年5月6日-5月12日

加密货幣市场表现 加密货幣总市值为1.24万亿,BTC占比53.35%。 本周行情呈现先涨后跌的一种態势,5月6日-9日大盘持续下跌,周末为震荡行情。本周的比特幣现货ETF凈流入:1.1262亿美元,其中:美国ETF流入&…

算法练习之双指针算法

目录 前言 一、移动零【做题链接】 二、复写零【做题链接】 三、快乐数【做题链接】 四、盛水最多的容器【做题链接】 五、查找总价值为目标值的两件商品【做题链接】 六、三数之和【做题链接】 七、四数之和 【做题链接】 八、有效三角形的个数【做题链接】 总结 前言…

RuoYi-Vue-Plus (SpringCache、CacheManager、@Cacheable、缓存雪崩、击穿、穿透)

一、概述 1、SpringCache是Spring提供的一个缓存框架,在Spring3.1版本开始支持将缓存添加到现有的spring应用程序中,在4.1开始,缓存已支持JSR-107注释和更多自定义的选项。 2、SpringCache利用了AOP,实现了基于注解的缓存功能&…

Python vs MATLAB:选择深度学习的首选编程语言

Python vs MATLAB:选择深度学习的首选编程语言 在深度学习领域,编程语言的选择对于初学者的学习路径和未来的职业发展至关重要。目前,Python和MATLAB都是进行科学计算和数据分析的流行工具,但它们在深度学习社区中的应用和受欢迎…

Vue报错:TypeError: Cannot read property ‘upgrade‘ of undefined

Vue报错:TypeError: Cannot read property ‘upgrade’ of undefined 前言 最近打开一个很就之前的开发项目,因为扫描包,所以删除了部分代码,后来就一直报错,现在总结一下。 报错原因:vue.config.js中 d…

vue3专栏项目 -- 四、前后端结合(上)

一、前后端分离是什么 前面我们一直在和静态数据打交道,虽然流程可以跑个半通,但是静态数据还是给我们造成了诸多不便,现在我们是时候用上后端了。 现在的应用开发模式,自从SPA出现以后,前端和后端可以平行的进行对应…

基于YOLOV8复杂场景下船舶目标检测系统

1. 背景 海洋作为地球上70%的表面积,承载着人类生活、经济发展和生态系统的重要功能。船舶作为海洋活动的主要载体之一,在海上运输、资源开发、环境监测等方面发挥着重要作用。复杂海洋环境下的船舶目标检测成为了海事管理、海洋资源开发和环境保护等领…