数据结构之:堆
堆(Heap)是计算机科学中的一种特别的完全二叉树结构,它满足某种特定顺序,用于实现优先队列等数据结构。堆主要有两种类型:最大堆(Max Heap)和最小堆(Min Heap)。
定义
- 最大堆:在最大堆中,任何一个父节点的值都大于或等于它的子节点的值。这意味着堆的根节点包含了堆中的最大值。
- 最小堆:在最小堆中,任何一个父节点的值都小于或等于它的子节点的值。这意味着堆的根节点包含了堆中的最小值。
特性
- 完全二叉树:堆是一种特殊的完全二叉树,除了最后一层外,其他每一层都被完全填充,并且所有节点都尽可能地向左对齐。
- 堆性质:堆中的每个节点都满足子节点小于(最大堆)或大于(最小堆)父节点的性质。
表示
堆通常使用数组来表示。对于给定位置的元素i(从0开始计数):
- 它的父节点位置是
(i - 1) / 2。 - 它的左子节点位置是
2*i + 1。 - 它的右子节点位置是
2*i + 2。
操作
- 插入(Insert):在堆中插入一个新元素。新元素被加到堆的末尾,然后通过一系列上浮(对于最大堆)或下沉(对于最小堆)操作,恢复堆的性质。
- 删除(Delete):在最大堆中删除根节点(即最大元素),在最小堆中删除根节点(即最小元素)。通常,堆的最后一个元素被移动到根节点,然后通过一系列下沉操作,恢复堆的性质。
- 构建(Build):将一个无序数组构建成一个堆。可以通过从最后一个非叶子节点开始,向前进行下沉操作,直到根节点,来实现。
应用
- 优先队列:堆是实现优先队列的理想结构,可以快速访问队列中的最大值或最小值。
- 堆排序:堆排序算法是基于堆的选择排序,通过构建最大堆或最小堆,来实现数组的排序。
- 图算法:在Dijkstra和Prim算法中,堆用于高效地选取最小边或最短路径。
堆结合了二叉树的结构特点和数组的简单性,提供了一种高效的方式来实现动态排序和优先级队列管理。
相关文章:
数据结构之:堆
堆(Heap)是计算机科学中的一种特别的完全二叉树结构,它满足某种特定顺序,用于实现优先队列等数据结构。堆主要有两种类型:最大堆(Max Heap)和最小堆(Min Heap)。 定义 …...
助力探索社交出海最短变现路径,融云 1V1 音视频「限时免费」
在社交赛道,1V1 业务是最好的切入点。 对于初创公司来说,1V1 业务的技术成本和运营成本相对可控,并且具备与秀场直播等业务融合拓展的巨大空间。未来,相信 1V1 业务会吸引更多开发者投身其中。 一位社交出海经验丰富的从业者曾在…...
汇编工具理解
当百度读取键盘敲入字符等得到的代码,譬如如下 section .datainput_buffer db 1 ; 保存输入字符的变量section .text global _start_start:mov eax, 3 ; 设置文件描述符为0 (stdin)xor ebx, ebx ; 清空ebx寄存器mov edx, 1 ; 要读取的字…...
Leetcoder Day21| 回溯理论基础+组合
语言:Java/Go 回溯理论基础 回溯函数也就是递归函数; 所有回溯法的问题都可以抽象为树形结构; 回溯法解决的都是在集合中递归查找子集,集合的大小就构成了树的宽度,递归的深度,都构成的树的深度。 适用的题…...
备战蓝桥杯Day17 - 链表
链表 基本概念 链表是由一系列节点组成的元素集合。 每个节点包含两部分:数据域 item 、指向下一个节点的指针 next 通过节点之间的相互链接,形成一个链表 1. 链表的初始化 # 手动建立链表 # 链表的初始化 class Node(object):def __init__(self, …...
登录页设计新选择:毛玻璃和新拟态风格,非2.5D和插画风
登录页给潜在用户传递了产品的品牌调性,是非常重要的一类页面,之前2.5D和插画风格的登录页流行一时,不过这阵风好像过去了,新的风格开始涌现了。 一、越来越流行的毛玻璃设计风格 毛玻璃风格是指将背景模糊处理,使得…...
14:00面试,14:05就出来了,问的问题有点变态。。。
下午两点,我准时走进了面试的会议室,心中既有期待也有紧张。然而,仅仅五分钟后,我便走出了会议室,心中充满了困惑和挫败感。面试官的问题确实出乎我的预料,它们既深入又具体,让我有些措手不及。…...
关于纯前端想要变成全栈编写接口的学习推荐
推荐学习uniappuniclouduniadmin 学习成本低,不到一个月就能开发出自己的接口,上传到服务空间,并且能够实现后端的功能,能够调用接口 当然这里使用的不是mysql数据库,而是unicloud推荐的存储方式 操作起来也很方便...
Rust升级慢,使用国内镜像进行加速
背景 rustup 是 Rust 官方的跨平台 Rust 安装工具,国内用户使用rustup update的时候,网速非常慢,可以使用国内的阿里云镜像源来进行加速 0x01 配置方法 1. Linux与Mac OS用户配置环境变量 修改~/.bash_profile文件添加如下内容࿱…...
Base64 编码 lua
Base64 编码 -- Base64 字符表 local base64_chars { A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,…...
41.仿简道云公式函数实战-数学函数-SUMIF
1. SUMIF函数 SUMIF 函数可用于计算子表单中满足某一条件的数字相加并返回和。 2. 函数用法 SUMIF(range, criteria, [sum_range]) 其中各参数的含义及使用方法如下: range:必需;根据 criteria 的条件规则进行检测的判断字段。支持的字段…...
挑战30天学完Python:Day22 爬虫
🎉 本系列为Python基础学习,原稿来源于 30-Days-Of-Python 英文项目,大奇主要是对其本地化翻译、逐条验证和补充,想通过30天完成正儿八经的系统化实践。此系列适合零基础同学,或仅了解Python一点知识,但又没…...
AI:138-开发一种能够自动化生成艺术品描述的人工智能系统
🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带关键代码,详细讲解供大家学习,希望…...
智慧城市建设的新里程碑:公共服务电子支付大屏
随着科技的飞速发展,我们的生活正在经历前所未有的变革。电子支付的出现,无疑是这场变革中的一大亮点,它不仅改变了我们日常的支付方式,更成为智慧城市建设的重要一环,为公众提供了更加便捷、高效的服务体验。 在以前&…...
Netty之Decoder详解与实战
在这篇博客文章中,我们将深入探讨Netty框架中的一个核心组件——Decoder,并通过示例解释其工作原理及如何在Netty应用程序中使用它来处理网络通信中的数据解码。 1. 什么是Decoder? 在Netty中,Decoder是一种特殊类型的ChannelHa…...
PCIe P2P DMA全景解读
温馨提醒:本文主要分为5个部分,总计4842字,需要时间较长,建议先收藏! P2P DMA简介 P2P DMA软硬件支持 CXL P2P DMA原理差异 P2P DMA应用场景 P2P DMA技术挑战 一、P2P DMA简介 P2P DMA(Peer-to-Peer…...
【Git】window下大小写不敏感问题处理
在Windows环境下,Git因为文件名的大小写敏感性而导致了一些问题。 首先,Windows文件系统是不区分大小写的,这意味着在Windows中创建的两个文件名只有大小写不同,但字母顺序和字符完全相同的文件会被视为相同的文件。然而…...
【JS】【Vue3】【React】获取滚轮位置的方法:JavaScript、Vue 3和React示例
目录 使用JavaScript原生方法在Vue 3中获取滚轮位置在React中获取滚轮位置 随着Web应用程序的发展,滚轮位置的获取变得越来越重要,可以用于实现页面的滚动效果、导航条的隐藏和显示等功能。本文将探讨在JavaScript、Vue 3和React中获取滚轮位置的不同方法…...
什么是线程和进程?
什么是线程和进程? 文章目录 什么是线程和进程?何为进程?何为线程? Java 线程和操作系统的线程有啥区别?请简要描述线程与进程的关系,区别及优缺点?图解进程和线程的关系程序计数器为什么是私有的?虚拟机栈和本地方法栈为什么是私有的?一句话简单了…...
MaxScale实现mysql8读写分离
MaxScale 实验环境 中间件192.168.150.24MaxScale 22.08.4主服务器192.168.150.21mysql 8.0.30从服务器192.168.150.22mysql 8.0.30从服务器192.168.150.23mysql 8.0.30 读写分离基于主从同步 1.先实现数据库主从同步 基于gtid的主从同步配置 主库配置 # tail -3 /etc/my.…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
