信息学奥林匹克竞赛辅导课件-归纳策略.ppt
《信息学奥林匹克竞赛辅导课件-归纳策略.ppt》由会员分享,可在线阅读,更多相关《信息学奥林匹克竞赛辅导课件-归纳策略.ppt(121页珍藏版)》请在三一办公上搜索。
1、第三节、归纳策略,如果说对应策略的核心是举一反三、触类旁通地对已经解决的类似问题和有关事实作联想,外推出事物间联系的话,那么归纳策略则是通过列举试题本身的特殊情况,经过深入分析,最后概括出事物内在的一般规律,并得到一种高度抽象的解题模型。,归纳法要比搜索的方法(例如以后将讲解的枚举法、回溯法等)更能反映问题的本质。但是并不是所有实际问题都可以总结归纳出一般规律,即便是可以,归纳也不是一件容易的事情,尤其要归纳出一个数学模型更为困难。而且归纳过程通常没有一定的规则可供遵循。从本质上讲,归纳就是通过观察一些简单而特殊的情况,最后总结出有用的结论或解决问题的有效途径。,通常,归纳的过程分四个步骤:,
2、(1)细心的观察(2)丰富的联想(3)继续尝试(4)总结归纳出结论,归纳是一种抽象,即从特殊现象中找出一般关系。但在归纳过程中不可能列举所有情况,因而最后得出的结论还只是一种猜测(即归纳假设)。通过精心观察而提出的归纳假设得不到证实或最后证明是错的,也是常有的事。因此要尽可能对归纳假设加以严格的证明,证明的方法通常使用数学归纳法。即便找不到证明方法,也必须尽可能多地提出那些容易出错和疏漏的边界情况加以验证,使归纳出的结论和解决问题的途径经得起各种测试数据的检验。,问题经过分析归纳后,一般产生四种结果:,(1)递推式(2)递归式(3)制定目标(4)贪心方案,当然,经过分析直接概括出高度抽象的数学
3、公式亦是一种归纳过程、一种解题的途径。但是怎样进行这种归纳,这个问题太宽泛,与其说它是计算机算法的策略,还不如说它是一种数学知识和数学能力,取决于解题者本身的数学功底。我们已经在“对应策略”一节中,对如何将试题与数学公式对应的问题作了一些讨论,这里不再赘述。,一、递推法,瞬息变幻的世界,每一件事物都在随时间的流逝发生着微妙的变化。而在这纷繁的变幻中,许多现象的变化是有规律的,这种规律往往呈现出前因和后果的关系。即某种现象的变化结果与紧靠它前面变化的一个或一些结果紧密关联。所谓“三岁看老”,说的就是这个道理。这一道理也正体现了递推的思想。递推关系几乎在所有的数学分支中都有重要作用,在联赛中更因其
4、简捷高效而显示出独特的魅力。,1.递推关系的定义和求解方法,有一类试题,每相邻两项数之间的变化有一定的规律性,我们可将这种规律归纳成如下简捷的递推关系式:fn=g(fn-1)或者fn-1=g(fn)这样就在数的序列中,建立起后项和前项之间的关系。然后从初始条件(或最终结果)入手,一步步地按递推关系式递推,直至求出最终结果(或初始值)。很多程序就是按这样的方法逐步求解的。如果对一个试题,我们要是能找到后一项数与前一项数的关系并清楚其起始条件(或最终结果),问题就比较容易解决,让计算机一步步计算就是了。让高速的计算机从事这种重复运算,可真正起到“物尽其用”的效果。,顺推法就是由边界条件出发,通过递
5、推关系式推出后项值,再由后项值按递推关系式推出再后项值,依次递推,直到从问题初始陈述向前推进到这个问题的解为止。倒推法就是在不知初始值的情况下,经推理而获知问题的最终解或目标,再倒过来,推知它的初始条件。因为这种问题的运算过程是一一映射的,故可分析其倒推公式。然后再从最终解或目标出发,采用倒推手段,一步步地倒推到这个问题的初始陈述。,递推分倒推法和顺推法两种形式:,一般分析思路:,if(求解初始条件f1)/倒推 由题意(或递推关系)确定最终结果fn;求出倒推关系式fi-1=g(fi);for(i=n;i=2;i-)fi-1=g(fi);/从最终结果fn进行倒推 推出倒推结果f1;else/顺推
6、 由题意(或递推关系)确定初始值f1(边界条件);求出顺推关系式 fi=g(fi-1);for(i=2;i=n;i+)fi=g(fi-1);/从边界条件f1出发进行顺推 推出顺推结果fn;,由此可见,递推算法的时间复杂度一般为W(n)。我们之所以将递推法划入归纳策略,是因为初始条件(或最终结果)除试题己明确给定外,都是通过对问题的整理与化简而确定的,其递推式也是对实际问题的分析与归纳而得到的,因此递推本质上属于归纳。,2递推关系的建立,递推关系中存在着三大基本问题:如何建立递推关系,已给出的递推关系有何性质,以及如何求解递推关系。其中核心问题是如何建立递推关系。,建立递推关系的关键在于寻找第n
7、项与前面(或后面)几项的关系式,以及初始项的值(或最终结果值)。它不是一种抽象的概念,而是针对某一具体题目或一类题目而言的。下面,我们对五种典型的递推关系的建立作比较深入具体的讨论。递推程序一般是将递推公式“直译”成一重循环,模式性很强。,(1)Fibonacci 数列,Fibonacci数列的代表问题是由意大利著名数学家 Fibonacci于1202年提出的“兔子繁殖问题”(又称“Fibonacci问题”):有雌雄一对兔子,假定过两个月便可繁殖雌雄各一的一对小兔子。问过n个月后共有多少对兔子?分析:设满X月共有兔子Fx对,其中当月新生的兔子数目为Nx对。第x-1个月留下的兔子数设为Ox 对。
8、则:,Fx=Nx+Ox 而Ox=Fx-1 Nx=Ox-1=Fx-2(即第x-2个月的所有兔子到第x个月都有繁殖能力了)所以 Fx=Fx-1+Fx-2 边界条件:F0=0,F1=1 由上面的递推关系可依次得到:F2=F1+F0=1,F3=F2+F1=2,F4=F3+F2=3,,Fibonacci 数列常出现在比较简单的组合计数问题中,例如【例9】极值问题、【例10】取石子问题、【例13】蜜蜂爬行等问题都可以用这种方法来解决。,(2)Hanoi 塔问题,Hanoi塔由n个大小不同的圆盘和三根木柱a,b,c 组成。开始时,这n个圆盘由大到小依次套在 a柱上,如图所示。,要求把a柱上n个圆盘按下述规则
9、移到c柱上:1.一次只能移一个圆盘;2.圆盘只能在三个柱上存放;3.在移动过程中,不允许大盘压小盘。问将这n个盘子从a柱移动到c柱上,总计需要移动多少个盘次?,分析:设hn为n个盘子从a柱移到c柱所需移动的盘次。显然,当n=1时,只需把a柱上的盘子直接移动到c柱就可以了,故 h1=1。当n=2时,先将a柱上面的小盘子移动到b柱上去;然后将大盘子从a柱移到c柱;最后,将 b柱上的小盘子移到c柱上,共计3个盘次,故h2=3。,以此类推,当a柱上有n(n=2)个盘子时,总是先借助c柱把上面的n-1个盘子移动到b柱上,然后把a柱最下面的盘子移动到c柱上;再借助a柱把b柱上的n-1个盘子移动到c柱上;总
10、共移动 hn=2hn-1+1 边界条件:h1=1,(3)平面分割问题,设有n条封闭曲线画在平面上,而任何两条封闭曲线恰好相交于两点,且任何三条封闭曲线不相交于同一点,问这些封闭曲线把平面分割成的区域个数。分析:设an为n条封闭曲线把平面分割成的区域个数。由图可得:a2-a1=2;a3-a2=4;a4-a3=6。,从这些式子中可以看出 an-an-1=2(n-1)当然,上面的式子只是我们通过观察4幅图后得出的结论,它的正确性尚不能保证。下面不妨让我们来试着证明一下。当平面上已有n-1条曲线将平面分割成an-1个区域后,第n条曲线每与其他曲线相交一次,就会增加一个区域,因为平面上已经有了n-1条封
11、闭曲线,且第n条曲线与己有的每一条闭曲线恰好相交于两点,不会与任两条曲线交于同一点,故平面上一共增加 2(n-1)个区域,加上已有的an-1个区域,一共有an-1+2(n-1)个区域。所以本题的递推关系是 an=an-1+2(n-1),边界条件是a1=2。,平面分割问题是竞赛中经常触及到的一类问题,由于其灵活多变,常常让选手感到棘手,下题是另一种平面分割问题,有兴趣的读者不妨自己先试着求一下其中的递推关系。,(4)Catalan 数,在一个凸n边形中,通过不相交于n边形内部的对角线,把n边形拆分成若干三角形,不同的拆分数目用 hn表之,hn即为Catalan数。例如五边形有如图所示的五种拆分方
12、案,故h5=5。求对于一个任意的凸n边形相应的hn。Catalan 数首先是由Euler在精确计算对凸n边形不同的对角三角形剖分的个数问题时得到的,它经常出现在组合计数问题中。,分析:设Cn表示凸n边形的拆分方案总数。由题目中的要求可知一个凸n边形的任意一条边都必然是一个三角形的一条边,边P1Pn也不例外,再根据“不在同一直线上的三点可以确定一个三角形”,只要在P2,P3,Pn-1,点中找一个点Pk(1kn),与P1,Pn共同构成一个三角形的三个顶点,就将n边形分成了三个不相交的部分,我们分别称之为区域、区域和区域。,其中区域必定是一个三角形,区域是一个凸k边形,区域是一个凸n-k+1边形,区
13、域的拆分方案总数是Ck,区域的拆分方案数Cn-k+1,故包含P1PkPn 的n边形的拆分方案数为 CkCn-k+1种,而Pk可以是P2,P3,Pn-1 中任一点,根据加法原理,凸n边形的三角拆分方案总数为,加法原理和乘法原理,(1)加法原理:做一件事,完成它可以有n类办法,在第一类办法中有m1种不同的方法,在第二类办法中有m2种不同的方法,在第n类办法中有mn种不同的方法,那么完成这件事共有Nm1m2mn种不同方法(2)乘法原理:做一件事,完成它需要分成n个步骤,做第一步有m1种不同的方法,做第二步有m2种不同的方法,做第n步有mn种不同的方法,那么完成这件事共有Nm1m2mn种不同的方法 要
14、做一件事,完成它若是有n类办法,是分类问题,第一类中的方法都是独立的,因此用加法原理;做一件事,需要分n个步骤,步与步之间是连续的,只有将分成的若干个互相联系的步骤,依次相继完成,这件事才算完成,因此用乘法原理,同时考虑到计算的方便,约定边界条件C2=1.Catalan 数是比较复杂的递推关系,尤其在竞赛的时候,选手很难在较短的时间里建立起正确的递推关系。当然,Catalan数类的问题也可以用搜索的方法来完成,但是,搜索的方法与利用递推关系的方法比较起来,不仅效率低,编程复杂度也陡然提高。,(5)第二类 stirling 数,苏格兰数学家斯特林(J.Stirling,1692-1770)首次发
15、现这些数并说明了它们的重要性。n个有区别的球放到m个相同的盒子中,要求无一空盒,不同的方案数用s2(n,m)表示,称为第二类Stirling数。分析:设有n个不同的球,分别用b1,b2,bn表示。从中取出一个球bn,bn的放法有以下两种:bn独自占一个盒子,那么剩下的球只能放在 m-1 个盒子中,方案数为S2(n-1,m-1);bn与别的球共占一个盒子,那么可以事先将b1,b2,bn-1这n-1个球放入m个盒子中,然后再将球bn可以放入其中一个盒子中,方案数为mS2(n-1,m)。,综合以上两种情况,可以得出第二类stirling数定理:S2(n,m)=m S2(n-1,m)+S2(n-1,m
16、-1)(n1,m=1)边界条件为:S2(n,0)=0S2(n,1)=1,S2(n,n)=1S2(n,k)=0(kn),第二类 stirling 数在竞赛中较少出现,但在竞赛中也有一些题目与其类似,甚至更为复杂。读者不妨自己来试着建立其中的递推关系。通过上面对五种典型的递推关系建立过程的探讨,可知对待递推类的题目,要具体情况具体分析,通过找到某状态与其前面状态的联系,建立相应的递推关系。,3递推关系的应用,递推关系的应用十分广泛,其中一个非常重要的应用就是著名的杨辉三角(又称“Pascal三角”。杨辉三角是根据组合公式Cnr=Cn-1r+Cn-1r-1画出来的。很显然,组合公式、杨辉三角都属于递
17、推关系的范围。,在今天的信息学竞赛中,递推关系的应用也日趋广泛,下面就让我们从近年来的两道竞赛题中体会递推关系的应用。,【例13】蜜蜂爬行,有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行,如图所示。试求出蜜蜂从蜂房a 爬到蜂房b 的可能路线数,分析:这是一道很典型的Fibonacci数列类题目,其中的递推关系很明显。由于“蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行”的限制,决定了蜜蜂到 n 点的路径只能是从 n-1 点或 n-2 点到达的,故:fn=fn-1+fn-2(a+2=n=b),边界条件为 fa1,fa+11.,【例14】分割平面,同一平面内的n(n=2)条直线相交于同一点,则
18、这n条直线最多能将平面分割成多少个不同的区域?分析:直线的平面分割与封闭曲线的平面分割十分相似,不同之处就在于线条的曲直以及是否存在共点的直线。由于共点直线的特殊性,我们决定先考虑p条相交于一点的直线,然后再考虑剩下的n-p条直线。,首先可以直接求出p条相交于一点的直线将平面划分成的区域数为2*p个然后在平面上已经有k(k=p)条直线的基础上,加上一条直线,最多可以与k条直线相交,而每次相交都会增加一个区域,与最后一条直线相交后,由于直线可以无限延伸,还会再增加一个区域。所以 fm=fm-1+m(mP),边界条件在前面己经计算过了,是fp=2*p。虽然这题看上去有两个参数,但是在实际做题中会发
19、现,本题还是属于带一个参数的递推关系。,【例15】平面分割空间问题,一个平面把空间分成独立的两个部分,两个平面把空间分成4个部分。n个平面,最多能把整个空间分割成多少个部分。分析:立体空间的情况是陌生的,但是空间和平面的关系与平面和直线的关系是相似的。平面把空间分割成两个部分,直线也把平面分割成两个部分。于是得到了另一个与例题相类似的问题:n条直线,最多能把整个平面分割成多少个部分,如图所示。,一条直线,把平面分割为两个部分;增加一条直线,它与第一条直线相交,被分为两段射线,每一段射线又把所在的区域分成两部分;因此增加了2个部分。再增加一条直线,它与前两条直线相交,被分为三段,每一段又把所在区
20、域分成两部分;共增加了3个部分。由此类推,设前k-1条直线共把平面分为ak-1个部分。加入第k条直线,与前k-1条直线相交,被分为k段,每一段把所在区域分为两部分;总共增加了k部分;总共有ak-1+k个部分。于是得到了递推关系:,a1=2;ak=ak-1+k;即 ak=1+k*(1+k)/2于是直线分割平面的问题就解决了。既然空间和平面,与平面和直线的关系相似,那么直接把平面换成空间,把直线换成平面,就可以直接用以上的过程来证明未知的问题了吗?显然是不可以的,这种仅仅根据主观的相似性得出的机械模仿是错误的。,但是如果仔细分析一下错误的原因,将会发现问题的关键:线线相交得到的是交点,面面相交得到
21、的是直线,k个点把直线分成k+1个部分,而k条直线则不是简单的把平面分成k+1个部分。事实上,k条直线最多把平面分成ak个部分!因此两个问题真正的相似之处在于,一个为了计算直线把平面分割成几部分,先计算这条直线被点(线线交点)分割成几部分,把二维的问题化为一维的问题;另一个要计算平面把空间分割成几部分,先计算这个平面被线(面面交线)分割成几部分,把三维的问题化为二维的问题。而二维的问题是已经被解决了的,于是反过来,三维的问题也解决了。,同样是利用数学归纳法:一个平面把空间分割成两部分;设前k-1个平面共把空间分割成 bk-1个部分。加入第k个平面后,与前k-1个平面相交,共有k-1条交线。k-
22、1 条交线把这个平面分为几块呢?这买际上就是刚刚解决过的回题:k-1条直线,把平面分割成:ak-1=1+k*(1+k)/2 分别把所在原来空间一分为二,总共增加了ak-1个部分,于是平面总共把空间分割成 个部分。于是得到了递推关系:,利用这一递推关系来编写程序,不难求出 bn,而且即便对很大的 n,程序的运算速度仍然是很快的。(当然,也可以计算出 bn的通项公式:,二、递归法,设一个未知函数f,用其自身构成的已知函数g来定义:f(n)=g(n,f(n-1)n0 f(0)=a n=0为了定义f(n),必须先定义f(n-1),为了定义 f(n-1),又必须先定义f(n-2),上述这种用自身的简单情
23、况来定义自己的方式称为递归定义。一个递归定义必须是有确切含义的,也就是说,必须一步比一步简单,最后是有终结的,决不能无限循环下去。在 f(n)的定义中,当n为0时定义一个已知数a,是最简单的情况,称为递归边界,它本身不再使用递归的定义。,与递推一样,每一个递归定义都有其边界条件。但不同的是,递推是由边界条件出发,通过递推公式求f(n)的值,从边界到求解的全过程十分清楚;而递归则是从函数自身出发来达到边界条件。在通往边界条件的递归调用过程中,系统用堆栈把每次调用的中间结果保存在栈区,直至求出递归边界值f(0)=a。然后返回调用函数。返回过程中,中间结果相继出栈恢复,f(1)=g(1,a)f(2)
24、=g(2,f(1)直到 f(n)=g(n,f(n-1)描述递归定义的函数或求解递归问题的过程称为递归算法。一个递归算法,本质上是将较复杂的处理归结为简单处理,直到最简单的处理。,从实际问题中抽象递归定义和边界条件的过程是一种归纳,通过这种归纳方式能使一个蕴含递归关系且结构复杂的程序简捷精炼,增加可读性。特别是在难于找到从边界到解的全过程的情况下,如果把问题推进一步,其结果仍维持原问题的关系,则采用递归算法编程比较合适。但递归算法也有致命的缺点,其执行的效率比较低,尤其在边界条件设置不当的情况,极有可能陷入死循环或者内存溢出的窘境。,递归算法适用的一般场合为:(1)数据的定义形式按递归定义。这类
25、递归问题可直接转化为递推算法,递归边界作为递推的边界条件。(2)数据之间的关系(即数据结构)按递归定义。如树的遍历,图的搜索等。(3)有些问题本身没有明显的递归结构,但使用递归求解比其他方法更简单。如递归的分治策略。对于(2)、(3),可利用堆栈结构将其转换为非递归算法,但结构不如递归算法简单清晰,可读性较差。,编写递归程序时应注意如下几个问题:(1)问题的递归定义,即如何用自身的简单情况定义自己;(2)递归边界,即递归至哪个边界值后开始回溯;(3)参与递归运算的变量有哪些,其中哪些作为值参,哪些作为局部变量。如果有全局变量参与递归运算的话(初始值由主程序传入,受内存限制不便作为值参),回溯过
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息学 奥林匹克 竞赛 辅导 课件 归纳 策略
链接地址:https://www.31ppt.com/p-4940159.html