当前位置: 首页 > news >正文

数据结构—优先级队列(堆)

一.优先级队列的存储

优先级队列存储在一堆数组中,分为大堆和小堆,把二叉树按层序遍历得出的结果存储到优先级队列

二.堆的分类

堆是一颗完全二叉树,堆分为大根堆和小根堆,大根堆根结点比左右孩子结点都大,小根堆相反

三.性质

设i是数组下标

1.i = 0,是根结点

2.结点的双亲结点是(i - 1 )/ 2

3.(2 * i + 1)是左孩子结点,(2 * i + 2)是右孩子结点

四.代码实现

1.创建

此时默认建立的是小根堆,那么我们如何建立大根堆呢

我们需要重写比较器

但是这种方法不方便更改,那么我们可以用下面的方法

我们可以构建一个比较器生成大根堆

它的好处是如果需要生成小根堆,我们可以重新构建一个比较器将里面的参数换成这个比较器就可以了

2.功能

五.关于PriorityQueue使用时的注意事项:

1.PriorityQueue中放置的元素必须要能够⽐较⼤⼩,不能插⼊⽆法⽐较⼤⼩的对象,否则会抛出 ClassCastException异常

2. 不能插⼊null对象,否则会抛出NullPointerException

3. 没有容量限制,可以插⼊任意多个元素,其内部可以⾃动扩容

4. 插⼊和删除元素的时间复杂度为

5. PriorityQueue底层使⽤了堆数据结构

6. PriorityQueue默认情况下是⼩堆---即每次获取到的元素都是最⼩的元素

7.当调用grow(扩容)时,如果>64,1.5倍扩容,<64,2倍扩容

http://www.jsqmd.com/news/116481/

相关文章:

  • Linly-Talker能否识别情感文本并调整语调?情感TTS验证
  • cesium126,230816,Ce for Ue 加载服务器上的地图(GeoServerWMS) - 下:
  • Linly-Talker如何保证用户上传肖像的安全性?
  • 大模型学习路线(二):预训练 (Pre-training)
  • 12.20 - 反转链表II
  • Linly-Talker能否接入Dialogflow实现多轮对话逻辑?
  • 大模型学习路线(三)后训练Post-training
  • Linly-Talker在汽车配置讲解中的三维空间联动设想
  • 大模型学习路线(一):Transformer架构篇
  • Linly-Talker在高校招生宣传中的个性化推送实验
  • 在上海,一份CAIE认证如何为我打开AI世界的窗:思维与能力的双重旅程
  • 连接管理艺术-底层架构的性能奥秘
  • 【第二阶段—机器学习入门】第十五章:机器学习核心概念
  • Linly-Talker如何处理专业术语发音准确性问题?
  • Linly-Talker项目维护频率与长期发展预期
  • 由南京导航失灵看人机环境系统智能
  • DAY 42 训练和测试的规范写法
  • Linly-Talker项目贡献者招募:你可以参与哪些模块?
  • Linly-Talker能否输出WebP动画或GIF片段?轻量格式支持
  • 构建软件兼容性测试全覆盖体系的最佳实践
  • Linly-Talker如何平衡生成速度与画质清晰度?
  • 基于springboot+vue3的企业人事管理系统设计与实现
  • 思考与练习(第十章 文件与数据格式化)
  • 基于Linly-Talker开发虚拟偶像,成本降低超70%
  • Linly-Talker在品牌IP形象推广中的创意玩法
  • 【理解“Collection存储Union区域后能分两次Resize写入单元格”的核心原因】
  • Linly-Talker生成视频帧率稳定性测试结果公布
  • Linly-Talker在远程办公会议中的虚拟参会应用
  • 前后端分离城市垃圾分类管理系统系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程
  • 宠物商城网站信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】