北大屈婉玲算法分析课件 2

北大屈婉玲算法分析课件 2

ID:34572884

大小:318.76 KB

页数:40页

时间:2019-03-08

北大屈婉玲算法分析课件 2_第1页
北大屈婉玲算法分析课件 2_第2页
北大屈婉玲算法分析课件 2_第3页
北大屈婉玲算法分析课件 2_第4页
北大屈婉玲算法分析课件 2_第5页
资源描述:

《北大屈婉玲算法分析课件 2》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第2章分治策略(DivideandConquer)212.1分治策略的基本思想2.1.1两个熟悉的例子2122.1.2分治算法的一般性描述2.2分治算法的分析技术2.3改进分治算法的途径2.3.1通过代数变换减少子问题个数2.3.2利用预处理减少递归内部的计算量2.4典型实例2.4.1快速排序算法2.4.2选择问题2.4.3n-1次多项式在全体2n次方根上的求值12.1.1两个熟悉的例子二分检索算法212.1BinarySearch(TlT,l,r,x)输入:数组T,下标从l到r;数x输出:j//如果x在T中,j为下标;否则为01.l←1;r←n2h2.wh

2、ililel≤rdo3.m←⎣(l+r)/2⎦4i4.iffT[m]=xthenreturnm//x恰好等于中位元素5.elseifT[m]>mthenr←m−16l6.elsel←m+17.return0二分归并排序MergeSort(见第1章)2时间复杂度分析二分检索最坏情况下时间复杂度W(n)满足⎧⎢n⎥⎪W(n)=W()+1⎢⎥⎨⎣2⎦⎪⎩W(1)=1可以解出W(n)=⎣logn⎦+1.二分归并排序最坏情况下时间复杂度W(n)满足⎧n⎪W(n)=2W()+n−1⎨2⎪⎩W(1)=0可以解出W(n)=nlogn−n+1.2.1.2分治算法的一般性描述分

3、治算法Divide-and-Conquer(P)1.if

4、P

5、≤cthenS(P).2.dividePintoP,P,…,P.12k3.fori=1tok4.y=Divide-and-Conquer(P)ii5.ReturnMerge(y,y,…,y)12k算法时间复杂度的递推方程⎧W(n)=W(

6、P1

7、)+W(

8、P2

9、)+...+W(

10、Pk

11、)+f(n)⎨⎩W(c)=C一般原则:子问题均匀划分、递归处理42.2分治算法的分析技术分治策略的算法分析工具:递推方程两类递推方程kf(n)=∑aif(n−i)+g(n)i=1nf(n)=af()+d(n)b求解方法

12、第一类方程:迭代法、换元法、递归树、尝试法第二类方程:迭代法、递归树、主定理5递推方程的解方程T(n)=aT(n/b)+d(n)d(n)为常数⎧logbaO(n)a≠1T(n)=⎨⎩O((glogn)a=1d(n)=cn⎧O(n)ab例2.1芯片测试条件:有n片芯片,(好芯片至少比坏芯片多1片).问题:使用最少测试次数,从中挑出1片好芯片.对芯片A与B测试,结果分析如下:A报告B报告结论B是好的A是好的A,B都好或A,B都坏B是好的A是坏的至少一片是坏的B是坏的A是好的至少一片是坏的B是坏的A

13、是坏的至少一片是坏的算法思想:两两一组测试,淘汰后芯片进入下一轮.如果测试结果是情况1,那么A、B中留1片,丢1片;如果是后三种情况,则把A和B全部丢掉.7分治算法命题2.1当n是偶数时,在上述规则下,经过一轮淘汰,剩下的好芯片比坏芯片至少多1片.证设A与B都是好芯片有i组,A与B一好一坏有j组,A与B都坏有k组,淘汰后,好芯片数i,坏芯片数k2i+2j+2k=n2i+j>2k+j⇒i>k注:当n是奇数时,用其他芯片测试轮空芯片,如果轮空芯片是好的,算法结束;否则淘汰轮空芯片.每轮淘汰后,芯片数至少减半,时间复杂度是:⎧n⎪W(n)=W()+O(n)⎨2⇒W

14、(n)=O(n)⎪⎩W(3)=18伪码描述算法2.3Test(n)1.k←n2.whilek>3do3.将芯片分成⎣k/2⎦组//如有轮空芯片,特殊处理4.fori=1to⎣k/2⎦doif2片好then,则任取1片留下el2lse2片同时丢掉5.k←剩下的芯片数6.ifk=3then任取2片芯片测试if1if1好1坏then取没测的芯片else任取1片被测芯片7.ifk=2or1then2or1then任取1片9例2.2幂幂算乘计算问题:设a是给定实数,计算an,n为自然数传统算法:Θ(n)分治法an/2×an/2n为偶数an=a(n–1)/2×a(n–1

15、)/2×an为奇数W(n)=W(n/2)+Θ(1)⇒W(n)=Θ(logn).10计算Fibonacci数Fibonacci数11235813211,1,2,3,5,8,13,21,…满足F=F+Fnn-1n-2增加F=0,得到数列0,1,1,2,3,5,8,13,21,…0通常算法:从F,F,…,根据定义陆续相加,时间为Θ(n)01定理2.1设{F}为Fibonacci数构成的数列,那么nn⎡Fn+1Fn⎤⎡11⎤⎢⎥=⎢⎥⎣FnFn−1⎦⎣10⎦⎡11⎤算法:令矩阵M=⎢⎥,用分治法计算Mn⎣10⎦时间T(n)=Θ(logn).112.3改进分治算法的途

16、径2.3.1通过代数变换减少子问题个数例232.3位

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

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

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