分治算法(DivideConquerAlgorithm).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文档。上传文档
查看更多
分治算法(Divideamp;ConquerAlgorithm).ppt

分治算法(Divide Conquer Algorithm) 宫秀军 天津大学计算机科学与技术学院 gongxj@ 提纲 分治法基本原理 应用 归并排序 快速排序 选择问题 复杂性的下限 最大最小问题的下限 排序算法的下限 14.1 分治法思想 分治法设计算法的思想 将问题分成(divide)多个子问题; 递归地(conquer)解决每个子问题; 将子问题的解合并(combine)成原问题的解。 分治法常常得到递归算法 Merge-Sort, Quick Sort Discrete Fourier transform (FFT). 算法复杂性分析 Master method Substitution method 例14-1 [找出伪币] 现有16个硬币,其中有一个是伪币,并且伪币重量比真币轻。试用一台天平找出这枚伪币。 两两比较,最坏情形需8次比较找出伪币。 分治法仅需4次比较找出伪币。 Compute an Problem: Compute an, where n∈N. Naive algorithm: Θ(n). Divide-and-conquer algorithm: an= an/2?an/2 if n is even; an =a(n–1)/2?a(n–1)/2?a if n is odd. Complexity T(n)=T(n/2)+Θ(1) Master方法, a=1 b=2 Case 2: logba=0,k=0 T(n)=Θ(lgn) 例14-2 [金块问题] 问题 有若干金块试用一台天平找出其中最轻和最重的金块. 等价于n个数中找出最大和最小的数. 直接求解1: 先找出最大值,然后在剩下的n-1个数中再找出最小值. 需2n-3次比较. 例14-2 直接求解2:最大最小值同时进行查找 例14-2 分治法求解 例14-2 (解续) 设c(n)为使用分治法所需要的比较次数,假设n=2k则有: c(n)=1 ,n = 2 ; c(n)=2c(n/2)+2, n ≥ 2 . 复杂性分析 Master方法给出c(n)=Θ(n). 迭代展开可得:c(n)= (3n/2)-2。 程序14-1 找出最小值和最大值的非递归程序 程序14-1 找出最小值和最大值的非递归程序 程序14-1 找出最小值和最大值的非递归程序 算法14.1分析 当n为奇数时,n=2m+1,比较m对相邻元素, 比较次数为3*m=3*(n-1)/2 =3n/2-3/2=[3n/2]-1/2-3/2 =[3n/2]-2 [ ]表示向上取整. 当n为偶数时,n=2m,比较m-1对相邻元素 比较次数为1+3*(m-1)=1+3*(n-2)/2 =1+3n/2-3 =[3n/2]-2 该算法所用比较次数最少 例14-3 [矩阵乘法] 两个n×n 阶的矩阵A与B的乘积是另一个n×n 阶矩阵C,C 的元素为: C(i, j)=∑kA(i, k)B(k, j) 矩阵乘法-分治法 2×2分块矩阵乘法 矩阵乘法-分治法 基本观点: n×n matrix = 2×2 matrix of (n/2)×(n/2) submatrices 算法 基本观点 合并分块矩阵以减少乘法次数 2×2 矩阵相乘可用7次乘法.所以仅需7次递归调用. T (n) =7T (n/2)+Θ(n2) Master 方法: logba=log27, case 1:ε= log27-2.5 T (n)= Θ(nlog7) =Θ(n2.81) 例14-3 Strassen算法 Strassen Algorithm void matmul(int *A, int *B, int *R, int n) { if (n == 1) { (*R) += (*A) * (*B); } else { matmul(A, B, R, n/4); matmul(A, B+(n/4), R+(n/4), n/4); matmul(A+2*(n/4), B, R+2*(n/4), n/4); matmul(A+2*(n/4), B+(n/4), R+3*(n/4), n/4); matmul(A+(n/4), B+2*(n/4), R, n/4); matmul(A+(n/4), B+3*(n/4), R+(n/4),

文档评论(0)

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

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

1亿VIP精品文档

相关文档