数据结构 课件9优先队列.ppt

  1. 1、本文档共87页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构与程序设计 南开大学软件学院 2008 李耀国 Chapter 9 Priority Queues 9.1 Introduction 9.2 Linear Lists 9.3 Heaps 9.4 Leftist Trees 9.5 Application Chapter 9 Priority Queues 与第6章FIFO结构的队列不同,优先队列中元素出队列的顺序由元素的优先级决定。从优先队列中删除元素是根据优先权高或低的次序,而不是元素进入队列的次序。 可以利用堆数据结构来高效地实现优先队列。堆是一棵完全二叉树,可用公式化描述方法来高效存储完全二叉树。在高度和重量上取得平衡的左高树很适合于用来实现优先队列。本章的内容涵盖了堆和左高树。 Chapter 9 Priority Queues 在本章的应用部分,利用堆开发了一种复杂性为O(nlogn)的排序算法,称为堆排序。第3章介绍的箱子排序和基数排序算法的运行时间为Θ(n),但算法中元素的取值必须在合适的范围内。堆排序是迄今为止所讨论的第一种复杂性优于O(n2)的通用排序算法。 从渐进复杂性的观点来看,堆排序是一种优化的排序算法,因为可以证明,任何通用的排序算法都是通过成对比较元素来获得Ω (nlogn)复杂性的。 Chapter 9 Priority Queues 本节所考察的另外两个应用是机器调度和生成霍夫曼编码。机器调度问题属于NP-复杂问题,对于这类问题不存在具有多项式时间复杂性的算法。而第2章提到的大量事实表明,只有具有多项式时间复杂性的算法才是可行的,因此,经常利用近似算法或启发式算法来解决NP-完全问题,这些算法能在合理的时间内完成,但并不能保证找到最佳结果。对于机器调度应用,利用堆数据结构获得了有效解决机器调度问题的近似算法。 9.1 Introduction 优先队列(priority queue)是0个或多个元素的集合,每个元素都有一个优先权或值,对优先队列执行的操作有 1)查找; 2)插入一个新元素; 3)删除。 在最小优先队列(min priority queue)中,查找操作用来搜索优先权最小的元素,删除操作用来删除该元素;对于最大优先队列(max priority queue),查找操作用来搜索优先权最大的元素,删除操作用来删除该元素。 9.1 Introduction ADT9-1最大优先队列的抽象数据类型描述 抽象数据类型MaxPriorityQueue{ 实例 有限的元素集合,每个元素都有一个优先权 操作 Create():创建一个空的优先队列 Size():返回队列中的元素数目 Max():返回具有最大优先权的元素 Insert(x):将x插入队列 DeleteMax(x):从队列中删除具有最大优先权的元素,并将该元素返回至x } 9.1 Introduction 例9-1:我们需要对机器服务进行收费。假设每个用户每次使用机器所付费用都是相同的,但所需要服务时间不同。我们可以把等待使用该机器的用户组织成一个最小优先队列,优先权即为用户所需服务时间。当一个新的用户需要使用机器时,将他的请求加入优先队列。一旦机器可用,则为需要最少服务时间(即具有最高优先权)的用户提供服务。 如果每个用户所需时间相同,但用户愿意支付的费用不同,则可以用支付费用作为优先权,一旦机器可用,所交费用最多的用户可最先得到服务,这时就要选择最大优先队列。 9.1 Introduction 例9-2:考察6.4.4节所介绍的工厂仿真问题,对其事件队列所执行的操作有: 1)查找具有最小完成时间的机器; 2)改变该机器的完成时间。 假设我们构造一个最小优先队列,队列中的元素即为机器,元素的优先权为该机器的完成时间。最小优先队列的查找操作可用来返回具有最小完成时间的机器。 为了修改此机器的完成时间,可以先从队列中删除具有最小优先权的元素,然后用新的完成时间作为该元素的优先权并将其插入队列。 9.1 Introduction 最大优先队列也可用于工厂仿真问题。在6.4.4节中的仿真程序中,每台机器按先进先出的方式来完成等待服务的任务,因此可以为每台机器配置了一个FIFO队列。但如果将服务规则改为“一旦机器可用,则从等待任务中选择优先权最大的任务进行处理”,每台机器就需要一个最大优先队列。 每台机器执行的操作有:1)每当一个新任务到达,将其插入该机器的最大优先队列中;2)一旦机器可以开始运行一个新任务,将具有最大优先权的任务从该机器的队列中删除,并开始执行它。 9.1 Introduction 当每个机器的服务规则如上述改变之后,则需用一个最小优先队列来表示仿真问题中的事件表,用一个最大优先队列来存储每台机器旁的等待任务。 在前

文档评论(0)

好文精选 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档