递推递归的复杂性分析课件.ppt
《递推递归的复杂性分析课件.ppt》由会员分享,可在线阅读,更多相关《递推递归的复杂性分析课件.ppt(65页珍藏版)》请在三一办公上搜索。
1、2023/4/1,计算计算法设计与分析,1,2.3 递推递归的复杂性分析,2023/4/1,计算计算法设计与分析,2,递归复杂性的一般形式,一般的,递归关系描述为递归方程:,其中,a是子问题个数,b是递减步长,表示递减方式,D(n)是合成子问题的开销。,通常,递归元的递减方式有两种:,1、除法,即n/b,的形式;2、减法,即n b,的形式。,分治,递推,2023/4/1,计算计算法设计与分析,3,递推关系与递归,算术序列:h0,h0+q,h0+2q,h0+nq,.或为递归式:h(n)=h(n 1)+q,h(0)=h0。,几何序列:h0,qh0,q2h0,qnh0,.或为递归式:h(n)=qh(
2、n1),h(0)=h0。,如果递归式的递减方式是减法的话,则递归式按其递归元就形成一个递推序列。,2023/4/1,计算计算法设计与分析,4,递推递归的时间复杂性,这里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)=,在通常的情况下递推递归的时间复杂性为指数函数。,2023/4/1,计算计算法设计与分析,5,n个互相交叠的圆的区域数,在平面一般位置上有n个互相交叠的圆所形成的区域数是多少?,所谓相互交叠的圆是指两个圆相交在不同的两点。,2023/
3、4/1,计算计算法设计与分析,6,n个互相交叠的圆的区域数,在平面一般位置上有n个互相交叠的圆所形成的区域数是多少?,令h(n)为平面上有n个互相交叠的圆所形成的区域数。,h(n)=?,让我们先从最简单的情况来考虑。,2023/4/1,计算计算法设计与分析,7,n个互相交叠的圆的区域数,在平面一般位置上有n个互相交叠的圆所形成的区域数是多少?,令h(n)为平面上有n个互相交叠的圆所形成的区域数。,显然h(0)=1。,h(1)=2。,h(2)=4。,h(3)=8。,h(4)=?,h(4)=14,2023/4/1,计算计算法设计与分析,8,n个互相交叠的圆的区域数,在平面一般位置上有n个互相交叠的
4、圆所形成的区域数是多少?,令h(n)为平面上有n个互相交叠的圆所形成的区域数。,h(n)=?,我们仍然不知道。我们该怎么做呢?,2023/4/1,计算计算法设计与分析,9,n个互相交叠的圆的区域数,在平面一般位置上有n个互相交叠的圆所形成的区域数是多少?,令h(n)为平面上有n个互相交叠的圆所形成的区域数。,这时要考虑复杂情况与较简单情况之间关系,即复杂情况是怎样由较简单情况构成的。,2023/4/1,计算计算法设计与分析,10,n个互相交叠的圆的区域数,在平面一般位置上有n个互相交叠的圆所形成的区域数是多少?,假设前面n 1个圆形成h(n1)个区域。,现放进第n个圆与前n1个圆交叠。,让我们
5、来考虑把这第n个圆交叠上去会造成区域数发生什么样的变化呢?,2023/4/1,计算计算法设计与分析,11,n个互相交叠的圆的区域数,在平面一般位置上有n个互相交叠的圆所形成的区域数是多少?,假设前面n 1个圆形成h(n1)个区域。,现放进第n个圆与前n1个圆交叠。,第n个圆与前n1个圆都相交于两点,于是有2(n1)个交点。这2(n1)个点将第n个圆分成2(n1)条弧,而每条弧又将某个区域一分为二,因此新增加的区域数应为2(n1)。,2023/4/1,计算计算法设计与分析,12,n个互相交叠的圆的区域数,在平面一般位置上有n个互相交叠的圆所形成的区域数是多少?,令h(n)为平面上有n个互相交叠的
6、圆所形成的区域数。,于是便得到如下的递归式: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。,2023/4/1,计算计算法设计与分析,13,棋盘覆盖问题,一个2k2k特殊棋盘是其中含有一个特殊方格的棋盘,左下图为k=2的一个特殊棋盘。,现在任给定一个2k2k特殊棋盘,要用右下图所示的L型骨牌来无重叠的覆盖它。,在2k2k的棋盘覆盖中要
7、用到(4k1)/3个L型骨牌。,2023/4/1,计算计算法设计与分析,14,棋盘覆盖问题,让我们先来考虑最简单的情况:,什么是最简单的情况?,最简单情况是k=0。这时棋盘有2020=1个格子,即只有一个特殊格子。这时棋盘已被完全覆盖,无须再做什么了。下面我们来考虑复杂情况是怎样由较简单情况构成的。,2023/4/1,计算计算法设计与分析,15,棋盘覆盖问题的分析,当k0时,将2k2k棋盘分割成4个2k12k1的子棋盘,如右下图所示:,特殊方格必定位于4个子棋盘之一中。,而这四个子棋盘却不一致。递归求解是将问题归结到较小规模的同一问题,这就需要将三个正常子棋盘也转化成特殊棋盘。,2023/4/
8、1,计算计算法设计与分析,16,棋盘覆盖问题的分析,当k0时,将2k2k棋盘分割成4个2k12k1的子棋盘,如右下图所示:,特殊方格必定位于4个子棋盘之一中。,为此,可用一个L型骨牌覆盖三个正常子棋盘的会合处,如左图所示。,这次覆盖后四个子棋盘都是特殊棋盘了。,2023/4/1,计算计算法设计与分析,17,棋盘覆盖的算法,棋盘覆盖(参数表)如果是单个格子,则返回;将棋盘划分成尺寸为一半的子棋盘;判断特殊方格在哪个子棋盘中,再用相应L型骨牌覆盖相应结合部,即不含特殊方格的部分在结合部的三个方格;并记下它们的位置,作为各部分的特殊方格;依次对左上角、右上角、右下角和左下角四个子棋盘进行棋盘覆盖;,
9、2023/4/1,计算计算法设计与分析,18,棋盘覆盖算法中的参数,算法的形参表中需要的参数有:递归元:棋盘尺寸为2n。每轮递归时将n减 1,则棋盘尺寸减半;当n为0时递归终止。棋盘位置:棋盘左上角方格的行列号tr和tc。特殊方格位置:特殊方格的行列号dr和dc。,参数表中应有哪些参数呢?,递归元定义为int n棋盘位置定义为int tr,tc。特殊方格位置定义为int dr,dc。,2023/4/1,计算计算法设计与分析,19,棋盘覆盖算法中其它变量,除了形参表中的那些参数外,棋盘覆盖程序中还需要如下的变量:表示棋盘的变量。表示L型骨牌覆盖顺序的变量。棋盘尺寸的变量。各子棋盘在结合部的方格位
10、置。各子棋盘的特殊方格的位置。,除形参外,算法中还应有哪些变量呢?,为什么要设这个变量呢?,2023/4/1,计算计算法设计与分析,20,棋盘覆盖算法中其它变量,棋盘定义为int Board2n2n,初值为全0。覆盖顺序变量定义为int tile,其初值为0。棋盘尺寸的变量定义为int s,其初值为2n。,不设此变量也可以。但因s=2n,则每轮递归中都要做求2n的幂运算。设变量s后,只需初始时计算一次s=2n,以后只要做s=s/2即可。这样降低了递归中的运算强度。,2023/4/1,计算计算法设计与分析,21,棋盘覆盖算法中其它变量,棋盘定义为int Board2n2n,初值为全0。覆盖顺序变
11、量定义为int tile,其初值为0。棋盘尺寸的变量定义为int s,其初值为2n。,四个子棋盘的排序为,结合部的方格位置定义为int jr4,jc4。各子棋盘的特殊方格的位置定义为int Sr4,Sc4。,2023/4/1,计算计算法设计与分析,22,棋盘覆盖算法中其它变量,棋盘定义为int Board2n2n,初值为全0。覆盖顺序变量定义为int tile,其初值为0。棋盘尺寸的变量定义为int s。结合部的方格位置定义为int jr4,jc4。各子棋盘的特殊方格的位置定义为int Sr4,Sc4。,将棋盘覆盖程序取名为CoverBoard;,2023/4/1,计算计算法设计与分析,23,
12、棋盘覆盖的算法,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),若只有一个格子,则终止递归。,注意递归元的递减是在这里做的。s是减半后的子棋盘尺寸。,在对结合部覆盖之前将覆盖序号tile加一。,2023/4/1,计算计算法设计与分析,24,棋盘覆盖的算法,voic
13、e 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、覆盖子棋盘结合部并将四个特殊方格的位置写入sr 和sc。,依次对四个子棋盘进行覆盖。,覆盖左上角的子棋盘。,覆盖右上角的子棋盘。,覆盖
14、右下角的子棋盘。,覆盖左下角的子棋盘。,2023/4/1,计算计算法设计与分析,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,sr1,sc1);CoverBoard(n,tr+s,tc+s,sr2,sc2)CoverBoard(n,tr,tc+s,sr3,sc3),依次对四个子棋盘进行覆盖。,覆盖左上角的0号子棋盘。,覆盖右上角的1号子棋盘。,覆盖右下角的2号子棋盘。,覆盖
15、左下角的3号子棋盘。,2023/4/1,计算计算法设计与分析,26,Coverjoin的实现,计算结合部方格位置:,判断特殊方格(dr,dc)落在那个子棋盘:,覆盖结合部并确定各子棋盘特殊方格位置。,2023/4/1,计算计算法设计与分析,27,Coverjoin的实现,计算结合部方格位置:,tr是0区和1区的首行,tc是0区和3区的首列;tr+s是3区和2区的首行;tc+s是1区和2区的首列,tr,tc,2023/4/1,计算计算法设计与分析,28,Coverjoin的实现,计算结合部方格位置:,tr,tc,jr0=tr+s1;jc0=tc+s1;jr1=tr+s1;jc1=tc+s;jr2
16、=tr+s;jc2=tc+s;jr3=tr+s;jc3=tc+s1;,jr0=tr+s1;jc0=tc+s1,jr1=tr+s1;jc1=tc+s,jr2=tr+s;jc2=tc+s,jr3=tr+s;jc3=tc+s1,2023/4/1,计算计算法设计与分析,29,Coverjoin的实现,计算结合部方格位置:,判断特殊方格(dr,dc)落在那个子棋盘:,我们可以依据结合部方格的行号和列号来判断特殊方格落在哪个子棋盘中。,tr,tc,jr0=tr+s1;jc0=tc+s1;jr1=tr+s;jc1=tc+s1;jr2=tr+s;jc2=tc+s;jr3=tr+s1;jc3=tc+s;,202
17、3/4/1,计算计算法设计与分析,30,Coverjoin的实现,计算结合部方格位置:,判断特殊方格(dr,dc)落在那个子棋盘:,覆盖结合部并确定各子棋盘特殊方格位置。,if(dr=jc1)r=1else if(dr=jr2,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指明了这点。,2023/4/1,计算计算法设计与分析,31,Coverjoin的实现,覆盖结合部并确定各子棋盘特殊方格位置:if
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 递归 复杂性 分析 课件
链接地址:https://www.31ppt.com/p-4031665.html