优先队列(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 优先队列相关推荐

  1. 算法导论中C语言代码,算法导论-学习笔记与进度

    算法导论 阅读进度 第一部分 基础知识 第一章 计算中算法的角色 Done 1.1 算法 输入与输出 算法可以解决哪些问题 数据结构 技术 一些比较难的问题 1.2 作为一种技术的算法 效率 算法和其 ...

  2. 算法导论学习笔记 第6章 堆排序

    在本章中介绍了另一种排序算法:堆排序(heapsort).与归排序一样,但不同于插入排序的是,堆排序的时间复杂度式(Onlgn).而与插入排序相同,但不同于归并排序的是,堆排序同样具有空间原址性(我理 ...

  3. 【算法导论学习笔记】第3章:函数的增长

    原创博客,转载请注明: http://www.cnblogs.com/wuwenyan/p/4982713.html  当算法的输入n非常大的时候,对于算法复杂度的分析就显得尤为重要,虽然有时我们能通 ...

  4. 算法导论学习笔记 第7章 快速排序

    对于包含n个数的输入数组来说,快速排序是一种时间复杂度为O(n^2)的排序算法.虽然最环情况的复杂度高,但是快速排序通常是实际应用排序中最好的选择,因为快排的平均性能非常好:它的期望复杂度是O(nlg ...

  5. 算法导论学习笔记 第2章 算法基础

    本章介绍了一个贯穿本书的框架,后续的算法设计都是在这个框架中进行的. 本章通过插入排序和归并排序两种常见的算法来说明算法的过程及算法分析,在分析插入排序算法时,书中是用了循环不变式证明了算法的正确性, ...

  6. 【转】算法导论学习笔记 一 分治算法

    分治策略是一种常见的算法.在分治策略中,我们递归的求解一个问题,在每层递归中应用如下三个步骤: 1. 分解,将问题分解成规模更小但解决方案相同的子问题 2. 解决,递归的求解子问题,如果子问题足够小则 ...

  7. 算法导论学习笔记1_循环不变式

    循环不变式 1. 循环不变式和数学归纳法 2. 循环不变式的三条性质 3. 利用循环不变式分析插入排序 4. 练习题 2.1.3 1. 循环不变式和数学归纳法 在数学中,数学归纳法常用于证明给定命题在 ...

  8. 生日悖论问题——《算法导论学习笔记》

    1      生日悖论问题 1.1    原始问题 一个房间里的人数必须达到多少,才能使两个人生日相同的机会达到50%?不考虑闰年情况,也就是一年按照365天来计算. 解答: 假设房间里的人数是k,我 ...

  9. 算法训练营学习笔记1

    算法训练营学习笔记 贪心算法 心算法总是做出当前最好的选择,期望通过局部最优选择得到全局最优的解决方案.从问题的初始解开始,一步歩地做出当前最好的选择,逐步逼近问题的目标,尽可能得到最优解: 贪心本质 ...

最新文章

  1. Markdown语法简介
  2. 这是入门生信,学习生信分析思路和数据可视化的首选?
  3. SharePoint 2007 SDK 有了1.1版本
  4. 【哈佛商学院和斯坦福要求学生必看的20部电影】中/英字幕
  5. linux 后台程序 cout输入到文件,istringstream在读文件时候的应用
  6. 第38章:MongoDB-集群--Replica Sets(副本集)---多机的搭建
  7. CSDN联合腾讯云重磅发布“腾讯云数据库TDSQL工程师路线图”
  8. 什么是Open-E?
  9. MySQL GUI图形化界面常用软件推荐
  10. LeetCode算法扫题系列19
  11. 拓端tecdat|把握出租车行驶的数据脉搏 :出租车轨迹数据给你答案!
  12. 煤矿调度计算机使用管理制度,煤矿调度文档管理制度(参考).doc
  13. PreparedStatement 防止 SQL 注入原理
  14. IP报文头详解以及定义
  15. mysql查询不到的数据补0
  16. (运存扩展器)Android手机内存扩展软件RAMEXPANDER使用教程
  17. 程序设计基础—什么是逻辑与、或、非关系?
  18. 瑞吉外卖项目——修改分类
  19. Tommy Hilfiger官宣金秀贤为2021年秋季男装系列全新品牌大使
  20. iOS开发-QQ好友列表展示

热门文章

  1. Struts 验证框架实现步骤
  2. python算法与数据结构-希尔排序算法(35)
  3. Windows下Python包和模块的安装方法(亲测手动安装)
  4. 20 年,缔造了 Google 互联网王国!
  5. php安装openssl 扩展
  6. Golang手册与常用包手册
  7. PHP的单引号双引号
  8. 微信小程序————经纬度转化为具体位置(逆地址解析)
  9. Windows下适用于PHP 7.1的memcache扩展工具编译
  10. android p版本 字符串常量池,Android OOM 问题