[算法设计与分析-6堆排序.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文档。上传文档
查看更多
[算法设计与分析-6堆排序

算法设计与分析 第五章 堆排序 堆的基本概念和性质 堆的基本操作(过程及分析) 堆排序算法(过程及分析) 堆排序应用—优先级队列(过程及分析) 程序展示和讲解 一、堆的基本概念和性质 1、定义: 堆可看作为一完全二叉树,大根堆的任一 非终端节点(叶子节点) 的数据不小于其子节点的数据。 2、两个特点: ①根节点上为该堆的最大元素。 ②较大的数据位于较低的层次。 堆的属性 1、 length[A]:数组中的元素个数 2、heapsize[A]:存放在A中的堆的元素个数 显然heapsize[A]≤ length[A] 3、给定一个节点的下标i,其父节点为 ┖ i/2 ┚,其左儿子[LEFT(i)]为2i、右儿子 [RIGHT(i)]为2i+1. 五个基本过程 1、HEAPIFY过程:维持堆性质,运行时间O(lgn). 2、BUILD--HEAP过程:从无序的输入数组中构造出一个堆来,运行时间O(n). 3、HEAPSORT过程:对一个数组进行排序,运行时间O(nlgn). 4、EXTRACT--MAX和INSERT过程:是堆结构可以作为一个优先级队列来用,运行时间O(lgn). 堆实例 二、堆的基本操作 HEAPIFY过程 1、过程说明:对于第i个数,假定以它左儿子[LEFT(i)]和右儿子 [RIGHT(i)]为根的两棵子树都已为堆,调用HEAPIFY使得以i为根的子树成为一个的堆。 2、过程图例 3、算法如下 1、l←LEFT(i) 2、r←RIGHT(i) 3、if l≤heapsize(A)andA[l]A[i] 4、 then largest←l 5、 else largest←i 6、if r≤heapsize(A) andA[r]A[largest] 7、 then largest←r 8、if largest≠i 9、 then exchange A[i]←→A[largest] 10、 HEAPIFY(A,largest) 4、运行时间 ① T(n)=T(2/3n)+Θ(1) 可得T(n)=O(lgn) ② 因为堆的高度最大为lgn 所以可知T(n)= O(lgn) BUILD-HEAP过程 1、图例 2、 BUILD-HEAP(A)算法 1) heapsize[A]←length[A] 2) for i← ┖ length[A]/2 ┚downto 1 3) do HEAPIFY(A,i) 3、运行时间 粗估: 每调一次HEAPIFY(A,i)的时间为O(lgn) ,总共有O(n)次调用,故运行时间最多为O(nlgn).此时间是不紧确的。 紧确估计: 含n个元素的堆中至多有 个节点的高度为h 三、堆排序算法 1、图例: 2、算法 1) BUILDHEAP(A) 2) for i←length[A] downto 2 3) do exchange A[1]←→A[i] 4) heapsize(A)←→heapsize(A)-1 5) HEAPIFY(A,1) 3、运行时间 堆排序的时间 建堆的时间为O(n)+(n-1)次的HEAPIFY调用时间 O(lgn),所以总的代价为O(nlgn) 四、优先级队列 一、常见操作 1、INSERT(S,x):把元素x插入集合S. 可记为S←S∪{x}. 2、MAXIMUM(S):返回S中具有最大关键字的元素。 3、EXTRACT—MAX(S):去掉并返回S中具有最大关键字的元素。 HEAP-EXTRACT-MAX过程 HEAP—EXTRACT—MAX(A) if heap—size [A]1 then error“heap underflow” max←A[1] A[1]←A[heap—size [A]] heap—size[A]←heap—size[A]-1 HEAPIFY(A,1) return max HEAP-EXTRACT-MAX过程运行时间 从算法中可以看出该过程的运行时间为O(lgn)。 INSERT(S,x)过程 1、图例 2、 HEAP—INSERT(A,key)算法 1、 heap—size[A]←heap—size[A]+1 2、 i←heap—size[A] 3、 while i1 and A[PARENT(i)]k

文档评论(0)

1789811832 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档