孙成敏《计算机算法设计与分析》第4章.pptVIP

孙成敏《计算机算法设计与分析》第4章.ppt

  1. 1、本文档共69页,可阅读全部内容。
  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文档。上传文档
查看更多
第四章 分治法 用五个特性判断是否是一个算法 二元比较树-顺序检索  n个元素存在如下关系的:A(1)A(2)…A(n),检索一给定元素x是否在A中出现 二元比较树-二分检索 4.4 归并分类 讨论: 1. 可以消去递归,取消栈的使用,例如: ① 采用由底向上的方法,将元素两两配对; ② 自然合并排序法; 2. 空间代价 3. 适合于并行计算,采用并行或专用集成电路实现数据排序操作时,派生出许多算法,例如奇偶合并排序,双调合并排序等。 对3个关键字分类的二元比较树 小结 一般方法 二分检索 归并分类 斯特拉森矩阵乘法 侧重算法设计和算法分析 作业: 2, 3, 5, 7, 11, 12, 23 直接算法的比较次数为2(n-1), 加上实现for循环 需要的比较次数, 则为3(n-1), 虽然3(n-1)略大于 5n/2-3, 但MAXMIN算法还有递归所带来的时间 开销, 这种情况下直接算法要快一些 结论: 如果数组A的元素之间的比较远比整型变量的比较代价昂贵,则分治法产生效率较高的算法;反之则得到一个效率较低的程序。 4.3 找最大和最小元素 直接方法(插入法) for j?2 to n do 将A(j)放入已分类集合A(1:j?1) repeat 4.4 归并分类 问题描述: 给定一个含有n个元素的集合, 把它们按一定的次序分类(如非降次序) procedure INSERTIONSORT(A, n) A(0) ? ?? for j ? 2 to n do item ? A(j); i ? j?1; while ( itemA(i)) do A(i+1) ? A(i); i?i?1; repeat A(i+1) ? item; repeat end INSERTIONSORT 插入分类算法描述 数组元素的比较和移动 将本次考虑的元素 插入相应位置 可能执行0~j次(j=2,3…n) 最好情况? (n) 最坏情况的计算时间:2+…+n=(n(n+1)/2)?1=?(n2) 用item保存当前元素值 4.4 归并分类 分:平均分为2个子集合 治:递归调用分类算法,将2个子集合分类 合:将2个分类的子集合并为一个分类集合 4.4 归并分类 分治策略设计归并分类算法 递归调用,分别对分解出来的两个子问题排序 合并两个已排好的序列,得到原问题的解 归并排序算法描述 Procedure MERGESORT(low,high) int low, high, mid; if (lowhigh) then mid ? ?(low+high)/2? call MERGESORT(low,mid) call MERGESORT(mid+1,high) call MERGE(low,mid,high) end MERGESORT 4.4 归并分类 合并函数MERGE的算法描述 procedure MERGE(low, mid, high) int h,i,j, k, low, mid, high; global A(low : high); local B(low : high); h ? low; i? low; j? mid+1; while (h?mid and j?high) do if (A(h) ?A(j)) then { B(i) ? A(h); h ? h+1; } else { B(i) ? A(j); j ? j+1; } i?i+1; repeat if (hmid) then for k?j to high do {B(i)?A(k);i? i+1} else for k?h to mid do {B(i)?A(k);i?i+1 } for k ? low to high do A(k) ? B(k); end MERGE 处理两个已 分类的序列 剩余元素 处理过程 将已分类的集合复制到A数组 4.4 归并分类 MERGESORT执行过程 1,5 4,5 1,3 5,5 4,4 3,3 1,2 1,1 2,2 表示一次调用时的low和high的值 只含单个元素的子集合 1, 1,

文档评论(0)

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

文档有任何问题,请私信留言,会第一时间解决。

版权声明书
用户编号:7043023136000000

1亿VIP精品文档

相关文档