《算法策略》PPT课件.ppt
《《算法策略》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《算法策略》PPT课件.ppt(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第四章第四章基本的算法策略基本的算法策略4.1 4.1 迭代算法迭代算法 4.1.1 4.1.1 递推法递推法 4.1.2 4.1.2 倒推法倒推法 4.1.3 4.1.3 迭代法解方程迭代法解方程4.1迭代算法迭代算法迭代法迭代法(Iteration)也称)也称“辗转法辗转法”,是一种不断用变量的旧,是一种不断用变量的旧值递推出新值的解决问题的方法。迭代算法一般用于数值值递推出新值的解决问题的方法。迭代算法一般用于数值计算。迭代法应该是我们早已熟悉的算法策略,程序设计计算。迭代法应该是我们早已熟悉的算法策略,程序设计语言课程中所学的累加、累乘都是迭代算法策略的基础应语言课程中所学的累加、累乘
2、都是迭代算法策略的基础应用。用。利用迭代算法策略求解问题,设计工作利用迭代算法策略求解问题,设计工作主要有三步主要有三步:1)确定迭代模型)确定迭代模型2)建立迭代关系式)建立迭代关系式3)对迭代过程进行控制)对迭代过程进行控制411 递推递推法【例【例1】兔子繁殖问题】兔子繁殖问题问问题题描描述述:一一对对兔兔子子从从出出生生后后第第三三个个月月开开始始,每每月月生生一一对对小小兔兔子子。小小兔兔子子到到第第三三个个月月又又开开始始生生下下一一代代小小兔兔子子。假假若若兔兔子子只只生生不不死死,一一月月份份抱抱来来一一对对刚刚出出生生的的小小兔兔子子,问问一一年年中中每每个个月月各有多少只兔
3、子。各有多少只兔子。问问题题分分析析:因因一一对对兔兔子子从从出出生生后后第第三三个个月月开开始始每每月月生生一一对对小小兔兔子子,则则每每月月新新下下小小兔兔子子的的对对儿儿数数(用用斜斜体体数数字字表表示示)显显然然由由前前两个月的小兔子的对儿数决定。则繁殖过程如下:两个月的小兔子的对儿数决定。则繁殖过程如下:一月一月二月二月三月三月四月四月五月五月六月六月111+1=22+1=33+2=55+3=8算法算法1 1:main()main()int i,a=1,b=1;int i,a=1,b=1;print(a,b);print(a,b);for(i=1;i for(i=1;i=10;i+)
4、=10;i+)c=a+b;c=a+b;print(c);print(c);a=b;a=b;b=c b=c;数学建模:数学建模:y y1 1=y=y2 2=1=1,y yn n=y=yn-1n-1+y+yn-2n-2,n=3n=3,4 4,5 5,。算法算法2 2:表表4-1 4-1 递推迭代表达式递推迭代表达式1 2 3 4 5 6 7 8 91 2 3 4 5 6 7 8 9a b c=a+b a=b+c b=a+c c=a+b a=b+c b=a+c a b c=a+b a=b+c b=a+c c=a+b a=b+c b=a+c 由此归纳出可以用由此归纳出可以用“c=a+b;a=b+c;b
5、=c+a;”“c=a+b;a=b+c;b=c+a;”做循环做循环“不变不变式式”。算法算法2 2如下:如下:main()main()int i,a=1,b=1;int i,a=1,b=1;print(a,b);print(a,b);for(i=1;i for(i=1;i=4;i+)=4;i+)c=a+b;a=b+c;b=c+a;print(a,b,c);c=a+b;a=b+c;b=c+a;print(a,b,c);算法算法2 2,最后输出的并不是,最后输出的并不是1212项,而是项,而是2+3*42+3*4共共1414项。项。表表4-2 4-2 递推迭代表达式递推迭代表达式1 21 2 3 4
6、 5 6 7 8 93 4 5 6 7 8 9a b a=a+b b=a+b a=a+b b=a+b a b a=a+b b=a+b a=a+b b=a+b 由此归纳出可以用由此归纳出可以用“a=a+b;b=a+b;”“a=a+b;b=a+b;”做循环做循环“不变式不变式”,从而得到以下算法,从而得到以下算法3:3:main()main()int i,a=1,b=1;int i,a=1,b=1;print(a,b);print(a,b);for(i=1;i for(i=1;i=5;i+)=5;i+)a=a+b;b=a+b;print(a,b);a=a+b;b=a+b;print(a,b);算法
7、算法算法算法3 3 3 3:【例【例2 2】求两个整数的最大公约数。求两个整数的最大公约数。数学建模:数学建模:辗转相除法是根据递推策略设计的。辗转相除法是根据递推策略设计的。不不妨妨设设两两个个整整数数abab且且a a除除以以b b商商x x余余c c;则则a-bx=ca-bx=c,不不难难看看出出a a、b b的的最最大大公公约约数数也也是是c c的的约约数数(一一个个数数能能整整除除等等式式左左边边就就一一定定能能整整除除等等式式的的右右边边),则则a a、b b的的最最大大公公约约数数与与b b、c c的的最最大大公公约约数数相相同同。同同样样方方法法推推出出b b、c c的的最最大
8、大公公约约数数与与,直直到到余余数数为为0 0时时,除除数数即即为为所求的最大公约数。所求的最大公约数。算算法法设设计计:循循环环“不不变变式式”第第一一次次是是求求a a、b b相相除除的的余余数数c c,第第二二次次还还是是求求“a”“b”“a”“b”相相除除的的余余数数,经经a=b,b=ca=b,b=c操操作作,就就实实现现了了第第二二次次还还是是求求“a”“b”“a”“b”相相除除的的余余数数,这这就就找找到到了了循循环环不不变变式式。循循环环在余数在余数c c为为0 0时结束。时结束。算法如下:算法如下:mainmain()()int a,b;int a,b;input(a,b);i
9、nput(a,b);if(b=0)if(b=0)print(“data error”);return;else else c=a mod b;c=a mod b;while c0 while c0 a=b;a=b;b=c;b=c;c=a mod b;c=a mod b;print(b);print(b);4.1.2 4.1.2 倒推法倒推法 所所谓谓倒倒推推法法:是是对对某某些些特特殊殊问问题题所所采采用用的的违违反反通通常常习习惯惯的的,从从 后后向向前前推推解解问问题题的的方方法法。如如下下面面的的例例题题,因因不不同同方方面面的的需需求求而而采采用了倒推策略。用了倒推策略。例例1在在不不
10、知知前前提提条条件件的的情情况况下下,经经过过从从后后向向前前递递推推,从从而而求求解解问问题题。即即由由结结果果倒倒过过来来推推解解它它的的前前提提条条件件。又又如如例例2由由于于存存储储的的要要求求,而而必必须须从从后后向向前前进进行行推推算算。另另外外,在在对对一一些些问问题题进进行行分分析析或或建建立立数数学学模模型型时时,从从前前向向后后分分析析问问题题感感到到比比较较棘棘手手,而而采采用用倒倒推推法(如例法(如例3),则问题容易理解和解决。下面分别看这几个例子:),则问题容易理解和解决。下面分别看这几个例子:【例【例1 1】猴子吃桃问题猴子吃桃问题一只小猴子摘了若干桃子,每天吃现有
11、桃的一半多一个,一只小猴子摘了若干桃子,每天吃现有桃的一半多一个,到第到第1010天时就只有一个桃子了,求原有多少个桃?天时就只有一个桃子了,求原有多少个桃?数数 学学 模模 型型:每每 天天 的的 桃桃 子子 数数 为为:a10=1,a10=1,a9=(1+a10)*2,a9=(1+a10)*2,a8=(1+a9)*2,a10=1a8=(1+a9)*2,a10=1,递推公式为:递推公式为:ai=(1+ai+1)*2 I=9,8,7,61ai=(1+ai+1)*2 I=9,8,7,61算法如下算法如下 :main()main()int i,s;int i,s;s=1;s=1;for(i=9;i
12、=1;i=i-1)for(i=9;i=1;i=i-1)s=(s+1)*2 s=(s+1)*2 print(s)print(s);【例【例2 2】输出如图输出如图4-14-1的杨辉三角形(限的杨辉三角形(限定用一个一维数组完成)。定用一个一维数组完成)。数学模型:数学模型:上下层规律较明显,中间的数上下层规律较明显,中间的数等于上行左上、右上两数之和。等于上行左上、右上两数之和。问题分析:问题分析:题目中要求用一个一维数组即题目中要求用一个一维数组即完成。数组空间一定是由下标从小到大完成。数组空间一定是由下标从小到大利用的,这样其实杨辉三角形是按下图利用的,这样其实杨辉三角形是按下图4-24-2
13、形式存储的。若求形式存储的。若求n n层,则数组最多层,则数组最多存储存储n n个数据。个数据。1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 2 1 1 2 1 1 3 3 1 1 3 3 1 1 3 3 1 1 3 3 11 4 6 4 11 4 6 4 11 4 6 4 11 4 6 4 1 图图图图4-1 4-1 4-1 4-1 杨辉三角形杨辉三角形杨辉三角形杨辉三角形1 11 11 11 2 11 2 11 3 3 11 3 3 11 14 4 6 6 4 4 1 1图图4-2杨辉三角形存储格式杨辉三角形存储格式 算法设计:算法设计:A1=Ai=1A1=A
14、i=1Aj=Aj+Aj-1 j=i-1Aj=Aj+Aj-1 j=i-1,i-2i-2,2 2i i行行 i-1 i-1行行 i-1 i-1行行算法如下:算法如下:main()int n,i,j,a100;input(n);print(“1”);print(“换行符换行符”);a1=a2=1;print(a1,a2);print(“换行符换行符”);for(i=3;i1,j=j-1)aj=aj+aj-1;for(j=1;j=i;j=j+1)print(aj);print(“换行符换行符”);【例【例3 3】穿越沙漠问题穿越沙漠问题 用一辆吉普车穿越用一辆吉普车穿越10001000公里的沙漠。吉普
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法策略 算法 策略 PPT 课件
限制150内