算法分析与设计分治法ppt课件.ppt
《算法分析与设计分治法ppt课件.ppt》由会员分享,可在线阅读,更多相关《算法分析与设计分治法ppt课件.ppt(63页珍藏版)》请在三一办公上搜索。
1、算法分析与设计,第二章 分治法,第二章 分治法,什么是分治法?二分检索找最大和最小元素归并分类快速分类选择问题斯特拉森矩阵乘法,2.1 分治法的一般方法,问题(N个输入),分治策略DANDC的抽象化控制,Procedure DANDC(p,q)global n,A(1:n);integer m,p,q;/1pqn/if SMALL(p,q)then return(G(p,q)else mDIVIDE(p,q)/pmq/return(COMBINE(DANDC(p,m),DANDC(m+1,q)endifEnd DANDC,分治策略DANDC的计算时间,倘若所分成的两个子问题的输入规模大致相等,
2、则分治策略DANDC的计算时间可表示为:T(n)=,g(n)n足够小,2T(n/2)+f(n)否则,说明:T(n)是输入规模为n的分治策略的计算时间 g(n)是对足够小的输入规模能直接计算出答案的时间 f(n)是COMBINE解合成原问题的计算时间,2.2 二分检索,问题描述已知一个按非降次序排列的元素表a1,a2,an,判定某个给定元素x是否在该表中出现,若是,则找出该元素在表中的位置,并置于j,否则,置j为0。一般解决方法(从头到尾查找一遍),x,成功和不成功的计算时间都是n,二分检索原理,将问题表示为:I=(n,a1,an,x)选取一个下标k,可得到三个子问题:I1=(k-1,a1,ak
3、-1,x)I2=(1,ak,x)I3=(n-k,ak+1,an,x)如果对所求解的问题(或子问题)所选的下标k都是中间元素的下标,k=(n+1)/2,则由此产生的算法就是二分检索算法。,二分检索算法,Procedure BINSRCH(A,n,x,j)integer low,high,mid,j,n;low1;highn if(n0)while(lowhigh)do mid(low+high)/2/*取中间值*/case xAmid:lowmid+1/*寻找后一半*/else:jmid;return/*检索成功*/endcase j0/*检索失败*/End BINSRCH,二分检索算法实例,假
4、设在数组A(1:9)中顺序放了以下9个元素:-15,-6,0,7,9,23,54,82,101要求检索的x分别为:101,-14,82,X=101Lowhighmid195697898999OK,X=-14Lowhighmid195142111 2 1NO,X=82Lowhighmid195697898OK,二分检索算法正确性的证明,用五个特性判断是否是一个算法根据算法的描述,满足五个特性的才是算法证明算法是否正确如果n=0,则不进入循环,j=0,算法终止否则就会进入循环与数组A中的元素进行比较如果x=Amid,则j=mid,检索成功,算法终止否则,若xA(mid),则缩小到A(mid+1)和
5、A(n)之间检索按上述方式缩小检索区总可以在有限步内使lowhigh如果出现这种情况,说明x不在A中,j=0,算法终止,二分检索算法所需的空间和时间,所需空间用n个位置存放数组A,还有low,high,mid,x,j五个变量需要存储,共需空间n+5计算时间对于计算时间,需要分别考虑以下几种情况:成功检索的最好情况和不成功检索的最好情况成功检索的平均情况和不成功检索的平均情况成功检索的最坏情况和不成功检索的最坏情况,成功检索最好情况和不成功检索最好情况,成功的检索共有n种不成功的检索共有n+1种,二元比较树,5,7,2,1,3,4,6,8,9,内结点,表示一次元素的比较,存放已个mid值,外结点
6、,表示不成功检索的一种情况,9,-6,-15,0,54,7,23,82,101,二分检索的时间复杂度,定理2.2:若n在区域2k-1,2k)中,则对于一次成功的检索,二分检索至多作k次比较,至少作1次比较;而对于一次不成功的检索,或者作k-1次比较或者作k次比较。,证明 考察以n个结点描述BINSRCH执行过程的二元比较树,所有成功检索都在内部结点处结束,而所有不成功检索都在外部结点处结束。由于n在区域2k-1,2k)中,因此,所有的内部结点在1,2,k级,而所有的外部结点在k和k+1级(根在1级)。就是说,成功检索在i级终止所需要的元素比较数是i,而不成功检索在i级外部结点终止的元素比较数是
7、i-1。,二分检索的时间复杂度,最坏情况下的成功检索计算时间(logn)最坏情况下的不成功检索计算时间(logn)最好情况下的成功检索计算时间(1)最好情况下的不成功检索计算时间(logn)每种不成功的检索时间都为(logn),成功检索的平均比较次数,由根到所有内部结点的距离之和称为内部路径长度I;由根到所有外部结点的距离之和称为外部路径长度E;E=I+2n令S(n)是成功检索的平均比较次数。找一个内部结点表示的元素所需的比较次数是由根到该结点的路径长度(即距离)加1。因此,S(n)=I/n+1到一个外部结点所需要的比较数是由根到该结点路径的长度。因此,U(n)=E/(n+1)由以上各公式可得
8、 S(n)=(1+1/n)U(n)-1由于U(n)=(logn),所以成功检索的计算时间S(n)也为(logn),二分检索在各种情况下的检索时间,以比较为基础检索的时间下界,有n个如下关系的元素:A(1)A(2)A(n),检索一给定元素X是否在A中出现,二分检索,以比较为基础检索的时间下界,定理2.3:设A(1:n)含有n(n1)个不同的元素,排序为A(1)A(2)A(n)。又设以比较为基础去判断是否xA(1:n)的任何算法在最坏情况下所需的最小比较次数是FIND(n),那么FIND(n)log(n+1)证明 若一棵二元树的所有内部结点所在的级数小于或等于级数k,则最多有2k-1个内结点。因此
9、,n 2k-1,即FIND(n)=k log(n+1)。定理表明,任何一种以比较为基础的算法,其最坏情况时间都不可能低于O(logn),也就是不可能存在其最坏情况时间比二分检索数量级还低的算法。,2.3 找最大和最小元素,问题描述:在含有n个不同元素的集合中同时找出它的最大和最小元素一般解决方法,Procedure STRAITMAXMIN(A,n,max,min)integer i,n;maxminA(1)for i2 to n do if Aimax then maxAi endif if Aimin then minAi endif End STRAITMAXMIN,If Aimax t
10、hen maxAiElse if(Aimin then minAi endifendif,算法的时间复杂度,改进前:2(n-1)改进后:最好n-1,最坏2(n-1),平均3(n-1)/2可考虑用分治策略来解决这个问题将任一实例I=(n,A(1),A(n)分成一些较小的实例来处理。,递归求取最大和最小元素,Procedure MAXMIN(i,j,fmax,fmin)integer i,j;global n,A(1:n)case:i=j:fmaxfminA(i):i=j-1:if A(i)A(j)then fmaxA(j);fminA(i)else fmaxA(i);fminA(j)endif:
11、else:mid(i+j)/2 call MAXMIN(i,mid,gmax,gmin)call MAXMIN(mid+1,j,hmax,hmin)fmaxmax(gmax,hmax)fminmin(gmin,hmin)endcaseEnd MAXMIN,只有一个或两个元素时,递归调用部分,求解答案的部分,过程MAXMIN模拟,1,9,22,13,-5,-5,22,-5,15,-8,22,-8,60,-8,60,17,60,17,47,31,一次递归调用,过程MAXMIN的时间复杂度,MAXMIN的元素比较次数T(n)=,0 n=1,1 n=2,2T(n/2)+2 n2,当n=2k(k是某个正
12、整数)时,有T(n)=3n/2-2,与直接算法的比较次数2(n-1)相比,比较次数减少了25%。,MAXMIN算法分析,由于递归的调用,MAXMIN所需要的存储空间较多,递归调用也消耗了部分时间。元素A(i)和A(j)的比较与i和j的比较时间相差不大时,过程MAXMIN不可取。如果设过程MAXMIN的频率计数为C(n),n=2k,k是一个整数,并用i=j-1来代替i=j和i=j-1,有:,当n2时,C(n)=2C(n/2)+3=4C(n/4)+6+3=2k-1C(2)+3(1+2+22+2i+2k-2)=2k+3*2k-1-3=5n/2-3 当n较大时,比较次数会远远大于直接比较算法,结论:如
13、果数组A的元素间的比较远比整型变量的比较代价昂贵,则分治法产生效率较高的算法;反之,就得到一个效率较低的程序。,2.4 归并分类(排序),问题描述 给定一个含有n个元素(或叫关键字)的集合,把它们按一定的次序分类(如非降次序排序)一般方法(插入法)For j2 to n do 将A(j)放到已分类集合A(1:j-1)的正确位置上Repeat,插入分类算法描述,Procedure INSERTIONSORT(A,n)A(0)-for j2 to n do itemA(j);ij-1 while itemA(i)do A(i+1)A(i);ii-1 repeat A(i+1)item repeat
14、End INSERTIONSORT,数组元素的移动,插入排好序的值,可能执行0j 次(j=2,3n)最坏情况的计算时间:2+n=(n(n+1)/2)-1=(n2),最好情况(n),分治策略设计分类算法,I=(n,A(1),A(n),Procedure MERGESORT(low,high)interger low,high if lowhigh then mid(low+high)/2 call MERGESORT(low,mid)call MERGESORT(mid+1,high)call MERGE(low,mid,high)endifEnd MERGESORT,递归调用,分别对分解出来的
15、两个子问题分类,合并两个已分好类的序列,得到原问题的解,分治策略设计分类算法,合并函数MERGE的实现,数组A,已分类序列A,已分类序列B,辅助数组B,A(1),A(n/2+1),数组A,合并函数MERGE的实现思想,合并函数MERGE的算法描述,Procedure MERGE(low,mid,high)integer h,i,j,k,low,mid,high;global A(low:high);local B(low:high)hlow;ilow;jmid+1;while hmid and jhigh do if A(h)A(j)then B(i)A(h);hh+1 else B(i)A(
16、j);jj+1 endif ii+1 repeat if hmid then for kj to high do B(i)A(k);ii+1 repeat else for kh to mid do B(i)A(k);i i+1 repeat end if for klow to high do A(k)B(k)repeatEnd MERGE,处理两个已分类的序列,剩余元素的处理过程,将已分类的集合复制到A数组,归并分类算法实例,310 285 179 652 351 423 861 254 450 520,归并分类算法实例,179 254 285 310 351 423 450 520 65
17、2 861,MERGESORT调用树,1,10,6,10,1,5,1,3,4,5,6,8,9,10,8,8,9,9,10,10,5,5,4,4,3,3,1,2,6,7,1,1,2,2,7,7,6,6,表示一次调用时的low和high的值,只含单个元素的子集合,将问题不断分解成规模较小的子问题,使之更容易解决。,MERGE调用树,1,1,2,4,4,5,6,6,7,1,2,3,9,9,10,6,7,8,6,8,10,1,3,5,1,5,10,表示一次MERGE调用时的low,mid,high值,表示A(1:3)和A(4:5)中的元素归并,将处理好的子问题不断的合并,最终获得原问题的结果,归并分类
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 分析 设计 分治 ppt 课件
链接地址:https://www.31ppt.com/p-5451702.html