算法设计与分析:第三章 算法基本工具和优化技巧.pptxVIP

算法设计与分析:第三章 算法基本工具和优化技巧.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第三章;第三章 算法基本工具和优化技巧 ; 3.1.1 循环设计要点 3.1.2 递归设计要点 3.1.3 递归与循环的比较 ;3.1.1 循环设计要点 1.设计中要注意算法的效率 2.“自顶向下”的设计方法 3.由具体到抽象设计循环结构 ; 循环体的特点是:“以不变应万变”。 所谓“不变”是指循环体内运算的表现形式是不变的,而每次具体的执行内容却是不尽相同的。在循环体内用不变的运算表现形式去描述各种相似的重复运算。;【例1】 求1/1!-1/3!+1/5!-1/7!+…+(-1)n+1/(2n-1)! 分析:此问题中既有累加又有累乘,准确地说累加的对象是累乘的结果。 数学模型1:Sn=Sn-1+(-1)n+1/(2n-1)! 算法设计1:多数初学者会直接利用题目中累加项通式,构造出循环体不变式为: S=S+(-1)n+1/(2n-1)! 需要用二重循环来完成算法,算法1如下: ;算法如下:;算法分析: 以上算法是二重循环来完成 ,但算法的效率却太低是O(n2)。 其原因是,当前一次循环已求出7!,当这次要想求9!时,没必要再从1去累乘到9,只需要充分利用前一次的结果,用7!*8*9即可得到9!,模型为An=An-1*1/((2*n-2)*(2*n-1)。另外运算sign = sign *(-1);总共也要进行n*(n-1)/2次乘法,这也是没有必要的。下面我们就进行改进。 ;数学模型2:Sn=Sn-1+(-1)n+1An; An=An-1 *1/((2*n-2)*(2*n-1)) ;算法说明2: 构造循环不变式时,一定要注意循环变量的意义,如当i不是项数序号时(右边的循环中)有关t的累乘式与i是项数序号时就不能相同。 算法分析:按照数学模型2,只需一重循环就能解决问题 算法的时间复杂性为O(n)。 ;2.“自顶向下”的设计方法 自顶向下的方法是从全局走向局部、从概略走向详尽的设计方法。自上而下是系统分解和细化的过程。 ;1)这里不是要质因数,所以找到因数后也无需将其从数据中“除掉”。 2)每个因数只记一次,如6的因数为1,2,3;算法如下:; 对于不太熟悉的问题,其数学模型或“机械化操作步骤”的不易抽象,下面看一个由具体到抽象设计循环细节的例题。 【例4】编写???法:打印具有下面规律的图形。 1 5 2 8 6 3 10 9 7 4 ;算法设计:容易发现图形中自然数在矩阵中排列的规律,题目中1,2,3,4所在位置我们称为第1层(主对角线),例图中5,6,7所在位置我们称为第二层,……。一般地,第一层有n个元素,第二层有n-1个元素…… 基于以上数据变化规律,以层号作为外层循环,循环变量为i(范围为1——n);以层内元素从左上到右下的序号作为内循环,循环变量为j(范围为1——n+1-i)。这样循环的执行过程正好与“摆放”自然数的顺序相同。用一个变量k模拟要“摆放”的数据,下面的问题就是怎么样将数据存储到对应的数组元素。 ; 数组元素的存取,只能是按行、列号操作的。所以下面用由具体到抽象设计循环的“归纳法”,找出数组元素的行号、列号与层号i及层内序号j的关系: 1.每层内元素的列号都与其所在层内的序号j是相同的。因为每层的序号是从第一列开始向右下进行。 2.元素的行与其所在的层号及在层内的序号均有关系,具体地: 第一层行号1——n,行号与j同; 第二层行号2——n,行号比j大1; 第三层行号3——n,行号比j大2; …… 行号起点随层号i增加而增加,层内其它各行的行号又随层内序号j增加而增加,由于编号起始为1,i层第j个数据的列下标为i-1+j。 综合以上分析,i层第 j个数据对应的数组元素是a[i-1+j][j]。 ;main( ) {int i,j,a[100][100],n,k; input(n); k=1; for(i=1;i=n;i=i+1) for( j=1;j=n+1-i;j=j+1) {a[i-1+j][j]=k; k=k+1;} for(i=1;i=n;i=i+1) {print( “换行符”); for( j=1;j=i;j=j+1) print(a[i][j]); } } ;3.1.2 递归设计要点;递归的关键在于找出递归方程式和递归终止条件。;递归算法解题通常有三个步骤: 1)分析

文档评论(0)

学习让人进步 + 关注
实名认证
文档贡献者

活到老,学到老!知识无价!

1亿VIP精品文档

相关文档