Chapter14-分而治之算法.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文档。上传文档
查看更多
Chapter14-分而治之算法

数据结构与算法 Chapter14 分而治之算法 内容提要 分而治之算法思想 分而治之算法应用 残缺棋盘 归并排序 快速排序 选择 距离最近的点对 解递归方程 复杂性的下限 分而治之策略 分而治之策略的应用 分而治之算法思想 分而治之算法是一种将复杂问题简单化的方法。 【分治法的设计思想】 将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。 最后把每个小问题的解答组合起来,可得到原问题的答案。 小问题通常与原问题相似,可递归使用分而治之算法来解决。 分而治之问题示例1—找伪币 【例 14-1 】找出伪币: 16 个硬币,其中 1 个是伪造的,且伪造硬币相对轻一些,有一台比较两组硬币重量的仪器。 解答:(两种方法) 1、两两比较: 最多8次比较,c(n)=n/2 2、将大问题分解为小问题,分而治之。 分割下限:n=2, c(n)=1 比较次数:c(n)=log2n 示例2—金块问题 【例 14-2 金块问题】有一袋金块,有轻有重,有一台比较重量的仪器,要求使用最少的次数,找出最轻和最重的金块。 【传统解答方法】通过 n-1 次比较得到最重金块,再通过 n-2 次比较得到最轻的金块。 最值改进算法 分而治之方法:金块问题 【分而治之方法】将金块分成两个袋子,分别找出两个袋子中的最轻和最重的金块,比较可得结果。可递归使用分而治之算法。 课后练习 Page440: 练习3-1,实现MinMax问题的递归算法 示例3—矩阵乘法问题 【例14-3矩阵乘法问题】求 n × n 阶的矩阵 C ,它是两个 n × n 阶矩阵 A 和 B 的乘积。 【解答】利用分而治之方法,将 A 、 B 和 C 分别划分为 4 个 n/2 × n/2 的矩阵(假设 n ≥ 2 ,且是 2 的幂),则可得到: C1 = A1B1+ A2B3 C2= A1B2+ A2B4 C3= A3B1+ A4B3 C4= A3B2+ A4B4 分而治之方法的实现:注意 分而治之方法思路会导致递归算法的使用 有些情况下,采用非递归程序来完成分而治之算法是可能的;而且能够取得更快的执行速度! 例如:金块问题 金块问题的非递归实现 采用二叉树形式描述解空间 由根到叶进行问题分解,由叶到根进行问题解决 解决步骤 2、分而治之算法应用 残缺棋盘 归并排序 快速排序 选择:中值问题 距离最近的点 分而治之算法应用(一) ——残缺棋盘(Defective Chessboard) 【问题描述】 2k*2k个方格的一个棋盘,有一个方格残缺,用阴影表示; 要求用三格板覆盖棋盘,三格板不重叠,不覆盖残缺方格,覆盖所有其它方格。 k=2 的残缺棋盘和不同方向的三格板 分而治之法求解残缺棋盘 当 k0 时,将2k*2k棋盘分割为 4 个 2k-1*2k-1子棋盘 ; 特殊方格必位于 4 个较小子棋盘之一中,其余 3 个子棋盘中无特殊方格; 为了将这 3 个无特殊方格的子棋盘转化为特殊棋盘,可以用一个三格板覆盖这 3 个较小棋盘的会合处,从而将原问题转化为 4 个较小规模的棋盘覆盖问题。 递归地使用这种分割,直至棋盘简化为棋盘 1×1 。 覆盖残缺棋盘TileBoard函数 覆盖残缺棋盘 覆盖残缺棋盘(续1) 覆盖残缺棋盘(续2) 覆盖残缺棋盘(续3) 递归过程 递归过程 输出棋盘的元素 残缺棋盘的时间复杂度 分而治之算法应用(二) ——归并排序 【问题描述】将 n 个元素排成非递减顺序。 【基本思想】 将待排序元素分成大小大致相同的 2 个子集合; 分别对 2 个子集合进行排序; 最终将排好序的子集合合并成为所要求的排好序的集合。 2-路归并排序(merge sort)算法思想 2-路归并排序过程 两路归并(Merge操作) Merge函数 (程序14-5) 一趟归并算法(MergePass) MergePass函数 (程序14-4) 二路归并排序MergeSort(程序14-3) 归并排序算法分析 归并排序算法稳定性分析 分而治之算法应用(三) —快速排序 快速排序又叫作分区交换排序,它是对起泡排序方法的一种改进。 由 C.A.R. Hoare 于 1962 年提出的。 【算法思想】: 通过一次排序将待排序对象分割成独立的两部分, 其中一部分对象的关键码均比另一部分对象的关键码小, 再分别对这两部分子序列对象继续进行排序,以达到整个序列有序。 快速排序算法思想 快速排序算法思想(续) 快速排序的伪代码(图14-9) 快速排序算法QuickSort(程序14-6) 快速排序算法quickSort(程序14-6) 快速排序算法quickSor

文档评论(0)

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

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

1亿VIP精品文档

相关文档