算法----优先队列

本文介绍了优先队列的概念,包括最大优先级队列和最小优先级队列,并详细阐述了如何使用最大堆实现最大优先级队列。文中提到的最大堆支持INSERT、MAXIMUM、EXTRACT_MAX和INCREASE_KEY等操作,并提供了HEAP_EXTRACT_MAX操作的详细步骤及伪代码。
摘要由CSDN通过智能技术生成

      队列:是一种满足先进先出(FIFO)的数据结构,数据从队列头部取出,新的数据从队列尾部插入,数据之间是平等的,不存在优先级的。

      优先队列:优先级队列有两种,最大优先级队列和最小优先级队列,这两种类别分别可以用最大堆和最小堆实现。

      优先队列支持的操作:

               INSERT(S,x):把元素x插入到集合S

               MAXIMUM(S):返回S中具有最大关键字的元素

               EXTRACT_MAX(S):去掉并返回S中的具有最大关键字的元素

               INCREASE_KEY(S,x,k):将元素x的关键字的值增加到k,这里k值不能小于x的原关键字的值。

最大优先级队列操作实现:

采用最大堆实现最大优先级队列,关于最大堆可以参见上一篇日志http://blog.csdn.net/chenxun_2010/article/details/48213197

(1)HEAP_MAXIMUM用O(1)时间实现MAXIMUM(S)操作,即返回最大堆第一个元素的值即可(return A[1])

(2)HEAP_EXTRACT_MAX实现EXTRACT_MAX操作,删除最大堆中第一个元素,然后调整堆

        操作过程如下:将最堆中最后一个元素复制到第一个位置,删除最后一个节点(将堆的大小减少1),然后从第一个节点位置开始调整堆,使得称为新的最大堆。操作过程如下图所示:


伪代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值