- 1、本文档共43页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法设计基本方法(1) 列举法(穷举法): 指的是从可能的解的集合中一一枚举各元素, 用题目给定的检验条件判定哪些是无用的,哪些是有用的。能使命题成立,即为其解。 例:百鸡问题(教材p6) 算法设计基本方法(2) 归纳法: 通过分析少量特殊情况,找出关系,得到结论 例:搏彩问题 归纳法 特点:适用面广,高效使用,常能解决许多实际问题 适用范围:样本空间有一定规律,多用于预测领域,数据难以获得的工程计算科学计算等领域 缺点:归纳出的数学模型需要证明,且代码实现不规范 改进方法:常采用不同归纳方法共同求解一个问题 软肋:不能求解样本空间过于零散的问题 算法设计基本方法(3) 递推 从已知的初始条件出发,逐次推出所要求的各中间结果和最后结果 特点:采用递推关系式数学模型,理论正确性得到保证,由于递推关系式来源于归纳,所以本质上属于归纳法 适用范围:数值计算等工程应用 缺点:需考虑数值计算中稳定性问题,易产生蝴蝶效应 软肋:无递推关系式的问题不可解 递推 据说,美军 1910 年的一次部队的命令传递是这样的: 营长对值班军官: 明晚大约 8点钟左右,哈雷彗星将可能在这个地区看到,这种彗星每隔 76年才能看见一次。命令所有士兵着野战服在操场上集合,我将向他们解释这一罕见的现象。如果下雨的话,就在礼堂集合,我为他们放一部有关彗星的影片。 值班军官对连长: 根据营长的命令,明晚8点哈雷彗星将在操场上空出现。如果下雨的话,就让士兵穿着野战服列队前往礼堂,这一罕见的现象将在那里出现。 连长对排长: 根据营长的命令,明晚8点,非凡的哈雷彗星将身穿野战服在礼堂中出现。如果操场上下雨,营长将下达另一个命令,这种命令每隔76年才会出现一次。 排长对班长: 明晚8点,营长将带着哈雷彗星在礼堂中出现,这是每隔 76年才有的事。如果下雨的话,营长将命令彗星穿上野战服到操场上去。 班长对士兵: 在明晚8点下雨的时候,著名的76岁哈雷将军将在营长的陪同下身着野战服,开着他那“彗星”牌汽车,经过操场前往礼堂。 算法设计基本方法(4) 递归 将一个复杂的问题归结为若干个较简单的问题,然后将这些较简单的每一个问再归结为更简单的问题,这个过程可以一直做下去,直到最简单的问题为止。 例:斐波那契(Fibonacci)序列: F0 = F1 = 1 Fi = Fi-1 + Fi-2 (i1) 算法 求斐波那契数 int F(n) { //返回第n个斐波那契数// int n; if (n= 1) return(1); else return F(n-1) + F(n-2); } 算法效率:对F(n-1) 、F(n-2)存在大量的重复计算 改 进:保存中间结果 例 :欧几里得算法 已知两个非负整数a和b,且a>b≥0,求这两个数的最大公因数。 辗转相除法:若b=0,则a和b的最大公因数等于a;若b>0,则a和b的最大公因数等于b和用b除a的余数的最大公因数。 算法 求最大公因数 GCD(int a,int b) // 约定ab // { if (b==0) return(a); else return (GCD(b,a % b)); } 例: GCD(22,8) = GCD(8,6) = GCD(6,2) = GCD(2,0) = 2; 递归 特点:结构清晰,可读性强,容易用数学归纳法证明算法正确性 适用范围:难以用循环或递推直观描述的复杂问题 缺点:资源耗费多,执行效率低,所以在算法优化时采用消递归策略 算法设计基本方法(5) 减半递推技术(分治法) 所谓“减半”,是指将问题的规模减半,而问题的性质不变。所谓“递推”,是指重复“减半”的过程。 例 二分检索 二分检索:每次选取中间元素的下标 算法 二分检索 Int BINSRCH(int A[],int n,int x) { int low,high,mid; low=1; high=n; while (low=high){ mid = if(xA[mid]) high=mid-1; if(xA[mid]) low =mid+1;
文档评论(0)