3递推递归的复杂性分析课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《3递推递归的复杂性分析课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 递归 复杂性 分析 课件
- 资源描述:
-
1、2022-12-20计算计算法设计与分析12.3 递推递归的复杂性分析2022-12-20计算计算法设计与分析2递归复杂性的一般形式 一般的,递归关系描述为递归方程:1 n=1 aT(n b)+D(n)n1T(n)=其中,a是子问题个数,b是递减步长,表示递减方式,D(n)是合成子问题的开销。通常,递归元的递减方式有两种:1、除法,即n/b,的形式;2、减法,即n b,的形式。分治分治递推递推2022-12-20计算计算法设计与分析3递推关系与递归 算术序列:h0,h0+q,h0+2q,h0+nq,.或为递归式:h(n)=h(n 1)+q,h(0)=h0。几何序列:h0,qh0,q2h0,qn
2、h0,.或为递归式:h(n)=qh(n1),h(0)=h0。如果递归式的递减方式是减法的话,则递归式按其递归元就形成一个递推序列。2022-12-20计算计算法设计与分析4递推递归的时间复杂性 k1 i=0=akT(1)+ai D(n ib)这里k=n/b。不失一般性令b=1,则k=n。若设D(n)为常数,则有T(n)=O(an)。若为减法,即n b,则有:T(n)=aT(n b)+D(n)=a(aT(n 2b)+D(n b)+D(n)=k1 i=0=ak+ai D(n ib)在通常的情况下递推在通常的情况下递推递归的时间复杂性为递归的时间复杂性为指数函数。指数函数。2022-12-20计算计
3、算法设计与分析5n个互相交叠的圆的区域数 在平面一般位置上有n个互相交叠的圆所形成的区域数是多少?所谓相互交叠的圆是指两个圆相交所谓相互交叠的圆是指两个圆相交在不同的两点。在不同的两点。2022-12-20计算计算法设计与分析6n个互相交叠的圆的区域数 在平面一般位置上有n个互相交叠的圆所形成的区域数是多少?令h(n)为平面上有n个互相交叠的圆所形成的区域数。h(n)=?让我们先从最简单的情况来考虑。2022-12-20计算计算法设计与分析7n个互相交叠的圆的区域数 在平面一般位置上有n个互相交叠的圆所形成的区域数是多少?令h(n)为平面上有n个互相交叠的圆所形成的区域数。显然h(0)=1。h
4、(1)=2。h(2)=4。h(3)=8。h(4)=?h(4)=142022-12-20计算计算法设计与分析8n个互相交叠的圆的区域数 在平面一般位置上有n个互相交叠的圆所形成的区域数是多少?令h(n)为平面上有n个互相交叠的圆所形成的区域数。h(n)=?我们仍然不知道。我们该怎么做呢?我们该怎么做呢?2022-12-20计算计算法设计与分析9n个互相交叠的圆的区域数 在平面一般位置上有n个互相交叠的圆所形成的区域数是多少?令h(n)为平面上有n个互相交叠的圆所形成的区域数。这时要考虑复杂情况与较简单情况之间关系,即复杂情况是怎样由较简单情况构成的。2022-12-20计算计算法设计与分析10n
5、个互相交叠的圆的区域数 在平面一般位置上有n个互相交叠的圆所形成的区域数是多少?假设前面n 1个圆形成h(n1)个区域。现放进第n个圆与前n1个圆交叠。让我们来考虑把这第让我们来考虑把这第n n个圆交个圆交叠上去会造成区域数发生什么叠上去会造成区域数发生什么样的变化呢?样的变化呢?2022-12-20计算计算法设计与分析11n个互相交叠的圆的区域数 在平面一般位置上有n个互相交叠的圆所形成的区域数是多少?假设前面n 1个圆形成h(n1)个区域。现放进第n个圆与前n1个圆交叠。第n个圆与前n1个圆都相交于两点,于是有2(n1)个交点。这2(n1)个点将第n个圆分成2(n1)条弧,而每条弧又将某个
6、区域一分为二,因此新增加的区域数应为2(n1)。2022-12-20计算计算法设计与分析12n个互相交叠的圆的区域数 在平面一般位置上有n个互相交叠的圆所形成的区域数是多少?令h(n)为平面上有n个互相交叠的圆所形成的区域数。于是便得到如下的递归式:h(n)=h(n1)+2(n1)。这个递推递归式有一个简单的通项公式:h(n)=h(n1)+2(n1)。h(n2)+2(n2)+2(n1)h(n3)+2(n3)+2(n2)+2(n1)h(1)+2(1)+2(2)+2(n1)2+2n(n1)/2=n2 n+2。注意此公注意此公式对式对h(0)不成立!不成立!n 0。2022-12-20计算计算法设计
7、与分析13棋盘覆盖问题 一个2k2k特殊棋盘是其中含有一个特殊方格的棋盘,左下图为k=2的一个特殊棋盘。现在任给定一个2k2k特殊棋盘,要用右下图所示的L型骨牌来无重叠的覆盖它。111222333444555在2k2k的棋盘覆盖中要用到(4k1)/3个L型骨牌。2022-12-20计算计算法设计与分析14棋盘覆盖问题 让我们先来考虑最简单的情况:什么是最简单的情况?什么是最简单的情况?最简单情况是k=0。这时棋盘有2020=1个格子,即只有一个特殊格子。这时棋盘已被完全覆盖,无须再做什么了。下面我们来考虑复杂情况是怎样由较简单情况构成的。2022-12-20计算计算法设计与分析15棋盘覆盖问题
8、的分析 当k0时,将2k2k棋盘分割成4个2k12k1的子棋盘,如右下图所示:2k12k12k12k12k12k12k12k1 特殊方格必定位于4个子棋盘之一中。而这四个子棋盘却不一致。递归求解是将问题归结到较小规模的同一问题,这就需要将三个正常子棋盘也转化成特殊棋盘。2022-12-20计算计算法设计与分析16棋盘覆盖问题的分析 当k0时,将2k2k棋盘分割成4个2k12k1的子棋盘,如右下图所示:2k12k12k12k12k12k12k12k1 特殊方格必定位于4个子棋盘之一中。为此,可用一个L型骨牌覆盖三个正常子棋盘的会合处,如左图所示。这次覆盖后四个子棋盘都是特殊棋盘了。2022-12
9、-20计算计算法设计与分析17棋盘覆盖的算法 棋盘覆盖(参数表)如果是单个格子,则返回;将棋盘划分成尺寸为一半的子棋盘;判断特殊方格在哪个子棋盘中,再用相应L型骨牌覆盖相应结合部,即不含特殊方格的部分在结合部的三个方格;并记下它们的位置,作为各部分的特殊方格;依次对左上角、右上角、右下角和左下角四个子棋盘进行棋盘覆盖;2022-12-20计算计算法设计与分析18棋盘覆盖算法中的参数 算法的形参表中需要的参数有:递归元:棋盘尺寸为2n。每轮递归时将n减 1,则棋盘尺寸减半;当n为0时递归终止。棋盘位置:棋盘左上角方格的行列号tr和tc。特殊方格位置:特殊方格的行列号dr和dc。参数表中应有哪些参
10、数呢?参数表中应有哪些参数呢?递归元定义为int n 棋盘位置定义为int tr,tc。特殊方格位置定义为int dr,dc。2022-12-20计算计算法设计与分析19棋盘覆盖算法中其它变量 除了形参表中的那些参数外,棋盘覆盖程序中还需要如下的变量:表示棋盘的变量。表示L型骨牌覆盖顺序的变量。棋盘尺寸的变量。各子棋盘在结合部的方格位置。各子棋盘的特殊方格的位置。除形参外,算法中还应除形参外,算法中还应有哪些变量呢?有哪些变量呢?内部变量全局变量为什么要设这为什么要设这个变量呢?个变量呢?2022-12-20计算计算法设计与分析20棋盘覆盖算法中其它变量 棋盘定义为int Board2n2n,
11、初值为全0。覆盖顺序变量定义为int tile,其初值为0。棋盘尺寸的变量定义为int s,其初值为2n。不设此变量也可以。但因不设此变量也可以。但因s=2n,则每轮递,则每轮递归中都要做求归中都要做求2n的幂运算。设变量的幂运算。设变量s后,只后,只需初始时计算一次需初始时计算一次s=2n,以后只要做,以后只要做s=s/2即可。这样降低了递归中的运算强度。即可。这样降低了递归中的运算强度。2022-12-20计算计算法设计与分析21棋盘覆盖算法中其它变量 棋盘定义为int Board2n2n,初值为全0。覆盖顺序变量定义为int tile,其初值为0。棋盘尺寸的变量定义为int s,其初值为
12、2n。0132四个子棋盘的排序为四个子棋盘的排序为 结合部的方格位置定义为int jr4,jc4。各子棋盘的特殊方格的位置定义为int Sr4,Sc4。2022-12-20计算计算法设计与分析22棋盘覆盖算法中其它变量 棋盘定义为int Board2n2n,初值为全0。覆盖顺序变量定义为int tile,其初值为0。棋盘尺寸的变量定义为int s。结合部的方格位置定义为int jr4,jc4。各子棋盘的特殊方格的位置定义为int Sr4,Sc4。将棋盘覆盖程序取名为CoverBoard;2022-12-20计算计算法设计与分析23棋盘覆盖的算法 voice CoverBoard(n,tr,tc
13、,dr,dc)if(n=0)return;n=n 1;s=s/2;tile+;Coverjoin;CoverBoard(n,tr,tc,sr0,sc0);CoverBoard(n,tr+s,tc,sr1,sc1);CoverBoard(n,tr+s,tc+s,sr2,sc2)CoverBoard(n,tr,tc+s,sr3,sc3)若只有一个若只有一个格子,则终格子,则终止递归。止递归。注意递归元的递减是注意递归元的递减是在这里做的。在这里做的。s s是减半是减半后的子棋盘尺寸。后的子棋盘尺寸。在对结合部覆盖之前在对结合部覆盖之前将覆盖序号将覆盖序号tiletile加一。加一。2022-12-
14、20计算计算法设计与分析24棋盘覆盖的算法 voice CoverBoard(n,tr,tc,dr,dc)if(n=0)return();n=n 1;s=s/2;tile+;Coverjoin;CoverBoard(n,tr,tc,sr0,sc0);CoverBoard(n,tr+s,tc,sr1,sc1);CoverBoard(n,tr+s,tc+s,sr2,sc2)CoverBoard(n,tr,tc+s,sr3,sc3)Coverjoin完成以下功能:完成以下功能:1、计算结合部的方格的、计算结合部的方格的位置;位置;2、判断特殊方格位置;、判断特殊方格位置;3、覆盖子棋盘结合部并、覆盖
15、子棋盘结合部并将四个特殊方格的位置写将四个特殊方格的位置写入入sr 和和sc。依次对四个子棋依次对四个子棋盘进行覆盖。盘进行覆盖。覆盖左上角覆盖左上角的子棋盘。的子棋盘。覆盖右上角覆盖右上角的子棋盘。的子棋盘。覆盖右下角覆盖右下角的子棋盘。的子棋盘。覆盖左下角覆盖左下角的子棋盘。的子棋盘。2022-12-20计算计算法设计与分析25棋盘覆盖的算法 voice CoverBoard(n,tr,tc,dr,dc)if(n=0)return();n=n 1;s=s/2;tile+;Coverjoin;CoverBoard(n,tr,tc,sr0,sc0);CoverBoard(n,tr+s,tc,s
16、r1,sc1);CoverBoard(n,tr+s,tc+s,sr2,sc2)CoverBoard(n,tr,tc+s,sr3,sc3)依次对四个子棋依次对四个子棋盘进行覆盖。盘进行覆盖。覆盖左上角覆盖左上角的的0号子棋盘。号子棋盘。覆盖右上角覆盖右上角的的1 1号子棋盘。号子棋盘。覆盖右下角覆盖右下角的的2 2号子棋盘。号子棋盘。覆盖左下角覆盖左下角的的3 3号子棋盘。号子棋盘。2022-12-20计算计算法设计与分析26Coverjoin的实现 计算结合部方格位置:判断特殊方格(dr,dc)落在那个子棋盘:覆盖结合部并确定各子棋盘特殊方格位置。2022-12-20计算计算法设计与分析27C
17、overjoin的实现 计算结合部方格位置:tr是0区和1区的首行,tc是0区和3区的首列;tr+s是3区和2区的首行;tc+s是1区和2区的首列0312trtcss2022-12-20计算计算法设计与分析28Coverjoin的实现 计算结合部方格位置:0312trtcss jr0=tr+s1;jc0=tc+s1;jr1=tr+s1;jc1=tc+s;jr2=tr+s;jc2=tc+s;jr3=tr+s;jc3=tc+s1;jr0=tr+s1;jc0=tc+s1jr1=tr+s1;jc1=tc+sjr2=tr+s;jc2=tc+sjr3=tr+s;jc3=tc+s12022-12-20计算计
18、算法设计与分析29Coverjoin的实现 计算结合部方格位置:判断特殊方格(dr,dc)落在那个子棋盘:我们可以依据结合部方格的行号和列号来判断特殊方格落在哪个子棋盘中。0132trtcss jr0=tr+s1;jc0=tc+s1;jr1=tr+s;jc1=tc+s1;jr2=tr+s;jc2=tc+s;jr3=tr+s1;jc3=tc+s;2022-12-20计算计算法设计与分析30Coverjoin的实现 计算结合部方格位置:判断特殊方格(dr,dc)落在那个子棋盘:覆盖结合部并确定各子棋盘特殊方格位置。if(dr=jr0&dc=jc0)r=0 else if(dr=jc1)r=1 el
19、se if(dr=jr2&dc=jc2)r=2 else if(dr=jr3&dc=jc3)r=3;jr0=tr+s1;jc0=tc+s1;jr1=tr+s;jc1=tc+s1;jr2=tr+s;jc2=tc+s;jr3=tr+s1;jc3=tc+s;若特殊方格的行标若特殊方格的行标dr=jr0且列标且列标dc=jc0,则特殊,则特殊方格位于在方格位于在0号子棋盘中。号子棋盘中。其余类似。其余类似。r指明了这点。指明了这点。2022-12-20计算计算法设计与分析31Coverjoin的实现 覆盖结合部并确定各子棋盘特殊方格位置:if(r=0)sr0=dr;sc0=dc;Boardjrkjck
20、=tile;srk=jrk;sck=jck;k=1,2,3 else if(r=1)sr1=dr;sc1=dc;Boardjrkjck=tile;srk=jrk;sck=jck;k=0,2,3 else if(r=2)sr2=dr;sc2=dc;Boardjrkjck=tile;srk=jrk;sck=jck;k=0,1,3 else if(r=3)sr1=dr;sc1=dc;Boardjrkjck=tile;srk=jrk;sck=jck;k=0,1,2;注意:此处由于幻灯片篇幅的原因,简写注意:此处由于幻灯片篇幅的原因,简写成这样,实际表示对于成这样,实际表示对于k=1,2,3,执行,执行
展开阅读全文