网站大量收购独家精品文档,联系QQ:2885784924

chapter堆和不相交集数据结构.PPTVIP

  1. 1、本文档共27页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
chapter堆和不相交集数据结构

* HeJing(2011) School of Software School of Software, YunNan University 任课教师:何婧 Email: hejing@ Chapter 2 Outline 堆的定义 堆上的运算 堆排序 最小堆和最大堆 2.1 堆的定义 在许多算法中,需要支持下面两种运算的数据结构:插入元素和寻找最大值 普通队列:只能在队尾插入元素,但寻找最大元需要搜索整个队列 * A B C D E 队头 队尾 队列 2.1 堆的定义 在许多算法中,需要支持下面两种运算的数据结构:插入元素和寻找最大值 排序数组:寻找最大元非常简单,但插入运算需要移动很多元素 堆 * 30 24 20 12 5 18 21 6 3 2.1 堆的定义 堆的定义:一个(二叉树)堆是一个几乎完全的二叉树,它的每个节点都满足堆的特性:如果v和p(v)分别表示节点和它的父节点,那么存储在p(v)中的数据项键值不小于存储在v中数据项的键值。 * 30 24 20 12 5 18 21 6 3 蕴涵:沿着每条从根到叶子的路径,元素的键值以非升序排列。 2.1 堆的定义 堆的表示:一个有n个节点的堆,可以用一个一维数组H[1…n]来表示。 T的根节点存储在H[1]中; 假设T的节点x存储在H[j]中, 则它的左孩子存储在H[2j]中, 它的右孩子存储在H[2j+1]中; 元素H[j]的父节点如果不是根节点, 则存储在H[ ] * 30 24 20 12 5 18 21 6 3 1 2 3 4 5 6 7 8 9 30 24 18 20 21 6 3 12 5 2.1 堆的定义 如果堆中的节点有右子节点,则它一定有左子节点 堆的表现是一棵二叉树,但它的数据结构实质是一个一维数组 对于任何索引j,2=j=n,有H[ ]=H[j] * 2.2 堆上的运算 deletemax[H]:从一个非空堆H中删除最大键值,并返回该值 insert[H,x]:将x插入堆H中 delete[H,i]:从堆H中删除第i项 makeheap[A]:将数组A转换成堆 * 2.2 堆上的运算 两个辅助运算Sift_up和Sift_down 过程:Sift_up(元素上移) 输入:数组H[1…n]和位于1和n之间的索引i 输出:上移H[i],以使H满足堆的定义 done←false; if i=1 then exit; repeat if H[i]H[ ] then 交换H[i]与H[ ] else done ←true; i ← ; until i=1 or done * 30 24 20 12 5 18 21 6 3 1 30 2 24 3 18 4 20 5 21 6 6 7 3 8 12 9 5 10 35 35 2.2 堆上的运算 两个辅助运算Sift_up和Sift_down 过程:Sift_down(元素下移) 输入:数组H[1…n]和位于1和n之间的索引i 输出:上移H[i],以使H满足堆的定义 * 1 5 2 24 3 18 4 20 5 21 6 6 7 3 8 12 9 30 30 24 20 12 5 18 21 6 3 5 24 20 12 18 21 6 3 2.2 堆上的运算 两个辅助运算Sift_up和Sift_down 过程:Sift_down(元素下移) 输入:数组H[1…n]和位于1和n之间的索引i 输出:上移H[i],以使H满足堆的定义 done←false; if 2in then exit; repeat i ←2i; if i+1=n and H[i+1]H[i] then i ←i+1; if H[ ]H[i] then交换H[i]与H[ ] else done ←true; endif until 2in or done * 1 5 2 24 3 18 4 20 5 21 6 6 7 3 8 12 9 30 2.2 堆上的运算 deletemax[H]:从一个非空堆H中删除最大键值,并返回该值 insert[H,x]:将x插入堆H中 delete[H,i]:从堆H中删除第i项 makeheap[A]:将数组A转换成堆

文档评论(0)

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

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

1亿VIP精品文档

相关文档