数据结构与算法(二)优先队列

news/2024/4/29 5:56:04/文章来源:https://blog.csdn.net/yangkang1122/article/details/103812748

数据结构与算法(二) 优先队列


一、优先队列的基本概念
我们的电脑总是运行着多个程序,电脑会给每个程序分配一个优先级,并首先执行下一个优先级更高的程序。在此情况下,可将其抽象为一个数据结构,该数据结构支持 删除最大元素插入元素的操作,这种数据结构叫 优先队列。通过插入一列元素并逐个删除最小元素,可以使用优先队列来对数据进行排序。

public class MaxPQ<Key extends Comparable>
MaxPQ创建一个优先队列
MaxPQ(int max)创建一个最大容量为max的优先队列
MaxPQ(Key[] a)用数组a[]中的元素创建一个优先队列
void insert(Key v)向优先队列中插入一个元素
Key Max()返回最大元素
Key delMax()删除并返回最大元素
boolean isEmpty()返回优先队列是否为空
int size()返回优先队列中元素的个数
 考虑一个问题:输入N个字符串,每个字符串都对应着一个数字,现要求从中找出最大的M个整数,解决该问题的一个方法是将每个新的输入和已知的M个最大的值进行比较,此时,除非M较小,否则开销会非常大。

以下是从N个数中找出最大的M个数的不同算法的成本:
在这里插入图片描述
下面是一个优先队列的示例:

