--- 数据结构 优先级队列 --- java

news2024/11/21 11:05:33

之前提高到队列是一种先进先出的结构,但是在某些情况下操作的数据具有优先级,那么对他先进行操作,这时队列就不能满足需求了,因为队列只能操作对头的元素,而具有优先级的数据不一定是在对头,这样就需要优先级队列(PriorityQueue)了,优先级队列能返回优先级高的数据,添加新的对象

PriorityQueue的底层使用了堆这个数据结构

堆的概念

对于一个数据的集合1 2 3 4 5 6 7 8,以完全二叉树的顺序储存方式储存在一起,若根节点的值始终大于孩子节点堆叫做大根堆,根节点小于孩子节点的叫做小根堆

以完全二叉树的储存方式储存的数据,但是实际上储存在数组中,在后面标上的下标可以得出

根节点 i 对应的子节点的下标 左节点 i * 2 +1 右节点 i * 2 + 2  i为根节点的下标

堆的实现

字段设计

userSize记录有效数据的个数,数组array储存数据

createHeap 创建堆 大根堆

向下调整 因为初始时的数组并不是一个堆,那么就需要从最后开始堆他开始调整,根据对应i 的左节点为 i*2 +1右节点是i*2+2,如果根节点小于子节点,那么就和他进行交换,若 i 的父节点J

若J右小于 i 交换后的值,那么还需要进行交换,小于就退出,大于一直交换,直到根节点结束

节点 i 对应父节点  (i-1)/2          左节点 (i*2+1)         右节点 (i*2+2)

每次进行向下调整,交换的是左右节点最大的和根节点交换然后让节点 i 走到交换和他交换的子节点继续进行向下调整

将初始数组变为堆

向下调整

push 插入元素 向上调整

每次插入的位置是在useSize指向的下表位置,然后从这个下标开始进行向上调整 创建的是大根堆

push

向上调整

poll 删除的是堆顶的元素

将堆顶元素和堆尾元素交换,然后useSize--,最后再最堆顶元素进行向下调整

peek 获得堆顶元素

直接返回0下标的数据就好

对于数据优先级,这时放再堆顶的元素优先级就是最高的,每次出出去的就是优先级最高的

再java中内置的优先级队列时PriorityQueue 

add 和offer俩方法都是一样的,add会调用offer这个方法

对的使用

可以使用对来解决 top-k的问题,找到k个最大的或者k个最小的数据

只需要先创建k个大小的优先级队列,找最大的就是建小堆,小的建大堆,这时堆顶就是这个堆中最小的数据,然后将要插入的元素和堆顶元素比较,若大于堆顶就删除堆顶元素,并插入元素

END

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

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

相关文章

RHCE--复习(二)之时间同步服务器

一、计时方式的发展 1.1.古代计时方式 在远古时期,人类用来确定时间的方式是一些自然界“相对”宜古不变的周期。如地球的公转是为一年,月球的公转是为一月,地球的自转是为一天等,最早的计时可以追溯到公元前大约2000年&#xff…

ESP8266+eclipse+AP+最简单webserver

实现AP模式下,http-server功能 在ESP8266_RTOS_SDK\ESP8266_RTOS_SDK\examples\wifi\getting_started\softAP增加webserver部分代码 1. 代码 //softap_example_main.c /* WiFi softAP ExampleThis example code is in the Public Domain (or CC0 licensed, at y…

LLaMA-Factory QuickStart

转自:知乎 1. 项目背景 开源大模型如LLaMA,Qwen,Baichuan等主要都是使用通用数据进行训练而来,其对于不同下游的使用场景和垂直领域的效果有待进一步提升,衍生出了微调训练相关的需求,包含预训练&#xf…

R1234yf汽车空调制冷剂简介

R1234yf汽车空调制冷剂是一种具有优异性能的环保型制冷剂,它被设计用于替代传统的R134a制冷剂。以下是关于R1234yf汽车空调制冷剂的详细介绍: 一、基本属性 化学名称:2,3,3,3-四氟丙烯 简称:R1234yf或HFO-1234yf 性质:无色HFO制冷剂气体 二、环保特性

2024网络安全人才实战能力白皮书安全测试评估篇

9月10日,国内首个聚焦“安全测试评估”的白皮书——《网络安全人才实战能力白皮书-安全测试评估篇》(以下简称“白皮书”)在国家网络安全宣传周正式发布。 作为《网络安全人才实战能力白皮书》的第三篇章,本次白皮书聚焦“安全测…

【原创】java+swing+mysql项目管理系统设计与实现

个人主页:程序员杨工 个人简介:从事软件开发多年,前后端均有涉猎,具有丰富的开发经验 博客内容:全栈开发,分享Java、Python、Php、小程序、前后端、数据库经验和实战 文末有本人名片,希望和大家…

