算法笔记-第九章-堆(未完成-=需要好好搞搞题目)

news/2024/10/9 11:03:44/

算法笔记-第九章-堆

  • 堆的基础知识
    • 堆的相关性质
    • 堆序性
    • 堆的存储
    • 堆的基础操作
      • 下滤操作
      • 上滤操作
    • 建堆
      • 自顶向下建堆法
      • 自下而上建堆法
    • 堆的应用
      • 优先队列
  • 大佬讲解
  • 向下调整够建大顶堆

堆的基础知识

堆的相关性质

大佬视频总结

  • 堆必须是一个完全二叉树
  • 完全二叉树只允许最后一行不为满,且最后一行必须是从左到右排序,之间不可以右间隔
  • 堆的存储=节点下标为i,左子节点下标为2i+1,右子节点下标为2i+2

堆序性

在这里插入图片描述
小根堆
在这里插入图片描述
在这里插入图片描述

堆的存储

  • 类似于层次遍历的形式进行排序
  • 将下标对应到数组当中,这样一个堆就可以用一个数组来代表
  • 在这里插入图片描述

在这里插入图片描述

堆的基础操作

下滤操作

如何将树调整成堆呢?
将破坏堆序性的元素和他的最大的子结点比较,如果小于则进行交换

在这里插入图片描述

在这里插入图片描述

上滤操作

现在就是只有树的最后一个元素破坏了堆序性
方法:将他和他的父元素比较,若大于父节点则进行交换,直到无法上移为止
在这里插入图片描述
在这里插入图片描述

建堆

问题:如果有一个乱序的数组如何进行建堆呢?
有两种方法:自下而上和自上而下

自顶向下建堆法

方法:

  • 插入堆
  • 上滤

将新元素放到堆的最后一位,然后进行上滤操作

自下而上建堆法

  • 先把下面的元素调整成堆
  • 然后再对父节点进行下滤操作
    方法是:每次对于倒数第二排父节点进行下滤操作,直到根节点操作完毕

堆的应用

优先队列

两种操作 :一个是插入队列,一个是弹出最小元素
在这里插入图片描述

一般使用小根堆来实现,弹出之后需要调整操作‘
方法:
将最后一个元素放到根节点,然后进行下滤操作

插入操作:上滤操作就是插入操作

在这里插入图片描述

大佬讲解

向下调整够建大顶堆

在这里插入图片描述
在这里插入图片描述

#include <cstdio>
#include <algorithm>
using namespace std;const int MAXN = 1000 + 1;
int heap[MAXN];void downAdjust(int low, int high) {int i = low, j = i * 2;while (j <= high) {if (j + 1 <= high && heap[j + 1] > heap[j]) {j = j + 1;}if (heap[j] > heap[i]) {swap(heap[j], heap[i]);i = j;j = i * 2;}else {break;}}
}void createHeap(int n) {for (int i = n / 2; i >= 1; i--) {downAdjust(i, n);}
}
int main() {int n;scanf("%d", &n);for (int i = 1; i <= n; i++) {scanf("%d", &heap[i]);}createHeap(n);for (int i = 1; i <= n; i++) {printf("%d", heap[i]);if (i < n) {printf(" ");}}return 0;
}

http://www.ppmy.cn/news/1230144.html

相关文章

【Linux】22、CPU 评价指标、性能工具、定位瓶颈、优化方法论:应用程序和系统

文章目录 一、评价 CPU 的指标1.1 CPU 使用率1.2 平均负载&#xff08;Load Average&#xff09;1.3 上下文切换1.4 CPU 缓存命中率 二、性能工具2.1 维度&#xff1a;从 CPU 性能指标出发&#xff0c;即当你查看某性能指标时&#xff0c;要清除知道哪些工具可以做到2.2 维度&a…

Ribbon

在Spring Cloud中&#xff0c;Ribbon是一个用于客户端负载均衡的组件&#xff0c;它可以与其他服务发现组件&#xff08;例如Eureka&#xff09;集成&#xff0c;以提供更强大的负载均衡功能。Ribbon使得微服务架构中的客户端能够更加智能地调用其他服务的实例&#xff0c;从而…

人力资源小程序

人力资源管理对于企业的运营至关重要&#xff0c;而如今随着科技的发展&#xff0c;制作一个人力资源小程序已经变得非常简单和便捷。在本文中&#xff0c;我们将为您介绍如何通过乔拓云网制作一个人力资源小程序&#xff0c;只需五个简单的步骤。 第一步&#xff1a;注册登录乔…

异步爬取+多线程+redis构建一个运转丝滑且免费http-ip代理池 (二)

继上一章: CSDN 本次需要做的是进行有效ip的验证! 我们知道,从网页上爬取上千上万个ip之后,因为是免费的代理,所以,对这上千上万个ip进行验证有效性就需要考虑效率上的问题了; 而验证ip有效性的唯一办法,就是通过对网络发起请求;如果state200,就是有效,否则就是无效; 而上…

视频转码方法:多种格式视频批量转FLV视频的技巧

随着互联网的发展&#xff0c;视频已成为日常生活中不可或缺的一部分。然而&#xff0c;不同的视频格式可能适用于不同的设备和平台&#xff0c;因此需要进行转码。在转码之前&#xff0c;要了解各种视频格式的特点和适用场景。常见的视频格式包括MP4、AVI、MKV、FLV等。其中&a…

BP神经网络原理与如何实现BP神经网络

本文部分图文来自《老饼讲解-BP神经网络》bp.bbbdata.com 目录 一、BP神经网络的背景生物学原理 二、BP神经网络模型 2.1 BP神经网络的结构 2.2 BP神经网络的激活函数 三、BP神经网络的误差函数 四、BP神经网络的训练 4.1 BP神经网络的训练流程 4.2 BP神经网络的训练流…

Android Studio常见问题

Run一直是上次的apk 内存占用太大&#xff0c;导致闪退

《 机器人基础 》期末试卷(A)

一、填空题&#xff08;30分&#xff0c;每空2分&#xff09; 1. 按照相机的工作方式&#xff0c;机器人常用相机分为1&#xff09;__ 单目摄像头 2&#xff09;__ 双目摄像头 _ 3&#xff09;_深度摄像头_ 三类。 2. 度量地图强调…