堆-heap

article/2025/10/25 13:29:07

priority queue可以借用堆(heap),binary heap是一种complete binary tree(完全二叉树)

完全二叉树:binary tree除最底层叶节点之外,是填满,最底层叶节点由左到右不得有空隙。

 用vector来存储所有节点,vector的第0个元素保留设为(无限大或者无限小),完全二叉树某个节点位于vector的 i 处,其左节点位于vector的2i处,其右边节点位于vector的2i+1处(隐式表述法)。

heap可分为max-heap和min-heap两种,前者每个节点的键值(key)都大于或者等于子节点键值;后者每个节点的键值(key)都小于或者等于子节点键值;max-heap最大值在根节点(vector起始点),min-heap最小值在根节点(vector起始点)。

 一.make_heap()算法

make_heap()把一个可迭代容器,变成一个堆,默认是大顶堆(最大值在最前面,其他元素位置不确定)。

它有三个参数。第一个参数是指向开始元素的迭代器,第二个参数是指向最末尾元素的迭代器,第三个参数是less<>()或是greater<>(),前者用于生成大顶堆,后者用于生成小顶堆,第三个参数默认情况下为less<>(),less<int>()用于生成大顶堆。

要使用less<int>()和greater<int>(),#include<functional>

二.push_heap()算法

满足complete binary tree的条件,新加入元素放在最下一层作为叶子节点,从左至右放置,然后将该新加入的元素上溯将它放置在合适的位置(上溯原则:max-heap每个节点的键值都大于或者等于子节点键值;min-heap每个节点的键值都小于或者等于子节点键值

三.pop_heap()算法

pop_heap()取走根节点,将它放到堆最末尾,割下最下层最右边的叶子节点,并将其放置max-heap根节点位置,然后将根节点元素下溯,将该节点和其较大子节点“对调”,持续下放直到叶子节点为止。(下溯原则:max-heap每个节点的键值都大于或者等于子节点键值;min-heap每个节点的键值都小于或者等于子节点键值

pop_heap之后最大元素只是被放置底部容器最尾端,尚未被取走,取其值back(),如果要移除pop_back()操作函数

四.sort_heap()算法

sort_heap()算法对heap进行递增排序

#include<vector>
#include<iostream>
#include<algorithm>
using namespace std;int main()
{//test heap (底层以vector完成)int ia[9] = { 0,1,2,3,4,8,9,3,5 };vector<int> ivec(ia, ia + 9);make_heap(ivec.begin(), ivec.end());cout << "make_heap ";for (size_t i = 0; i < ivec.size(); i++){cout << ivec[i] << " ";}cout << endl;ivec.push_back(7);push_heap(ivec.begin(), ivec.end());cout << "push_heap ";for (size_t i = 0; i < ivec.size(); i++){cout << ivec[i] << " ";}cout << endl;pop_heap(ivec.begin(), ivec.end());cout << "pop_heap ";cout << ivec.back() << endl;            //return but no removeivec.pop_back();                        //remove last elem and no returnfor (size_t i = 0; i < ivec.size(); i++){cout << ivec[i] << " ";}cout << endl;sort_heap(ivec.begin(), ivec.end());cout << "sort_heap ";for (size_t i = 0; i < ivec.size(); i++){cout << ivec[i] << " ";}cout << endl;system("pause");return 0;
}

 输出:

 


http://chatgpt.dhexx.cn/article/WP5ZIBuA.shtml

相关文章

Kubernetes安装系列之heapster安装

虽然heapster已经即将退休&#xff0c;为了纪念一下&#xff0c;这篇文章整理一下heapstergrafanaInfluxdb组合对于kubernetes的node与资源进行监控的插件安装与设定方法&#xff0c;本文以脚本的方式进行固化&#xff0c;内容仍然放在github的easypack上。 整体操作 https:/…

Heapster -- Kubernetes Dashboard集成Heapster

原始kubernetes dashboard的界面中仅显示了pod一些配置信息&#xff0c;无法图形化展现集群度量指标信息。原始图如下&#xff08;此处从网上找了一个图..&#xff09;&#xff1a; 而如果要展示图形化的集群度量指标信息&#xff0c;就需要安装一个dashboard插件&#xff1a;h…

HeapSort

堆的定义&#xff1a; n个关键字序列K[1....n]称为堆&#xff0c;当且仅当改序列满足&#xff1a; 第一种为&#xff1a;小根堆&#xff1a;每个结点的值都小于或等于左右孩子结点 第二种为&#xff1a;大根堆&#xff1a;每个结点的值都大于或等于左右孩子结点 堆是一种完全二…

heap.h

上一篇写了写链表&#xff0c;这篇写下堆&#xff0c;这个结构接触的不多&#xff0c;所以正好学习一下libhv中的堆&#xff0c;这个堆的实现比较灵活&#xff0c;即可以是大顶堆也可以是小顶堆&#xff0c;通过比较函数是比大还是比小来区别&#xff0c;当然&#xff0c;如果没…

部署 heapster 插件

说明&#xff1a;本部署文章参照了 https://github.com/opsnull/follow-me-install-kubernetes-cluster &#xff0c;欢迎给作者star Heapster是一个收集者&#xff0c;将每个Node上的cAdvisor的数据进行汇总&#xff0c;然后导到第三方工具(如InfluxDB)。 Heapster 是通过调用…

每天5分钟玩转Kubernetes | Heapster

书籍来源&#xff1a;cloudman《每天5分钟玩转Kubernetes》 一边学习一边整理老师的课程内容及试验笔记&#xff0c;并与大家分享&#xff0c;侵权即删&#xff0c;谢谢支持&#xff01; 附上汇总贴&#xff1a;每天5分钟玩转Kubernetes | 汇总_COCOgsta的博客-CSDN博客 Heap…

Kubernetes监控Heapster介绍

什么是Heapster&#xff1f; Heapster是容器集群监控和性能分析工具&#xff0c;天然的支持Kubernetes和CoreOS。 Kubernetes有个出名的监控agent—cAdvisor。在每个kubernetes Node上都会运行cAdvisor&#xff0c;它会收集本机以及容器的监控数据(cpu,memory,filesystem,netw…

nginx部署https域名

目录 一、准备工作 二、部署项目 三、修改nginx的配置文件 一、准备工作 1、首先你要有一台服务器&#xff0c;本篇文章是创建在腾讯云服务器的基础上的&#xff0c;仅供参考 2、在服务器上注册域名&#xff0c;这个域名注册等待审核时间较长&#xff0c;建议提早注册&…

域名解析与nginx配置

dns解析 阿里云服务器dns域名解析配置&#xff0c;记录值就是阿里云服务器的ip nginx配置 远程到阿里云服务器上对nginx进行配置&#xff1a; nginx反向代理配置&#xff1a; 修改配置后&#xff0c;重启nginx服务 进入目录&#xff1a;cd /usr/sbin 强制杀死进程&#xff…

linux nginx部署项目配置域名

一.把项目打包&#xff08;jar&#xff09; 二.把jar包通过xshell上传 三.编辑nginx.conf文件&#xff0c;配置域名&#xff0c;每配置一个域名就复制一份里面的server 1 代表你所要配置的域名 2 代表你项目浏览器访问路径 四.在项目上传的目录下&#xff08;jar包所放的位…

Docker部署nginx、配置域名

文章目录 背景1. 拉取nginx镜像2. 启动nginx3. 通过docker修改nginx配置1) 挂载配置文件2) 重新加载配置文件 4. 配置我的域名小结 背景 docker 容器相关技术已经成为了现在开发和运维人员的热门技术之一&#xff0c;docker就像一个集装箱能够将各种应用放入到集装箱里的盒子里…