小程序开发设计-第一个小程序:安装开发者工具③

第一个小程序:安装开发者工具 1.了解微信开发者工具: 微信开发者工具是官方推荐使用的小程序开发工具,它提供的主要功能如下: ①.快速创建小程序项目 ②.代码的查看和编辑 ③.对小程序功能进行测试 ④.小程序的预览和发布 2.下载…

swiftUI结构体数组修改属性UI没更新

SwiftUI使用了值语义,即当数组的值发生更改时,SwiftUI无法检测到具体的更改操作。 要解决这个问题,可以使用SwiftUI中的State属性包装器来创建一个可观察的状态变量。当数组发生更改时,通过更改状态变量的值来触发列表的更新,但是…

ASCII、Unicode、UCS-2、UTF-8互转编码原理

基础 ASCII (American Standard Code for Information Interchange),1967年 GB2312 是中华人民共和国国家汉字信息交换用编码,国家标准总局发布,1981年5月1日实施,对应的国标标准号:GB/T 2312-1980 Unicode 1990年开始研发,1994年发布初版…

【聊聊AI编程必不可少的NLTK及其punkt、punkt_tab安装】

聊聊AI编程必不可少的NLTK及其punkt、punkt_tab安装 前言一、NLTK是什么?二、安装NLTK1.通过cmd安装:2.通过conda安装: 三.下载NLTK Data数据包1.官网下载2.Github下载3.Gitee下载3.1 下载并安装nltk_data3.2 下载并安装punkt_tab 4. nltk_da…

开展文化创新与传承 全球老子圣像评选启动

9月11日,在刚见证了中华社会文化发展基金会老子文化公益基金成立发布会盛典的中华文化园,又迎来了中华社会文化发展基金会领导的亲临指导。本次指导由中华社会文化发展基金会执行副秘书长蒋晔带队,魏欣主任和高凯主任同行,共同考察…

RNN发展(RNN/LSTM/GRU/GNMT/transformer/RWKV)

RNN到GRU参考: https://blog.csdn.net/weixin_36378508/article/details/115101779 tRANSFORMERS参考: seq2seq到attention到transformer理解 GNMT 2016年9月 谷歌,基于神经网络的翻译系统(GNMT),并宣称GNMT在多个主…

3D培训大师,化工企业安全教育与应急演练的新助力

化工企业的生产安全培训,作为保障员工生命安全与企业稳定运营的基石,其重要性不言而喻。传统的培训方式内容僵化、形式单一缺乏互动、效果难以评估,越来越不适应化工企业的实际需求。因此,探索和应用更为高效、创新的培训工具&…

【Qt】实现顶部导航栏自适应滑动效果

需求: 顶部导航栏有若干选项,可能很多,顶部区域不能完全展示,比如10个选项,界面一次只能展示五个,那么要求把后面的选项隐藏起来,并且,当点击第四个第五个按钮的时候,自…

软件工程进度管理

答案:A D 解析: 由选项可以看出,有B,E,C,K,这里选择经过它们路径最长的就是正确答案 选项B 路线 ABIJL362819 路线 ABDIJL3522820 选项E 路线 AEGJL432817 路线 AEGHKL4334317 选项C 路线 ACFHKL5314316 选项D 路线 A…

【GBase 8c V5_3.0.0 分布式数据库常用维护命令】

一、查看数据库状态/检查(gbase用户) 1.gha_ctl monitor 使用gha_ctl monitor查看节点运行情况(跟dcs的地址和端口) gha_ctl monitor -c gbase -l http://172.20.10.8:2379 -Hall |coordinator | datanode | gtm | server|dcs:必选字段。指定查看哪类集…

Prometheus优化指南:如何提升系统性能

Prometheus 是一个强大的开源监控系统,它被广泛应用于云原生环境中,特别是在 Kubernetes 和其他容器化基础设施中。然而,随着监控数据量的增长,系统本身的性能可能会成为瓶颈。如果不进行优化,最终将影响到整体系统的可…

浏览器查消息

window.addEventListener(message,function(event){console.log(Received message,event.data)}); 并把弹窗口对准要接收消息的ifrme 发消息的窗口

大模型入门3:理解LLAMA

Model a stack of DecoderBlocks(SelfAttention, FeedForward, and RMSNorm) decoder block 整体结构:最大的区别在pre-norm x -> norm(x) -> attention() -> residual connect -> norm() -> ffn -> residual connect class DecoderBlock(nn.…

从零到一:构建你的第一个AI项目(实战教程)

引言 欢迎来到AI世界的初学者指南!在这个实战教程中,我们将一步步构建一个基础的AI项目,让你从零开始,亲手体验人工智能的魅力。我们的目标是让即使没有任何编程或AI背景的你,也能通过本教程完成一个小型的AI应用。今天…