程序设计-算法.ppt

  1. 1、本文档共107页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
程序设计-算法

6.3.递推 递推是指从已知的初始条件出发,逐次推出所要求的各中间结果和最后结果。 例:求阶乘 f(n)=n! =n×(n-1)! =n×f(n-1) 要计算10!,可以从递推初始条件f(0)=1出发,应用递推公式f(n)=n×f(n-1)逐步求出f(1)、f(2)…、f(9)、最后求出f(10)的值 6.4.递归 这种将问题逐层分解的过程,实际上并没有对问题进行求解,而只是当解决了最后那些最简单的问题后,再沿着原来分解的逆过程逐步进行综合,这就是递归的基本思想。 由此可以看出,递归的基础也是归纳。 递归分为直接递归与间接递归两种。如果一个算法P直接调用自己则称为直接递归。 如果算法P调用另一个算法Q,而算法Q又调用算法P,则称为间接递归调用。 6.5.减半递推技术 “减半”是指将问题的规模减半,而问题的性质不变。 “递推”是指重复“减半”的过程。 6.6.回溯法 Proc Backtracking(succ : Boolean) 确定起始状态值走第一步 确定下一步还有几种可能 选一可能走下一步,记住可能和本步特征 做完新一步应做的事 While 目标未达到 do 确定下一步有几种可能 While 没有可能and 还有上一步 do 回退上一步 查有无下一可能 Enddo If 上一步没有了Then return (SUCC=FALSE) EndIf 选一可能走的一步,记住可能和本步特征 做完新一步应做的事 Enddo return (SUCC=TRUE) End Backtracking 7.1 算法的设计要求 对于同一个问题,各人编写的算法(或程序)往往是不同的。算法评估的目的正是希望找到一个评价标准,来对这些算法进行评价,从而选出较合适的一种。 7 算法的评估 例1.21:计算S=1+2+3+…+n /*算法1*/ void main() { long s=0; for(int i=1;in+1;i++) s=s+i; printf(%d\n,s); } /*算法2*/ void main() { long s=(1+n)*n/2; printf(%d\n,s); } (1)正确性 正确性是设计和评估一个算法的首要条件。 算法的正确性可通过理论推导及实验测试两方面判定。 (2)可读性 (3)效率和存储量 效率指的是确定条件下算法的运行时间。 执行时间越短,效率越高。 (4)简单性 简单的算法便于编写、修改、调试以及交流,但效率往往不高。 7.2 算法效率的度量 算法效率的度量主要包括时间度量和空间度量。 1).算法的时间度量 假定:计算机执行简单操作所需要的时间是相等的。 算法的时间度量标准即算法中进行简单操作的次数,也称时间复杂度,用 表示。 常用的简单操作: 四则运算及赋值(=,+=,-=,*=,/=) 比较(,=,==,,=) 例1-22:求n个数的平均值 /*求n个整数的平均值的算法*/ int ave(int a[],int n) { int s,i; s=0; /*1*/ for(i=0;in;i++)s=s+a[i]; /*2*/ s=s/n; /*3*/ return s; } /*2可以分解如下*/ i=0; /*执行1次*/ while(in) /*执行n+1次*/ { s+=a[i]; /*执行n次*/ i++; /*执行n次*/ } 有时准确计算某些算法的时间复杂度比较困难,这时为简化时间复杂度的计算,只要计算出时间复杂度的数量级即可。 设 ,则 其中n是问题的规模。 例1.23:某算法如下: for(i=0;in;i++) for(j=0;jn;j++) x=x+1; 例1.24:某算法如下: for(i=1;in;;) i=2*i; 常见的时间复杂度数量级及大小关系 有些算法的时间复杂度不仅与问题的求解规模n有关系,而且与输入有关系。 例1.25:顺序查找算法 /*在数组中查找某一个特殊的数*/ int searchlist(int

文档评论(0)

lifupingb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档