public class TopM{public static void main(String[] args){//打印输入流中最大的M行int M=Integer.parseInt(args[0]);MinPQ<Transaction> pq= new MinPQ<Transaction>(key);while(StdIn.hasNextLine()){//为下一行创建一个元素并放入优先队列中pq.inset(new Transaction(StdIn.readLine()));if(pq.size()>M){pq.delMin();//如果优先队列中存在M+1个元素,则删除最小的元素}}//最大的M个元素都在优先队列中Stack<Transaction> stack=new Stack<Transaction>();while(!pq.isEmpty()){stack.push(pq.delMin());//将优先队列中的元素按从小到大的顺序压入栈中}for(Transaction t : stack){StdOut.printIn(t);}}
}

上述代码从命令行输入一个数字M及一系列字符串,每一行表示一个事务,改代码会打印最大的M行启用到了Transaction类,构造了一个用数字作为键的优先队列,当优先队列的大小超过M时,会删除最小的元素,所有事务输入完毕后,会从中从小到大顺序打印出最大的M个事务。

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙HarmonyOS开发-FA模型访问Stage模型DataShareExtensionAbility

无论FA模型还是Stage模型&#xff0c;数据读写功能都包含客户端和服务端两部分。 FA模型中&#xff0c;客户端是由DataAbilityHelper提供对外接口&#xff0c;服务端是由DataAbility提供数据库的读写服务。 Stage模型中&#xff0c;客户端是由DataShareHelper提供对外接口&…

【JavaEE】_Spring MVC项目获取URL中的参数

目录 1. 单参数 2. 多参数 1. 单参数 .java文件如下&#xff1a; package com.example.demo.controller;import com.example.demo.Person; import org.springframework.web.bind.annotation.*;import java.util.Arrays; import java.util.List;RequestMapping("/Para&…

SpringBoot Redis 之Lettuce 驱动

一、前言 一直以为SpringBoot中 spring-boot-starter-data-redis使用的是Jredis连接池&#xff0c;直到昨天在部署报价系统生产环境时&#xff0c;因为端口配置错误造成无法连接&#xff0c;发现报错信息如下&#xff1a; 一了解才知道在SpringBoot2.X以后默认是使用Lettuce作…

jmeter中参数加密

加密接口常用的方式有&#xff1a; MD5&#xff0c;SHA&#xff0c;HmacSHA RSA AES&#xff0c;DES&#xff0c;Base64 压测中有些参数需要进行加密&#xff0c;加密方式已接口文档为主。 MD5加密 比如MD5加密的接口文档&#xff1a; 请求URL&#xff1a;http://101.34.221…

【机器学习】数据探索(Data Exploration)---数据质量和数据特征分析

一、引言 在机器学习项目中&#xff0c;数据探索是至关重要的一步。它不仅是模型构建的基础&#xff0c;还是确保模型性能稳定、预测准确的关键。数据探索的过程中&#xff0c;数据质量和数据特征分析占据了核心地位。数据质量直接关系到模型能否从数据中提取有效信息&#xff…

linux中查看内存占用空间

文章目录 linux中查看内存占用空间 linux中查看内存占用空间 使用 df -h 查看磁盘空间 使用 du -sh * 查看每个目录的大小 注意这里是当前目录下的文件大小&#xff0c;查看系统的可以回到根目录 经过查看没有发现任何大的文件夹。 继续下面的步骤 如果您的Linux磁盘已满&a…

VScode中cmake调试

一般的cmake命令行测试方法&#xff1a; cmake -S . -B build cmake --build build ./build/cmake_debug 在vscode中使用图形化界面操作的方法 main.cpp #include <iostream>int main() {int num_a, num_b;num_a 10;num_b 20;std::cout << "num_a &qu…

TTS通用播放库技术设计

TTS音频播放库技术设计 目录介绍 01.整体介绍概述 1.1 项目背景介绍1.2 遇到问题1.3 基础概念介绍1.4 设计目标1.5 问题答疑和思考 02.技术调研说明 2.1 语音播放方案2.2 TTS技术分析2.3 语音合成技术2.4 方案选择说明2.5 方案设计思路2.6 文本生成音频 03.系统TTS使用实践 3…

CSS(六)

一、精灵图 1.1 为什么需要精灵图 一个网页中往往会应用很多小的背景图像作为修饰&#xff0c;当网页中的图像过多时&#xff0c;服务器就会频繁地接收和发送请求图片&#xff0c;造成服务器请求压力过大&#xff0c;这将大大降低页面的加载速度。 因此&#xff0c;为了有效…

Vue挂载全局方法

简介&#xff1a;有时候&#xff0c;频繁调用的函数&#xff0c;我们需要把它挂载在全局的vue原型上&#xff0c;方便调用&#xff0c;具体怎么操作&#xff0c;这里来记录一下。 一、这里以本地存储的方法为例 var localStorage window.localStorage; const db {/** * 更新…

面试八股——Redis——分布式锁——Redisson

1.看门狗机制 注意看门狗机制&#xff1a;redisson会监听持有锁的线程&#xff0c;并每隔一段时间(releaseTime/3&#xff0c;默认releaseTime为30s)&#xff0c;如果线程还未释放锁的话&#xff0c;会给锁做一次续期。 2. 主从一致性 实际开发中我们会搭建多台redis服务器&a…

八大技术趋势案例(区块链量子计算)

科技巨变,未来已来,八大技术趋势引领数字化时代。信息技术的迅猛发展,深刻改变了我们的生活、工作和生产方式。人工智能、物联网、云计算、大数据、虚拟现实、增强现实、区块链、量子计算等新兴技术在各行各业得到广泛应用,为各个领域带来了新的活力和变革。 为了更好地了解…

BOT攻击是什么,应当如何防护?

抢票失败、小程序崩溃、平台遭恶意灌水……这些我们日常都可能遇到过的问题的背后很有可能是BOT攻击在兴风作浪。对于企业用户来说&#xff0c;据相关调研显示&#xff0c;近八成企业都曾因BOT攻击而受到经济损失&#xff0c;而面对越来越复杂的BOT攻击&#xff0c;大多数企业表…

数据结构 之 队列习题 力扣oj(附加思路版)

优先级队列 #include<queue> --队列 和 优先级队列的头文件 优先级队列&#xff1a; 堆结构 最大堆 和 最小堆 相关函数&#xff1a; front() 获取第一个元素 back() 获取最后一个元素 push() 放入元素 pop() 弹出第一个元素 size() 计算队列中元素…

鸿蒙HarmonyOS应用开发之USB DDK开发指导

场景介绍 USB DDK&#xff08;USB Driver Develop Kit&#xff09;是为开发者提供的USB驱动程序开发套件&#xff0c;支持开发者基于用户态&#xff0c;在应用层开发USB设备驱动。提供了一系列主机侧访问设备的接口&#xff0c;包括主机侧打开和关闭接口、管道同步异步读写通信…

学习JavaEE的日子 Day32 线程池

Day32 线程池 1.引入 一个线程完成一项任务所需时间为&#xff1a; 创建线程时间 - Time1线程中执行任务的时间 - Time2销毁线程时间 - Time3 2.为什么需要线程池(重要) 线程池技术正是关注如何缩短或调整Time1和Time3的时间&#xff0c;从而提高程序的性能。项目中可以把Time…

没学数模电可以玩单片机吗?

我们首先来看一下数电模电在单片机中的应用。数电知识在单片机中主要解决各种数字信号的处理、运算&#xff0c;如数制转换、数据运算等。模电知识在单片机中主要解决各种模拟信号的处理问题&#xff0c;如采集光照强度、声音的分贝、温度等模拟信号。而数电、模电的相互转换就…

Ubuntu 系统下安装 Redis

目录 一、上传 Redis 安装包并解压缩 二、编译 1、安装gcc&#xff0c;不然后面编译报错 2、开始编译 三、生成后台服务 四、修改配置文件 1、设置密码 2、设置后台启动 五、启动服务 一、上传 Redis 安装包并解压缩 tar -zxvf redis-6.0.2.tar.gz 二、编译 1、安装g…

【分布式】——CAPBASE理论

CAP&BASE理论 ⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记链接&#x1f449;https://github.com/A-BigTree/tree-learning-notes ⭐⭐⭐⭐⭐⭐ Spring专栏&#x1f449;https://blog.csdn.net/weixin_53580595/category_12279588.html Sprin…

C语言用if语句设计选择结构程序

在C语言中&#xff0c;if语句是一种常用的选择结构语句&#xff0c;用于根据条件选择性地执行不同的代码块。if语句的设计使得程序可以根据条件的真假进行分支控制&#xff0c;从而实现灵活的程序逻辑。本文将深入介绍C语言中如何使用if语句设计选择结构程序&#xff0c;包括if…