2.3分片算法专用课件.pptVIP

  1. 1、本文档共39页,可阅读全部内容。
  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文档。上传文档
查看更多
2.3分片算法专用课件

§3. ----把问题分成若干子问题,先求得子问题的解,然后把这些解合并起来,得出母问题的解。 一、分片独立的情况 --通过二分法分解或经过简单处理后,得到的是相似且相互独立的子问题 解: 过程MAXMIN,用一个变量S,|S|=2K ,K≥1, 每次返回(return)一个有序偶〈a,b〉, 其中a是最大元,b是最小元。 实际只是第2句(1次),第6句(2次)比较。 例如,n=8, n=23 , k=3 , Program flow 递归过程: (参见P.36程序) ∴是第2句共执行4次,第6句共执行3次,故共进行了 4×1+3×2=10次比较。 即,n=8, T(n)=10 (而方法1不分片, n=8, T(n) = 2n-3 = 2×8-3 = 13) 这个结果也可以用归纳法证明。 金块问题 老板有一袋金块(共n块,n是2的幂,n≥2),最优秀的雇员得到其中最重的一块,最差的雇员得到其中最轻的一块。假设有一台比较重量的仪器,希望用最少的比较次数找出最重和最轻的金块。 用二元树表示: ▲ 方法1 求最大元: 第三步以后, ∴ 总比较次数是: 比较次数为: 解得, f(n) = K+1 = logn + 1 ∴ 算法是O(logn). ---- 请自己验证! 二、分片不独立的情况 --分解后不独立的子问题,主要表现在子问题之间包含了公共的子问题 总 之 分片法(又叫分治法)的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的几个相似问题,以便各个击破,分而治之。 分片法并不陌生,这个算法策略在数据结构中有较多应用,如折半查找、合并排序、快速排序、二叉树遍历(先遍历左子树再遍历右子树)、二叉排序树的查找等算法。 分片法是一种找大规模问题与小规模问题关系的方法,其求解很自然地可以用一个递归过程来表示,因此,分片法是递归设计方法的一种具体策略。 2个n位数(二进制数)相乘。 传统的蛮力算法要O(n2)次位运算。 采用分治法,设x、y为2个n位数, n=2k (简化考虑而已),k∈P,那么,可把x、y各分成2个部分,每个 位。 例4:大整数乘法 所以, 注②: 有4个,每个是两个 位相乘,每个要进行 次,4个要进行n2次,∴没有收益。 注③: 这就仅3个(ac、(a+b)(c+d)、bd),每2个 位乘,另外加上一些加、减和移位。 ……………………….. (移前 位) ∴ 可有: begin 1. u ← (a+b)(c+d); 2. v ← a×c; 3. w ← b×d; 4. z ← end 加、减和移位与n成正比。 n=1时为k, n>1时为kn。 解得, ∴ 算法是O(nlog3) ( log3=1.59<2 ) ∴ 该算法比传统的O(n2)算法要渐近较优。 上面方程也可写成通式: 有解, 上例,a=3, b=2, c=k, ∴ a>b的解是 ∵ log23= log49 ∴ 如果采用b=4,且能够使a<9(例如8),那么, 可得到一个比上法渐近更优的算法, 算法。 * * Divide-and-Conquer 第二章 (分片算法) 若子问题的解是母问题的较小文本,从而可以递归地运算,那么这个算法往往就非常有效。 §3.1 Divide-and-Conquer theory ( 分片算法原理 ) 设计过程分为3个阶段: ⑴ Divide = 整个问题划分为多个子问题。 ⑵ Conquer = 求解每个子问题(递归)。 ⑶ Combine = 合并子问题的解,形成原始问 题的解。 1.Divide-and-Conquer 算法的设计 例如,Merge-sort算法: 分析过程:(当一个算法递归地调用自己时) ⑴.建立递归方程 T(n) ⑵.求解 T(n) 2.Divide-and-Conquer 算法的分析 递归方程的建立方法: 设输入大小为n, T(n)为时间复杂性, 当nc, T(n)=?(1). Divide阶段的时间复杂性: ? 划分问题为a个子问题。 ? 每个子问题大小为1/b。 ⑴.

文档评论(0)

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

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

1亿VIP精品文档

相关文档