算法导论学习笔记 6.5 优先队列

  优先队列(priority queue)是一种用来维护由一组元素构成的集合S的数据结构,其中的每一个元素都有一个相关的值,称为关键字(key)。一个最大优先队列支持一下操作:

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

  MAXIMUM(S):返回S中具有最大关键字的集合。

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

  INCREASE-KEY(S, x, k):将元素x的关键字值增加到k,这里假设k的值不小于x的原关键字值。

  最大优先队列的应用很多,其中一个就是在共享计算机系统的作业调度。最大优先队列记录将要执行的各个作业以及它们之间的相对优先级。当一个作业完成或者被中断后,调度器选出具有最高优先级的作业来执行。

  显然,优先队列可以用堆来实现。对一个作业调度或事件驱动模拟器这样的应用程序来说,优先队列元素对应着应用程序中的对象。我们需要确定哪个对象对应一个给定的优先队列元素,反之也是。在用堆来实现优先队列时,需要在堆的每个元素里存储对应对象的句柄。同样,在应用程序中,也需要存储一个堆中对应元素的句柄。通常情况下,这一句柄的时数组元素的下标。

  过程HEAP-MAXIMUM可以在O(1)时间内实现MAXIMUM操作(伪代码如下)。  

HEAP-MAXIMUM(A)
1    return A[1]
  过程HEAP-EXTRACT-MAX实现EXTRACT-MAX操作。该过程与HEAPSORT过程中的for循环体部分很相似:

HEAP-EXTRACT-MAX(A)
1      if A.heap-size < 1
2                 error "heap underflow"
3      max = A[1]
4      A[1] = A[A.heap-size]
5      A.heap-size = A.heap-size - 1
6      MAX-HEAPIFY(A, 1)
7      return max
  HEAP-EXTRACT-MAX的时间复杂度为(lgn)。因为除了时间复杂度为O(lgn)的MAX-HEAPIFY已外,其他的操作都是常数阶的。(待续...)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值