python之堆的实现

news2024/11/26 1:28:02

堆本质是一个完全二叉树,分为大根堆和小根堆,大根堆每个结点的值都大于它的孩子的值,小根堆相反,每个结点的值都小于它的孩子的值

heapq是python的标准库,用于维护堆,非常方便

heapq库常用的几个函数

heapify(list),把列表list转换为小根堆

heappush(heap, item),将item的值加入到heap中,保持堆性质不变

heappop(heap),弹出并返回heap的堆顶(即最小值),保持堆的不变

​heapq.nlargest(n,heap),返回一个列表,为heap的前n个最大值

heapq.nsmallest(n,heap),返回一个列表,为heap的前n个最小值

示例用法如下

import heapq

heap = [14, 6, 2, 8, 12, 11, 23]

heapq.heapify(heap)
print(heap)
heapq.heappush(heap, 5)
print(heap)
print(heapq.heappop(heap))

import heapq

heap = [14, 6, 2, 8, 12, 11, 23]

print(heapq.nlargest(3, heap))
print(heapq.nsmallest(3, heap))

heapq只能构造小根堆,但是可以通过给数加符号的方法构造大根堆

import heapq

a = [14, 6, 2, 8, 12, 11, 23, 18]
heap = []
for i in range(len(a)):
    heapq.heappush(heap, -a[i])  # 将所有值的负数构造一个小根堆

print(-heapq.heappop(heap))  # 最后输出的时候加负号即可

结果

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

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

相关文章

(3)(3.1) 英特尔Realsense深度摄像头(三)

文章目录 前言 10 系统概述 11 手动设置配套计算机 前言 本文介绍如何将英特尔 Realsense 深度摄像头(Intel Realsense Depth Camera)与 ArduPilot 配合使用,以实现避障(obstacle avoidance)。该方法使用在配套计算机上运行的 Python 脚本(非 ROS&am…

每天学点儿Python(5) -- 序列索引和切片

Python中,序列是指一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通过每个值所在位置的编号(称为索引)访问它们。它类似于C/C中的数组或字符串,但又比数组或字符串强大很多 序列类型包括字符串、…

(洛谷P34060):海底高铁—->差分数组,贪心思想

海底高铁 题目描述 该铁路经过 N N N 个城市,每个城市都有一个站。不过,由于各个城市之间不能协调好,于是乘车每经过两个相邻的城市之间(方向不限),必须单独购买这一小段的车票。第 i i i 段铁路连接了…

分类预测 | Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量机数据分类预测

分类预测 | Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量机数据分类预测 目录 分类预测 | Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量机数据分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量…

掌握 C# 爬虫技术:使用 HttpClient 获取今日头条内容

摘要/导言: 在本文中,我们将探讨如何使用 C# 中的 HttpClient 类和爬虫代理IP技术来获取今日头条的内容。我们还将实现多线程技术,以提高数据采集的效率。 背景/引言: 随着信息时代的到来,数据已经成为了一种非常宝…

Leetcode110_平衡二叉树

1.leetcode原题链接:. - 力扣(LeetCode) 2.题目描述 给定一个二叉树,判断它是否是 平衡二叉树 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:true示例 2: 输入:…

机器学习machine learning

1. 概念 机器学习是从数据中提取知识。涉及统计学和人工智能,也被称为预测分析或统计学习。 应用领域非常广泛,用户习惯预测,个性推荐,分析DNA序列等等。 机器学习优势是将决策过程自动化,需要涉及较好的算法。如果…

如何打造高度柔性动态的智能仓储物流解决方案?

近年来,仓储物流行业步入自动化系统集成时代,以货架为存储主体的方式逐步发展成为了自动化储方式,核心设备也由货架转变为机器人货架,形成系统集成物流存储体系。河北沃克根据客户需求精准发力,推出了新一代海格里斯智…

九招!教做出立体感十足的地图组件,不服?还有谁

一、立体感地图在可视化大屏中的作用 在可视化大屏中,立体感十足的地图组件可以起到以下作用: 引导用户注意力:立体感的地图组件可以吸引用户的注意力,使其更加关注地图所代表的信息和数据。通过增加立体感,地图组件可…

Spring Security——08,自定义失败处理

自定义失败处理 一、自定义实现类1.1 实现AccessDeniedHandler1.2 实现AuthenticationEntryPoint 二、配置SpringSecurity三、测试3.1 认证失败3.2 权限不足 一键三连有没有捏~~ 我们还希望在认证失败或者是授权失败的情况下也能和我们的接口一样返回相同结构的json&#xff0c…

SpringBoot3整合RabbitMQ之二_简单队列模型案例

SpringBoot3整合RabbitMQ之二_简单队列模型案例 文章目录 SpringBoot3整合RabbitMQ之二_简单队列模型案例1. 简单队列模型1. 消息发布者1. 创建简单队列的配置类2. 发布消费Controller 2. 消息消费者3. 输出结果 1. 简单队列模型 简单队列模型就是点对点发布消息,有…

基于spring boot的社区医院管理服务系统

基于spring boot的社区医院管理服务系统设计与实现 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开…

【MySQL】数据库开篇

SueWakeup 个人主页:SueWakeup 系列专栏:学习技术栈 个性签名:保留赤子之心也许是种幸运吧 本文封面由 凯楠📸友情提供 目录 本系列传送门 1. 什么是数据库? 2. 为什么使用数据库 3. 数据库的分类 4. NoSQL 与关系…

Python实现对一个IP地址和端口号列表进行nmap扫描

一.功能目的 使用python实现对一个IP地址和端口号列表进行nmap扫描 二.功能调研 根据查找得知我们需要用到python的subprocess库 1.代码示例 以下是搜到的简单的subprocess库代码 import subprocess result subprocess.run([ls, -l], capture_outputTrue, textTrue) …

使用Code开发Django_模版和CSS

转到定义 和 查看定义 在使用Django或任何其他库的过程中,我们可能需要检查这些库中的代码。VS Code提供了两个方便的命令,可以直接导航到任何代码中的类和其他对象的定义: 转到定义 在Python开发环境中,我们可以轻松地对函数、类或者其他导入模块中的成员使用“Go to Def…

嵌入式学习50-单片机3

知识散记: 1. xdata 开到扩展内存 2.memcpy 内存拷贝 1、什么是并行通信、串行通信? 并行通信: …

DS18B20与单片机的通信、DS18B20采集温度、MODBUS协议、练习框架

我要成为嵌入式高手之4月9日51单片机第四天!! ———————————————————————————— DS18B20温度传感器 单总线数字温度计 异步的半双工的串行通信 测量范围从-55℃ ~ 125℃,增量值为0.5℃ 要用DS18B20采集温度&am…

远程控制软件免费

远程控制软件免费:选择、价值与安全性探讨 随着科技的进步和互联网的普及,远程控制软件在日常生活和工作中的应用越来越广泛。这类软件允许用户通过网络远程访问和控制另一台计算机,为远程办公、技术支持和在线教育等提供了极大的便利。本文…

Java中双重检查锁(double checked locking)

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 双重检查锁&#x…

电脑硬件 - 内存

内存,是一台电脑的CPU与硬盘间数据交互的中转站。不稳定的内存时常会导致蓝屏,黑屏,死机,甚至电脑无法亮机。 在电脑工作中,CPU和硬盘间无时无刻地进行着大量的数据交互。为了保证软件流畅正常运行,会在中…