优先级队列详解

优先级队列详解动力节点小编来为大家进行优先级队列详解,优先级队列是一种特殊类型的队列,其中每个元素都与一个优先级值相关联。并且,元素根据其优先级提供服务。即,首先服务更高优先级的元素。但是,如果出现具有相同优先级的元素,则按照它们在队列中的顺序提供服务。分配优先级值通常,在分配优先级时考虑元素本身的值。例如,具有最高值的元素被认为是最高优先级的元素。但是,在其他情况下,我们可以假设具有最低值的元素作为最高优先级元素。我们还可以根据需要设置优先级。优先队列和普通队列的区别在队列中,执行先进先

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

动力节点小编来为大家进行优先级队列详解,优先级队列是一种特殊类型的队列,其中每个元素都与一个优先级值相关联。并且,元素根据其优先级提供服务。即,首先服务更高优先级的元素。

但是,如果出现具有相同优先级的元素,则按照它们在队列中的顺序提供服务。

分配优先级值

通常,在分配优先级时考虑元素本身的值。例如,

具有最高值的元素被认为是最高优先级的元素。但是,在其他情况下,我们可以假设具有最低值的元素作为最高优先级元素。

我们还可以根据需要设置优先级。

优先级队列详解

优先队列和普通队列的区别

在队列中,执行先进先出规则,而在优先级队列中,根据优先级删除值。首先删除具有最高优先级的元素。

优先队列的实现

优先队列可以使用数组、链表、堆数据结构或二叉搜索树来实现。在这些数据结构中,堆数据结构提供了优先队列的有效实现。

因此,我们将在本教程中使用堆数据结构来实现优先级队列。在以下操作中实现了最大堆。

优先队列操作

优先级队列的基本操作是插入、移除和查看元素。

在研究优先队列之前,请参考堆数据结构以更好地理解二叉堆,因为它用于实现本文中的优先队列。

1. 将元素插入优先队列

通过以下步骤将元素插入优先级队列(最大堆)。

在树的末尾插入新元素。

优先级队列详解

堆肥树。

优先级队列详解

将元素插入优先级队列的算法(最大堆)

如果没有节点,则创建一个新节点。否则(一个节点已经存在)在末尾插入新节点(从左到右的最后一个节点。)

堆化数组对于最小堆,上述算法被修改parentNode为始终小于newNode。

2. 从优先队列中删除一个元素

从优先级队列(最大堆)中删除元素的操作如下:

选择要删除的元素。

优先级队列详解

与最后一个元素交换它。

优先级队列详解

删除最后一个元素。

优先级队列详解

堆肥树。

优先级队列详解

删除优先队列中元素的算法(最大堆)

如果nodeToBeDeleted是leafNode,则移除节点,否则交换nodeToBeDeleted与lastLeafNode,移除noteToBeDeleted

堆化数组对于最小堆,修改了上述算法,使两者childNodes都小于currentNode。

3.从优先队列偷看(查找最大值/最小值)

Peek 操作返回最大堆的最大元素或最小堆的最小元素,而不删除节点。

对于最大堆和最小堆

返回根节点

4.从优先队列中提取Max/Min

Extract-Max 返回从最大堆中删除后具有最大值的节点,而 Extract-Min 返回从最小堆中删除后具有最小值的节点。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/190312.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ntp协议详解_ntp端口号能否被修改

    ntp协议详解_ntp端口号能否被修改NTP客户端的代码实现

    2022年10月11日
    0
  • iOS锁屏时钟_ios时钟怎么调

    iOS锁屏时钟_ios时钟怎么调当设备在一定时间内没有触控动作,iOS会锁住屏幕。但有些应用程序是不需要锁住屏幕的,比如游戏,视频这类应用。可以通过设置UIApplication的idleTimerDisabled属性来指定iOS是否锁频://禁用休闲时钟[[UIApplicationsharedApplication]setIdleTimerDisabled:YES]; //也可以使用这种语法

    2022年9月27日
    0
  • 物联网用什么系统(物联网技术)

    前言  操作系统是物联网时代的战略制高点,今天PC和手机时代的操作系统霸主未必能在物联网时代延续霸业。操作系统产业的规律是,当垄断已经形成,后来者就很难颠覆,只有等待下一次产业浪潮。如今,一个全新的、充满想象空间的操作系统市场机会正在开启。  如此关键的产业环节必然是兵家必争之地。ARM、谷歌、微软、华为、阿里、海尔等国内外著名的IT企业纷纷推出物联网操作系统,整个产业呈现出群雄逐鹿的壮

    2022年4月13日
    215
  • java 软连接_螺栓软连接与硬链接

    java 软连接_螺栓软连接与硬链接1.Linux链接概念Linux链接分两种,一种被称为硬链接(HardLink),另一种被称为符号链接(SymbolicLink)。默认情况下,ln命令产生硬链接。【硬连接】硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(InodeIndex)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连…

    2022年9月30日
    0
  • MySQL—内连接和外连接区别

    MySQL—内连接和外连接区别区别内连接(innerjoin):取出两张表中匹配到的数据,匹配不到的不保留 外连接(outerjoin):取出连接表中匹配到的数据,匹配不到的也会保留,其值为NULL示例表users表mysql>select*fromusers;+—-+——-+|id|name|+—-+——-+|1|john||2…

    2022年8月30日
    2
  • 网站访问量的统计_域名访问量统计

    网站访问量的统计_域名访问量统计关于SEO,短期靠流量,长期靠质量(内容)。网站排名很大一部分是靠访问量,那么如何统计网站访问量呢?更重要的是我们的流量对网站排名是有效的。当然你可以写一个js每刷新一次,向数据库更新一次。如何区

    2022年8月3日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号