nginx配置域名访问/禁止ip访问

一 背景 为什么要禁止ip访问? 为了避免其他人把未备案的域名解析到自己的服务器IP&#xff0c;而导致服务器被断网&#xff0c;我们可以通过禁止使用ip访问的方法&#xff0c;防止此类事情的发生。 二 解决方法 修改配置文件nginx.conf, 其中2.2的方法可以参考 ubuntu18.04…

配置nginx域名转发

这应该是&#xff0c;我在这个网站的最后一篇博客了。 国庆的时候不知道为什么突然买了个服务器&#xff0c;我打算自己建一个博客网站了&#xff0c;然后前两天域名刚备案成功&#xff0c;晚上有空就配置服务器。 服务器先安装jdk&#xff0c;jre基础环境&#xff0c;然后ngi…

Nginx 服务器配置域名证书

1、首先去申请域名证书&#xff0c;或者购买。都可以&#xff0c;腾讯、阿里、华为、均可&#xff0c;最好域名跟证书在一个服务商处。 2、申请好域名后&#xff0c;进行域名解析配置。证书方会让你&#xff0c;添加提供的解析内容。 3、下载证书&#xff0c;证书提供商会提供…

【Nginx】Nginx主机域名配置

一、配置多个端口访问不同文件 相同域名&#xff0c;不同端口&#xff0c;不同文件 #两个不同文件夹&#xff0c;分别存放不同文件 [rootnginx ~]# mkdir /www/work_01 -p [rootnginx ~]# mkdir /www/work_02 [rootnginx ~]# vim /www/work_01/index.html this is work_01! [r…

阿里云ECS部署Nginx配置域名访问

目录 前言环境 具体步骤服务器域名SSL证书Nginx配置 前言 记录下阿里云服务器建站的过程&#xff08;回回建&#xff0c;回回忘&#xff0c;尴尬。。。&#xff09; 环境 ECS&#xff08;Centos7.6&#xff09; Nginx 具体步骤 服务器 首先&#xff0c;需要购买一台服务器 …

Nginx配置域名服务小试牛刀

最近实际操作的一个项目哦&#xff0c;大家看下有没有帮助哦&#xff01;Nginx 配置通过域名访问项目&#xff01; 项目目的&#xff1a;将打包好的项目jar文件部署起来&#xff0c;并能够通过域名访问 准备条件&#xff1a; 1.服务器端安装需要的1.jdk 选择1.8版本 Linux…

nginx 配置域名映射到本地IP

需求背景 项目需求需要在不同的域名下&#xff0c;判断展示不同的内容&#xff0c;为了模拟线上的正式域名&#xff0c;有以下几种方案&#xff1a; 方案一&#xff1a; 配置host: 1、找到host的文件地址&#xff08;不会的百度&#xff09; 2、配置host: 127.0.0.1 www.t…

nginx配置域名,不要端口

版权声明&#xff1a;本文为博主转载文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 本文链接&#xff1a; https://blog.csdn.net/panshoujia/article/details/91411484 前期在腾讯云上购买了域名&#xff0c;并在域名管理中&…

服务器部署nginx配置域名反向代理

下载最新版Nginx镜像 docker pull nginx:latest运行nginx镜像 docker run -p 80:80 --name nginx -d nginx从nginx容器中映射核心文件 1、本地创建文件目录 mkdir -p /opt/docker/nginx/conf.d mkdir -p /opt/docker/nginx/html mkdir -p /opt/docker/nginx/logs mkdir -p …