分治算法(Divide & Conquer Algorithm)

分治算法(Divide & Conquer Algorithm)

ID:20884927

大小:507.00 KB

页数:69页

时间:2018-10-16

分治算法(Divide & Conquer Algorithm)_第1页
分治算法(Divide & Conquer Algorithm)_第2页
分治算法(Divide & Conquer Algorithm)_第3页
分治算法(Divide & Conquer Algorithm)_第4页
分治算法(Divide & Conquer Algorithm)_第5页
资源描述:

《分治算法(Divide & Conquer Algorithm)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、分治算法(Divide&ConquerAlgorithm)宫秀军天津大学计算机科学与技术学院gongxj@tju.edu.cn提纲分治法基本原理应用归并排序快速排序选择问题复杂性的下限最大最小问题的下限排序算法的下限14.1分治法思想分治法设计算法的思想将问题分成(divide)多个子问题;递归地(conquer)解决每个子问题;将子问题的解合并(combine)成原问题的解。分治法常常得到递归算法Merge-Sort,QuickSortDiscreteFouriertransform(FFT).算法复杂性分析MastermethodSubstitutionmetho

2、d例14-1[找出伪币]现有16个硬币,其中有一个是伪币,并且伪币重量比真币轻。试用一台天平找出这枚伪币。两两比较,最坏情形需8次比较找出伪币。分治法仅需4次比较找出伪币。ComputeanProblem:Computean,wheren∈N.Naivealgorithm:Θ(n).Divide-and-conqueralgorithm:an=an/2∙an/2ifniseven;an=a(n–1)/2⋅a(n–1)/2⋅aifnisodd.ComplexityT(n)=T(n/2)+Θ(1)Master方法,a=1b=2Case2:logba=0,k=0T(n)=Θ

3、(lgn)例14-2[金块问题]问题有若干金块试用一台天平找出其中最轻和最重的金块.等价于n个数中找出最大和最小的数.直接求解1:先找出最大值,然后在剩下的n-1个数中再找出最小值.需2n-3次比较.例14-2直接求解2:最大最小值同时进行查找funcminmax(Ta[],n,T&max,T&min){min←a[0];max←a[0];Fori←1ton-1doifa[i]maxmax←a[i]}当输入数组为顺序时,算法要做2(n-1)次比较当输入数组为逆序时,算法要做n-1次比较例14-2分治法求解intminmax

4、-dc(TA[0,n-1],T&max,T&min)ifn<1max←min←a[0],return;elsem←n/2minmax-dc(A[0,m-1],max1,min1),minmax-dc(A[m,n-1],max2,min2),max←max(max1,max2),min←min(min1,min2),return.例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找出

5、最小值和最大值的非递归程序程序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

6、)template;voidMatrixMulti(T**A,T**B,T**C,intn){for(inti=0;i

7、×2matrixof(n/2)×(n/2)submatrices8multsof(n/2)×(n/2)submatrices4addsof(n/2)×(n/2)submatricesrecursive复杂性分析T(n)=8T(n/2)+Θ(n2)(Θ(n2)-4个(n/2)阶矩阵加法的计算时间)nloga=nlog8=n3⇒CASE1⇒T(n)=Θ(n3)从分治法没得到好处!算法基本观点合并分块矩阵以减少乘法次数2×2矩阵相乘可用7次乘法.所以仅需7次递归调用.T(n)=7T(n/2)+Θ(n2)Master方法:logba=log27,case1:

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。