算法第2章分治策略.ppt

  1. 1、本文档共41页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第2章 分治策略 (Divide and Conquer);2.1.1 两个熟悉的例子;时间复杂度分析;2.1.2 分治算法的一般性描述;分治策略的算法分析工具:递推方程 两类递推方程 求解方法 第一类方程:迭代法、换元法、递归树、尝试法 第二类方程:迭代法、递归树、主定理 ;递推方程的解;A 报告;分治算法;伪码描述;例2.2 幂乘计算;计算 Fibonacci 数;2.3 改进分治算法的途径;例2.4 A,B 为两个n 阶矩阵,n =2k, 计算 C = AB. 传统算法 W(n)= O(n3) 分治法 将矩阵分块,得 其中 递推方程 W(n) = 8 W(n/2) + cn2 W(1) = 1 解 W(n) = O(n3).;Strassen 矩阵乘法;;;右边每个小方格至多1个点,每个点至多比较对面的6个点, 距离??的2个点(左右各1个)其纵坐标位置相差不超过12, 检查1个点是常数时间,O(n) 个点需要O(n)时间;;预排序的处理方法 ;实例:递归中的拆分;典型实例分析;算法Partition(A,p,r) 输入:数组A[p,r] 输出?:j,A的首元素在排好序的数组中的位置 1. x ? A[p] 2. i ? p 3. j ? r+1 4. while true do 5. repeat j ? j ?1 6. until A[ j ] ? x 7. repeat i ? i +1 8. until A[ i ] x 9. if i j 10. then A[ i ] ? A[ j ] 11. if i=j?1 then return j 12. else return j ;划分实例;最坏情况 ;均衡划分;假设输入数组首元素排好序后的正确位置处在1,2,…,n 各种 情况是等可能的,概率为1/n. 利用差消法求得 T(n)=O(nlogn); 问题:从给定的集合 L 中选择第 i 小的元素 不妨设 L 为 n 个不等的实数 i=1, 称为最小元素; i=n,称为最大元素; i=n-1,称为第二大元素; 位置处在中间的元素,称为中位元素 当n为奇数时,中位数只有1个,i=(n+1)/2; 当n为偶数时,中位数有2个,i=n/2, n/2+1. 也可以规 定其中的一个 ;算法 Findmax 输入:n 个数的数组 L 输出:max, k 1. max?L[1];k?1 2. for i?2 to n do 3. if max L[i] 4. then max?L[i] 5. k?i 5. return max, k 算法最坏情况下的时间复杂度 W(n)=n?1;选最大和最小;找第二大;算法 FindSecond 输入:n个数的数组L 输出:Second 1.k ?n 2.将 k 个元素两两一组,分成 ?k/2? 组 3.每组的2个数比较,找到较大的数 4.将被淘汰的较小的数在淘汰它的数所指向的链表中 做记录 5.if k 为奇数 then k ? ?k/2? +1 6.else k ? ?k/2? 7.if k1 then goto 2 8.max ?最大数 9.Second ? max 的链表中的最大;命题2.2 max在第一阶段的分组比较中总计进行了?logn?次比较. 证 设本轮参与比较的有 t 个元素,经过分组淘汰后进入下一轮的元素数至多是 ?t/2? . 假设 k 轮淘汰后只剩下一个元素 max,利用 ? ?t/2? /2? = ?t/22? 的结果并对 k 归纳,可得到 ?n/2k?=1. 若 n=2d,那么有 k=d=logn=?logn? 若 2dn2d+1, 那么 k=d+1=?logn?                       算法时间复杂度是 W(n)=n

文档评论(0)

317960162 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档