码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-03-17 21:52:58      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:算法导论

  优先队列(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已外,其他的操作都是常数阶的。(待续...)

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

标签:算法导论

原文地址:http://blog.csdn.net/guangzhanblog/article/details/44349487

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!