- 1、本文档共88页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章 基本的算法策略 4.1 迭代算法 4.2 蛮力算法 4.3 分而治之算法 4.4 贪婪算法 4.5 动态规划 4.6 算法策略间的比较 4.1 迭代算法 4.1.1 递推法 4.1.2 倒推法 4.1.3 迭代法解方程 4.1.1 递推法 【例1】兔子繁殖问题 问题描述:一对兔子从出生后第三个月开始,每月生一对小兔子。小兔子到第三个月又开始生下一代小兔子。假若兔子只生不死,一月份抱来一对刚出生的小兔子,问一年中每个月各有多少只兔子。 算法1: main( ) { int i,a=1,b=1; print(a,b); for(i=1;i<=10;i++) { c=a+b; print (c); a=b; b=c; } } 算法2: 表4-1 递推迭代表达式 1 2 3 4 5 6 7 8 9 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=c+a;”做循环“不变式”。 算法2如下: main( ) { int i,a=1,b=1; print(a,b); for(i=1; i<= ;i++) { c=a+b; a=b+c; b=c+a; print(a,b,c); } } 表4-2 递推迭代表达式 1 2 3 4 5 6 7 8 9 a b a=a+b b=a+b a=a+b b=a+b …… ? ?由此归纳出可以用“a=a+b; b=a+b;”做循环“不变式”,从而得到以下算法3: main( ) { int i,a=1,b=1; print(a,b); for(i=1; i<= ;i++) { a=a+b; b=a+b; print(a,b); } } 【例2】求两个整数的最大公约数。 数学建模:辗转相除法是根据递推策略设计的。 设两个整数ab且a除以b商x余c;则a-bx=c: a、b的最大公约数也是c的约数 a、b的最大公约数与b、c的最大公约数相同 同样方法推出b、c的最大公约数与……,直到余数为0时,除数即为所求的最大公约数。 算法设计:循环“不变式”第一次是求a、b相除的余数c,第二次经a=b,b=c操作,就实现了第二次还是求“a”“b” 相除的余数,这就找到了循环不变式。循环在余数c为0时结束。 4.1.2 倒推法 P177 T2 【例2】 输出如图4-1的杨辉三角形(限定用一个一维数组完成)。(2个数组?) 数学模型:上下层规律较明显,中间的数等于上行左上、右上两数之和。 算法如下: main( ) {int n,i,j,a[100]; input(n); print(“1”); print(“换行符”); a[1]=a[2]=1; print(a[1],a[2]); print(“换行符”); for (i=3;i=n;i=i+1) {a[1]=a[i]=1; for (j=i-1,j1,j=j-1) a[j]=a[j]+a[j-1]; for (j=1;j=i;j=j+1) print(a[j]); print(“换行符”); } } 4.1.3 迭代法解方程 迭代法:1 精确迭代(最大公约数) 2 近似迭代 代法解方程的实质是按照下列步骤构造一个序列x0,x1,…,xn,来逐步逼近方程f(x)=0的解: 1)选取适当的初值x0; 2)确定迭代格式,即建立迭代关系,需要将方程f(x)=0改 写为x=φ(x)的等价形式; 构造序列x0,x1,……,xn,即先求得x1=φ(x0),再求 x2=φ(x1),……如此反复迭代,就得到一个数列x0, x1,……,xn,若这个数列收敛,即存在极值,且函数 φ(x)连续,则很容易得到这个极限值 x*就是方程f(x)=0的根。 【例2】牛顿迭代法 牛顿迭代法又称为切线法. 选择一个接近函数f(x)零点的x0, 计算相应的f(x0)和切线斜率f‘(x0) 计算穿过点(x0,f (x0))且斜率为f ‘(x0)的直线方程为: 和x轴的交点的x坐标, 也就是求如下方程的解: 迭代公式可化简为: 牛顿迭代
文档评论(0)