优先级队列详解

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linxu navicat15 激活码[最新免费获取]

    (linxu navicat15 激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月27日
    47
  • ubuntu 18.04安装edge浏览器

    ubuntu 18.04安装edge浏览器1.先下载适用于Ubuntu的deb格式安装包2.使用sudodpkg-imicrosoft-edge-dev_****_amd64.deb,安装edge3.安装后会发现打不开,运行以下代码sudoaptinstallmicrosoft-edge-dev4.运行sudoaptinstallmicrosoft-edge-dev后,会出现错误:Unmetdependencies.Try’apt–fix-brokeninstall’withn…

    2022年7月21日
    16
  • 【C语言】让你不再害怕指针——C指针详解(经典,非常详细)

    因排版过于粗糙学习详情转至:https://blog.csdn.net/qq_41035588/article/details/97010039前言:复杂类型说明要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总…

    2022年4月6日
    31
  • js三目运算符使用及嵌套

    js三目运算符使用及嵌套三目运算符基础格式:条件?a:b;下面根据一个实例来解释用法 vara=10;varb=5;varc=a>b?a:b;//定义一个c,如果a>b,那么取冒号前面的值(这里为a),如果a<=b,那么取冒号后面的值(这里为b)console.log(c);作用:三目运算符可…

    2022年6月17日
    57
  • 3D游戏建模真的很累吗?前景怎么样?需要什么基础?[通俗易懂]

    3D游戏建模真的很累吗?前景怎么样?需要什么基础?[通俗易懂]所有行业都是一样的,没有什么容易的,只不过这一行是偏向于技术的,一个有好的建模师月薪10k+是很常见的,这个需要有自己刻苦学习的成果。游戏建模前景在游戏模型行业,你基本不用担心找不到工作,因为游戏模型师人才缺口非常大。举个例子:游戏制作公司的人员配比大多数是这样的:比如100人的三维制作组,可能有60人在做模型贴图,10个人在K动画。只要你保证技能在手,一定是抢手的人才。在几年前游戏建模这个行业不仅仅缺人才,甚至连新手都非常稀缺,那个时候公司愿意招聘实习生,培养他们然后给公司干活,但是工资一定不

    2022年5月12日
    45

发表回复

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

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