数据结构中的优先级队列:你需要知道的一切

已发表: 2021-04-07

目录

介绍

数据结构中的优先级队列是 ADT(抽象数据类型)的一种重要形式。 每个元素都被分配了一个优先级,作为定义和排列它们的特征。

ADTS 是数据科学领域的一部分,其中数据结构用作存储信息和管理操作(如访问、添加、搜索和修改数据值)的排列模式。 用于这种数据排列的方法直接影响它们的组织方式。 数据结构还决定了数据流的方向以及系统元素内共享的关系。

专家估计,到 2025 年,全球数据总量可能超过 175 泽字节。 为了管理如此大量的数据,数据结构被用来有效地处理大型数据库和索引目的。 在编程阶段使用各种数据结构,如堆栈、队列、数组、堆等。 堆栈和队列是数据结构的线性形式,因为数据是按顺序存储的,一个接一个。 它们没有分支,每个元素/数据值都必须排列成一条直线。

堆栈和队列的排列

堆栈遵循 LIFO(后进先出)方法进行存储安排,而队列遵循 FIFO(先进先出)安排。 这是区分这两种线性数据结构的重要因素。 他们的应用程序是根据他们的 LIFO/FIFO 方法决定的,因为他们依赖于他们独特的计算使用。

要了解有关数据科学和数据结构示例的更多信息,请注册由 upGrad.com 主办的大数据 PG 文凭

对于队列,FIFO 确定当向系统添加多个项目时,第一个添加的项目将是第一个被访问/删除的项目。

可以在队列上执行的 5 个基本操作

1.入队:当我们想将一个元素添加到队列中时执行此操作。

2. Dequeue:该操作符用于从队列中移除一个元素。

3. IsEmpty:该操作用于检查队列是否为空,不能再出队。

4. IsFull:该操作符检查队列是否已满并且不能处理任何进一步的入队添加。

5. Peek: Peek 运算符只是从队列中调用/显示预期的数据值/元素,而不会将其从其分配的序列中删除。

通过 upGrad.com的这个信息丰富的博客了解为什么数据科学很重要并为业务增加价值

数据结构中的优先级队列

优先级队列具有与其每个元素相关联的附加优先级。 它们不像传统队列那样遵循 FIFO 方法。 相反,数据结构中的优先级队列被安排,以便“高优先级”元素在其“低优先级”对应物之前得到服务。

在为其分配优先级值时,通常会考虑元素的值。 优先级队列与传统队列的不同之处在于,当我们尝试从队列中删除下一个元素时,将首先检索最高优先级的元素。

优先队列的另一个先决条件是进入这些队列的数据必须按顺序排列。 这意味着各个数据元素必须以某种方式相互比较,以便它们的排列可以按从低到大或从大到低的顺序排列。 这是必要的,以基于相互比较来分配具有相对优先级的队列元素。

优先级队列在数据结构中的应用通常涉及到它们与其他无序数据结构如堆、数组、链表或 BST 的组合。 由于提供了有效实现优先级队列的规定,堆提供了最有效的组合形式。

要了解有关数据科学这一新兴领域及其在制造业中的应用的更多信息,请查看upGrad.com 的这篇详细博客。

优先队列支持的操作

优先队列中的操作有助于处理输入、删除、查看和修改的信息。 这些操作对于在队列元素之间遍历也很有用。 它们如下:

1. is_empty : is_empty 操作检查队列当前是否包含任何元素。

2. Insert_with_priority:该操作将一个元素连同需要与之关联的优先级值一起添加到队列中。

3. Pull_highest_priority_element:该操作从队列中移除最高优先级元素,同时返回该元素的值。

4. Peek: Peek 操作用于“find-max”或“find-min”,具体取决于预期结果。 此操作不会删除最大/最小元素,只会返回它。

在数据结构中使用堆作为优先级队列的好处

当优先级队列基于堆时,观察到插入和删除的 O(log n) 性能。 这提高了性能,并且 O(n) 函数是从“n”组元素构建的。 配对堆和斐波那契堆为优先队列操作提供了更好的界限。

要深入了解数据结构中的优先级队列以及与编程领域相关的许多其他重要概念,请参加upGrad的在线课程

优先队列和排序元素

考虑到计算复杂性,优先级队列由于其固有属性而对应于排序算法。 例如,我们必须收集所有需要排序的元素,然后将它们插入优先队列。

然后,如果我们按顺序删除元素,结果将是元素的排序顺序。 堆排序、平滑排序、选择排序、插入排序和树排序是一些排序算法的名称,它们与数据结构中的优先级队列具有等效的相关性

优先队列的应用

数据结构中的优先级队列通常结合Heap数据结构来实现。 它们用于模拟排序、分类和跟踪未探索的路线。 两种类型的优先级队列:升序和降序,有自己的一组利用。 其中一些应用是:

  • 带宽管理
  • 离散事件模拟
  • Dijkstra 算法
  • 霍夫曼编码
  • 最佳优先搜索算法
  • ROAM 三角剖分算法
  • 最小生成树的 Prim 算法

结论

截至今天,约有 50 亿消费者直接或间接地与数据相关联。 到 2025 年,将有超过 60 亿人连接到大数据。 IDC 预测数据将增长 10 倍,并预测对数据科学家的高要求。 数据结构中优先级队列对于程序员和数据科学家来说是一个重要的概念,因为它们与堆数据结构的密切相关和应用。

如果您想了解数据科学,请查看 IIIT-B 和 upGrad 的数据科学 PG 文凭,该文凭专为在职专业人士而设,提供 10 多个案例研究和项目、实用的实践研讨会、与行业专家的指导、1-与行业导师面对面交流,400 多个小时的学习和顶级公司的工作协助。

报名参加利物浦约翰摩尔斯大学计算机科学在线国际硕士课程,或全栈软件开发课程、DevOps 等的 PGD 课程,可以改善您作为程序员的就业前景。

从世界顶级大学在线学习数据科学课程获得行政 PG 课程、高级证书课程或硕士课程,以加快您的职业生涯。

描述优先队列的应用?

优先级队列应用于许多算法以及一些实际应用中。 其中一些描述如下:
1、哈夫曼算法:在数据压缩的哈夫曼算法中生成的哈夫曼树,使用优先级队列来实现树。
2. Prim 算法:该算法使用优先级队列来加速精确最小函数的处理。
3. Dijkstra 算法:该算法使用堆或优先级队列来提取最小值。 优先队列使得获得最小值的过程非常有效。
4.操作系统:优先级队列用于负载平衡和中断处理等几个操作系统进程。

区分堆栈和队列?

栈和队列都是线性数据结构。 下面说明了这两种数据结构之间的主要区别。
堆栈 -元素根据 LIFO 原则操作,即首先插入的元素是最后移除的元素。 元素可以从仅称为顶部的单端插入或删除。 插入操作也称为推送操作。
队列 -元素按照先进先出原则进行操作,即先插入的元素是先移除的元素。 插入操作也称为入队操作。

如何使用数组实现优先级队列?

为了使用数组实现优先级队列,创建一个结构来存储元素的值和优先级,然后创建该结构的数组来存储元素。 此实现涉及以下操作:
enqueue() -也称为插入过程,该函数用于将元素插入队列中。
peek() -此函数将遍历数组以返回具有最高优先级的元素。 如果找到两个具有相同优先级的元素,则返回其中值最高的元素。
dequeue() - dequeue() 函数用于将所有元素移动到 peek() 函数返回的元素左侧 1 个位置,并减小队列的大小。