算法的基本工具和优化技巧幻灯片.ppt
《算法的基本工具和优化技巧幻灯片.ppt》由会员分享,可在线阅读,更多相关《算法的基本工具和优化技巧幻灯片.ppt(45页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、算法的基本工具和优化技巧第1页,共45页,编辑于2022年,星期一循环与循环与递归递归n将大量重复处理大量数据的步骤将大量重复处理大量数据的步骤抽象成循环或递归模式,设计出抽象成循环或递归模式,设计出可以针对不同规模解决问题的算可以针对不同规模解决问题的算法。法。第2页,共45页,编辑于2022年,星期一循环设计中要注意算法的效率循环设计中要注意算法的效率n循环体的特点是:循环体的特点是:“以不变应万以不变应万变变”。n所谓所谓“不变不变”是指循环体内运算是指循环体内运算的表现形式是不变的,而每次具的表现形式是不变的,而每次具体的执行内容却是不尽相同的。体的执行内容却是不尽相同的。在循环体内用
2、不变的运算表现形在循环体内用不变的运算表现形式去描述各种相似的重复运算。式去描述各种相似的重复运算。第3页,共45页,编辑于2022年,星期一【例例例例1 1 1 1】求求求求1/1!-1/3!+1/5!-1/7!+1/1!-1/3!+1/5!-1/7!+1/1!-1/3!+1/5!-1/7!+1/1!-1/3!+1/5!-1/7!+(-1-1-1-1)n+1/(2n-n+1/(2n-n+1/(2n-n+1/(2n-1)!1)!1)!1)!n n数学模型数学模型数学模型数学模型2 2 2 2:S S S Sn n n n=S=S=S=Sn-1n-1n-1n-1+A+A+A+An n n n;A
3、 A A An n n n=(-1)*A=(-1)*A=(-1)*A=(-1)*An-1 n-1 n-1 n-1*(2*n-2)*(2*n-1)*(2*n-2)*(2*n-1)*(2*n-2)*(2*n-1)*(2*n-2)*(2*n-1)main()inti,n,sign;floats,t=1;cinn;s=1;for(i=2;i=n;i+)t=(-1)*t*(2*i-2)*(2*i-1);s=s+1/t;cout“Sum=”s;第4页,共45页,编辑于2022年,星期一“自自顶顶向下向下”的的设计设计方法方法【例例2 2】编编算算法法找找出出10001000以以内内所所有有完数完数例例如如
4、,2828的的因因子子为为1 1、2 2、4 4、7 7,1414,而而28=1+2+4+7+1428=1+2+4+7+14。因因此此2828是是“完完数数”。编编算算法法找找出出10001000之之内内的的所所有有完完数数,并并按按下下面面格格式式输输出出其因子:其因子:2828第5页,共45页,编辑于2022年,星期一1)顶层算法 for(i=2;i=n;i+)判断i是否是完数;是完数则按格式输出;2)判断i是否是完数for(j=2;ji;j+)找i的因子,并累加如果累加值等于i,i是完数第6页,共45页,编辑于2022年,星期一3)进一步细化判断i是否“完数”算法s=1for(j=2;j
5、i;j+)if(i%j=0)s=s+j;if (s=i)i是“完数”;第7页,共45页,编辑于2022年,星期一算法如下:算法如下:main()int i,k,j,s;for(i=1;i=1000;i+)s=1;/*两个赋初值语句两个赋初值语句s=1 for(j=2;ji;j+)if(i%j)=0)s=s+j;if(i=s)couts 0)hanoi(n-1,a,c,b);move(a,b);hanoi(n-1,c,b,a);第18页,共45页,编辑于2022年,星期一【例例例例】任给十进制的正整数,请从低位到高位逐位输任给十进制的正整数,请从低位到高位逐位输任给十进制的正整数,请从低位到高位
6、逐位输任给十进制的正整数,请从低位到高位逐位输出各位数字。出各位数字。出各位数字。出各位数字。n n循环算法设计:循环算法设计:f1(n)f1(n)f1(n)f1(n)while(n=10)while(n=10)while(n=10)while(n=10)cout n%10;cout n%10;cout n%10;cout n%10;n=n/10;n=n/10;n=n/10;n=n/10;coutn;coutn;coutn;coutn;第19页,共45页,编辑于2022年,星期一递归算法设计:递归算法设计:1)同上,算法从低位到高位逐位求出各位数字并输出,)同上,算法从低位到高位逐位求出各位数
7、字并输出,求个位数字的算式为求个位数字的算式为n%10,下一步则是递归地,下一步则是递归地求求n/10的个位数字。的个位数字。2)当)当n10时,时,n为一位数停止递归。为一位数停止递归。递归算法如下:递归算法如下:f2(n)if(n10)coutn;elsecout=10)ai=n%10;i=i+1;n=n/10;ai=n;for(j=i;j=0;j-)coutn;第22页,共45页,编辑于2022年,星期一递归算法设计:递归算法设计:n与与f2不同,递归算法是先递归地求不同,递归算法是先递归地求n/10的个位数字,的个位数字,然后再求个位数字然后再求个位数字n的个位数字并输出。这样输出的个
8、位数字并输出。这样输出操作是在回溯时完成的。递归停止条件与操作是在回溯时完成的。递归停止条件与f2相同为相同为n10。n递归算法如下:递归算法如下:f4(n)if(n10)coutn;elsef(n/10);coutn%10;第23页,共45页,编辑于2022年,星期一例例例例4 4排列问题排列问题排列问题排列问题设计一个递归算法生成设计一个递归算法生成设计一个递归算法生成设计一个递归算法生成n n个元素个元素个元素个元素r1,r2,rnr1,r2,rn的全排列。的全排列。的全排列。的全排列。分析:分析:分析:分析:n=1n=1输出:输出:输出:输出:r1r1n=2n=2输出:输出:输出:输出
9、:r1r2r2r1r1r2r2r1n=3n=3输出:输出:输出:输出:r1r2r3r1r3r2r1r2r3r1r3r2r2r1r3r2r3r1r2r1r3r2r3r1r3r1r2r3r2r1r3r1r2r3r2r1分析分析分析分析r3r3,全部排列可以分为三类:,全部排列可以分为三类:,全部排列可以分为三类:,全部排列可以分为三类:(1 1)r1r1类:类:类:类:r1r1后跟后跟后跟后跟r2r3r2r3的全排列的全排列的全排列的全排列(2 2)r2r2类:类:类:类:r2r2后跟后跟后跟后跟r1r3r1r3的全排列的全排列的全排列的全排列(3 3)r3r3类:类:类:类:r3r3后跟后跟后跟
10、后跟r1r2r1r2的全排列的全排列的全排列的全排列将(将(将(将(1 1)中)中)中)中r1r2r1r2互换位置,得到(互换位置,得到(互换位置,得到(互换位置,得到(2 2);将();将();将();将(1 1)中)中)中)中r1r3r1r3互换互换互换互换位置,得到(位置,得到(位置,得到(位置,得到(3 3);它说明可以用循环的方式重复执行交);它说明可以用循环的方式重复执行交);它说明可以用循环的方式重复执行交);它说明可以用循环的方式重复执行交换位置,后面跟随剩余序列的所有排列,对剩余序列再使换位置,后面跟随剩余序列的所有排列,对剩余序列再使换位置,后面跟随剩余序列的所有排列,对剩
11、余序列再使换位置,后面跟随剩余序列的所有排列,对剩余序列再使用这个方法,这就是递归调用,当后跟的元素没有时就得用这个方法,这就是递归调用,当后跟的元素没有时就得用这个方法,这就是递归调用,当后跟的元素没有时就得用这个方法,这就是递归调用,当后跟的元素没有时就得到递归的边界。到递归的边界。到递归的边界。到递归的边界。第24页,共45页,编辑于2022年,星期一递归小结优点:优点:结构清晰,可读性强,而且容结构清晰,可读性强,而且容易用数学归纳法来证明算法的正确性,易用数学归纳法来证明算法的正确性,因此它为设计算法、调试程序带来很因此它为设计算法、调试程序带来很大方便。大方便。缺点:缺点:递归算法
12、的运行效率较低,无递归算法的运行效率较低,无论是耗费的计算时间还是占用的存储论是耗费的计算时间还是占用的存储空间都比非递归算法要多。空间都比非递归算法要多。第25页,共45页,编辑于2022年,星期一 由由于于递递归归算算法法的的实实现现包包括括递递归归和和回回溯溯两两步步,当当问问题题需需要要“后后进进先先出出”的的操操作作时时,还还是是用用递递归归算算法法更更有有效效。如如数数据据结结构构课课程程中中二二叉叉树树的的各各种种遍遍历历、图图的的深深度度优优先先等等算算法法都都是是如如此此。所所以以不不能能仅仅仅仅从从效效率率上上评评价两个控制重复机制的好坏。价两个控制重复机制的好坏。事实上,
13、无论把递归作为一种算法的策略,还是一事实上,无论把递归作为一种算法的策略,还是一种实现机制,对我们设计算法都有很好的帮助。种实现机制,对我们设计算法都有很好的帮助。第26页,共45页,编辑于2022年,星期一例例7 7 判断判断s s字符串是否为回文的递归函数字符串是否为回文的递归函数int ishuiwen(char*s,int n)int ishuiwen(char*s,int n)if(n=0|n=1)return 1;if(n=0|n=1)return 1;elseelse if(*s=*(s+n-1)ishuiwen(s+1,n-2);if(*s=*(s+n-1)ishuiwen(s
14、+1,n-2);else return 0;else return 0;第27页,共45页,编辑于2022年,星期一天津城市建设学院递推是计算机数值计算中的一个重要递推是计算机数值计算中的一个重要算法,可以将复杂的运算化为若干重复的算法,可以将复杂的运算化为若干重复的简单运算,充分发挥计算机长于重复处理简单运算,充分发挥计算机长于重复处理的特点,现举一例的特点,现举一例递递 推推第28页,共45页,编辑于2022年,星期一天津城市建设学院猴子吃桃。有一群猴子摘来了一批桃子,猴王规定每天只准猴子吃桃。有一群猴子摘来了一批桃子,猴王规定每天只准吃一半加一只(即第二天吃剩下的一半加一只,以此类推),
15、吃一半加一只(即第二天吃剩下的一半加一只,以此类推),第九天正好吃完,问猴子们摘来了多少桃子?第九天正好吃完,问猴子们摘来了多少桃子?a9=2a9=2a8=(a9+1)*2a8=(a9+1)*2第29页,共45页,编辑于2022年,星期一天津城市建设学院作业:作业:1 1、运动会开了、运动会开了N N天,一共发出金牌天,一共发出金牌M M枚。第一天发金枚。第一天发金牌牌1 1枚加剩下的七分之一枚,第二天发金牌枚加剩下的七分之一枚,第二天发金牌2 2枚加剩下枚加剩下的七分之一枚,第的七分之一枚,第3 3天发金牌天发金牌3 3枚加剩下的七分之一枚,枚加剩下的七分之一枚,以后每天都照此办理。到了第以
16、后每天都照此办理。到了第N N天刚好还有金牌天刚好还有金牌N N枚,枚,到此金牌全部发完。编程求到此金牌全部发完。编程求N N和和M M。第30页,共45页,编辑于2022年,星期一天津城市建设学院作业:作业:2 2、国王分财产。某国王临终前给儿子们分财产。他把、国王分财产。某国王临终前给儿子们分财产。他把财产分为若干份,然后给第一个儿子一份,再加上剩余财财产分为若干份,然后给第一个儿子一份,再加上剩余财产的产的1/101/10;给第二个儿子两份,再加上剩余财产的;给第二个儿子两份,再加上剩余财产的1/101/10;给第;给第i i个儿子个儿子i i份,再加上剩余财产的份,再加上剩余财产的1/
17、101/10。每个儿子都。每个儿子都窃窃自喜。以为得到了父王的偏爱,孰不知国王是窃窃自喜。以为得到了父王的偏爱,孰不知国王是“一一碗水端平碗水端平”的。请用程序回答,老国王共有几个儿子?的。请用程序回答,老国王共有几个儿子?财产共分成了多少份?财产共分成了多少份?第31页,共45页,编辑于2022年,星期一天津城市建设学院作业:作业:3 3、出售金鱼。、出售金鱼。第一次卖出全部金鱼的一半加二分之一条金鱼;第一次卖出全部金鱼的一半加二分之一条金鱼;第二次卖出乘余金鱼的三分之一加三分之一条金鱼;第二次卖出乘余金鱼的三分之一加三分之一条金鱼;第三次卖出剩余金鱼的四分之一加四分之一条金鱼;第三次卖出剩
18、余金鱼的四分之一加四分之一条金鱼;第四次卖出剩余金鱼的五分之一加五分之一条金鱼;第四次卖出剩余金鱼的五分之一加五分之一条金鱼;现在还剩下现在还剩下1111条金鱼,在出售金鱼时不能把金鱼切开或者有任条金鱼,在出售金鱼时不能把金鱼切开或者有任何破损的。问这鱼缸里原有多少条金鱼?何破损的。问这鱼缸里原有多少条金鱼?第32页,共45页,编辑于2022年,星期一天津城市建设学院作业:作业:4 4、某路公共汽车,总共有八站,从一号站发轩时车上已、某路公共汽车,总共有八站,从一号站发轩时车上已有有n n位乘客,到了第二站先下一半乘客,再上来了六位乘位乘客,到了第二站先下一半乘客,再上来了六位乘客;到了第三站
19、也先下一半乘客,再上来了五位乘客,客;到了第三站也先下一半乘客,再上来了五位乘客,以后每到一站都先下车上已有的一半乘客,再上来了乘以后每到一站都先下车上已有的一半乘客,再上来了乘客比前一站少一个客比前一站少一个,到了终点站车上还有乘客六人,问,到了终点站车上还有乘客六人,问发车时车上的乘客有多少?发车时车上的乘客有多少?第33页,共45页,编辑于2022年,星期一天津城市建设学院作业:作业:5 5、小华读书。第一天读了全书的一半加二页,第二天读了剩、小华读书。第一天读了全书的一半加二页,第二天读了剩下的一半加二页,以后天天如此下的一半加二页,以后天天如此,第六天读完了最后的,第六天读完了最后的
20、三页,问全书有多少钱页?三页,问全书有多少钱页?第34页,共45页,编辑于2022年,星期一天津城市建设学院作业:作业:6 6、日本著名数学游戏专家中村义作教授提出这样一个问题:日本著名数学游戏专家中村义作教授提出这样一个问题:父亲将父亲将2520个桔子分给六个儿子。分完个桔子分给六个儿子。分完后父亲说:后父亲说:“老老大将分给你的桔子的大将分给你的桔子的1/8给老二;老二拿到后连同原先的给老二;老二拿到后连同原先的桔子分桔子分1/7给老三;老三拿到后连同原先的桔子分给老三;老三拿到后连同原先的桔子分1/6给老四;给老四;老四拿到后连同原先的桔子分老四拿到后连同原先的桔子分1/5给老五;老五拿
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 基本 工具 优化 技巧 幻灯片
限制150内