第5章减治法.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文档。上传文档
查看更多
具有11个结点的判定树 练习 对(47,5,26,28,10)进行筛选堆排序,使用大根堆,形成升序 ,列出每次筛选后的序列 47,28, 26, 5 ,10 (红色部分为大根堆) 10,28, 26, 5 , 47 (取出堆顶元素后的序列) 28, 10 , 26, 5 , 47 5, 10 , 26, 28, 47 26, 10 , 5, 28, 47 5, 10 , 26, 28, 47 10, 5 , 26, 28, 47 5, 10 , 26, 28, 47 练习 对(47,5,26,28,10)进行插入法生成大根堆 47 47 5 47 5 26 47 28 26 5 47 28 26 5 10 思考 插入法的本质是插入节点到堆的叶子,再进行调整使整个序列达到堆。 筛选法的本质是插入节点到堆的根,再进行调整使整个序列达到堆。 利用堆进行排序 1,先对无序序列进行调整生成堆 2,取出根节点,用叶子节点填充根节点 3,再调整得到堆,转去执行2。 问题的解决是经过一系列比较和判断,可以用判定树来描述这个判定过程。 解决这个问题的最自然的想法就是一分为二,也就是把硬币分成两组。把n枚硬币分成两组,每组有 枚硬币,如果n为奇数,就留下一枚硬币,然后把两组硬币分别放到天平的两端。如果两组硬币的重量相同,那么留下的硬币就是假币;否则,用同样的方法对较轻的那组硬币进行同样的处理,假币一定在较轻的那组里。 考虑不是把硬币分成两组,而是分成三组,前两组有 组硬币,其余的硬币作为第三组,将前两组硬币放到天平上,如果他们的重量相同,则假币一定在第三组中,用同样的方法对第三组进行处理;如果前两组的重量不同,则假币一定在较轻的那一组中,用同样的方法对较轻的那组硬币进行处理。显然这个算法存在递推式: 作业 习题5 1 2 4 设无序序列 T =(r1, r2, …, rn),T 的第k(1≤k≤n)小元素定义为T按升序排列后在第k个位置上的元素。给定一个序列T和一个整数k,寻找 T 的第k小元素的问题称为选择问题。特别地,将寻找第n/2小元素的问题称为中值问题。 5.3.2 选择问题 (1)若k=s,则rs就是第k小元素; (2)若ks,则第k小元素一定在序列ri ~ rs-1中; (3)若ks,则第k小元素一定在序列rs+1 ~ rj中; [ ri … rk … rs-1 ] rs [ rs+1 … … rj ] 均≤rs 轴值 均≥rs [ ri … … rs-1 ] rs [ rs+1 …rk … rj ] 均≤rs 轴值 均≥rs (a) 若ks,则rk在左半区 (b) 若ks,则rk在右半区 考虑快速排序中的划分过程,一般情况下,设待划分的序列为ri ~ rj,选定一个轴值将序列ri ~ rj进行划分,使得比轴值小的元素都位于轴值的左侧,比轴值大的元素都位于轴值的右侧,假定轴值的最终位置是s,则: 选择问题的例子: 5 3 8 1 4 6 9 2 7 选择问题的查找过程示例(查找第4小元素) 以5为轴值划分序列 45,只在左侧查找 以2为轴值划分序列 42,只在右侧查找 以4为轴值划分序列 4=4,轴值即为第4小元素 2 3 4 1 5 6 9 8 7 2 3 4 1 · · · · · 1 2 4 3 · · · · · · · 4 3 · · · · · · · 3 4 · · · · · 算法5.7——选择问题 1. i=1; j=n; //设置初始查找区间 2. 以r[i]为轴值对序列r[i]~r[j]进行一次划分,得到轴值的位置s; 3. 将轴值位置s与k比较 3.1 如果k=s,则将r[s]作为结果返回; 3.2 否则,如果ks,则j=s-1,转步骤2; 3.3 否则,i=s+1,转步骤2; 最好情况:每次划分的轴值恰好是序列的中值,则可以保证处理的区间比上一次减半,由于在一次划分后,只需处理一个子序列,所以,比较次数的递推式是: 最坏情况:每次划分的轴值恰好是序列中的最大值或最小值,则处理区间只能比上一次

文档评论(0)

精品ppt.word + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档