数据结构课件 第9章 堆与优先队列.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
福州大学数学与计算机科学学院 第九章 堆与优先队列 ? 理解以集合为基础的抽象数据类型优先队列。 ? 理解用有序字典实现优先队列的方法。 ? 理解优先级树和堆的概念。 ? 掌握用数组实现堆的方法。 ? 理解以集合为基础的抽象数据类型可并优先队列。 ? 理解左偏树的定义和概念。 ? 掌握用左偏树实现可并优先队列的方法。 ? 掌握堆排序算法。 9 堆与优先队列 9.0 优先队列的原型 排队上车,老弱病残者优先上车 排队候诊,危急病人优先就诊 洗相馆为顾客洗照片,加钱加急者优先洗 分时操作系统运行程序,小程序优先 贪心算法对解分量的选择,按元素的某种特征值,大(或小)的优先 在一个集合中搜索,按元素的某种特征值,大(或小)的优先 ……处理或服务时只关心对象中谁的优先级最高通常的队列是一种优先队列最先到者优先级最高 9 堆与优先队列 9.1 优先队列的定义? 优先队列也是一个以集合为基础的抽象数据类型。 优先队列中的每一个元素都有一个优先级值。优先队列中元素x的优先级值记为p(x),它可以是一个实数,也可以是一个一般的全序集中的元素。优先级值用来表示该元素出列的优先级。 通常约定优先级值小的优先级高。也可以约定优先级值大的优先级高。 优先队列支持的基本运算有: (1)Size( ):返回优先队列中元素个数。 (2)Min( ):返回优先队列中具有最小优先级值的元素。 (3)Insert(x):将元素x插入优先队列。 (4)DeleteMin(x):删除优先队列中具有最小优先级值的元素,并保存到x中。 9 堆与优先队列 9.2 用实现有序字典的方式实现优先队列 (1)优先队列与字典的相似性与区别: 优先队列中元素的优先级值可以看作是有序字典中元素的线性序值。 在有序字典中,不同的元素具有不同的线性序值,其插入运算仅当要插入元素x的线性序值与当前字典中所有元素的线性序值都不同时才执行。 对于优先队列来说,不同的元素可以有相同的优先级值。因此,优先队列的插入运算即使在当前优先队列中存在与要插入元素x有相同的优先级值的元素时,也要执行元素x的插入。 9 堆与优先队列 9.2 用实现有序字典的方式实现优先队列 (2)由于优先队列与字典的相似性,除了散列表之外,所 有实现字典和有序字典的方法都可用于实现优先队列。 用有序链表实现优先队列;(Insert低效) 用二叉搜索树实现优先队列;(Insert,DeleteMin, Min 均低效) 用AVL树实现优先队列;(逻辑复杂) 用无序链表实现优先队列;(DeleteMin, Min均低效) …… 都有缺点。原因在于没有考虑到优先队列的特性。 9 堆与优先队列 9.3 用优先级树实现优先队列 1.优先队列的特征: DeleteMin和Min只关心优先级最高的元素 Insert的元素不要求全局的序关系 因此实现优先队列的结构只要求方便DeleteMin和Min,而对Insert也只要求不给结构的维护带来太大的麻烦。 根据这两个特征,人们发明了优先级树。 9 堆与优先队列 9.3 用优先级树实现优先队列(续) 2.优先级树的概念 优先级树是满足下面的优先级性质的二叉树: (1)树中每一结点存储一个元素。 (2)任一结点中存储的元素的优先级值不大(小)于其儿子结点中存储的元素的优先级值即父结点的优先级不低于其儿子结点的优先级。 换句话说,越接近根的结点中的元素的优先级越高,越方便被访问,因为根最方便被访问。 相应的优先级树称为极小(大)化优先级树。 9 堆与优先队列 9.4用堆实现优先队列 用优先级树实现优先队列仍有不足: Insert(x)和DeleteMin(x)后对结构的维护,在最坏情况下,仍需O(h)=O(n)。 如果让优先级树近似满,从而h=[log n],达到最小,那么,结果将令人满意:在最坏情况下, Min( )将只需O(1), Insert(x)和DeleteMin(x)后对结构的维护只需O(log n)。 因而引入堆的概念并用堆来实现优先队列。 (1)堆的概念: 如果一棵优先级树是一棵近似满二叉树,那么,这棵具有优先级性质的近似满二叉树(外形像堆)就叫做堆。 (2)用堆实现优先队列: Min( )、Insert(x)和DeleteMin(x)运算的实现 9 堆与优先队列 9.5 用数组表示堆从而实现优先队列 (1) 用数组表示堆: 从1开始对堆的结点从根开始自上而下逐层、每层从左到右进行编号,然后让结点中的元素按编号在数组A中与下标对号入座。 (2) 用数组表示堆的优点: 存储紧凑,空间利用率高 父子关系简单清晰:存放在A[i]的是结点i的元素, A

文档评论(0)

柳风飘香 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档