易语言常用算法设计图书.doc

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
常用算法设计 概括地说,“算法”是指解题方案的准确而完整的描述。 对于一个问题,如果可以通过一个计算机程序,在有限的存储空间内进行有限长的时间而得到正确的结果,则称该问题是算法可解的。但算法不等于程序,也不等于计算方法。程序可以作为算法的一种描述,但程序通常还需考虑很多与方法和分析无关的细节问题,这是因为在编写程序时要受到计算机系统运行环境的限制。通常,程序设计的质量不可能优于算法的设计。 通常求解一个问题可能会有多种算法可供选择,选择的主要标准是算法的正确性和可靠性,简单性和易理解性。其次是算法所需要的存储空间少和执行更快等。 算法设计是一件非常困难的工作,经常采用的算法设计技术主要有列举法、递推法、贪婪法、回溯法、分治法、动态规划法等等。另外,为了更简洁的形式设计和藐视算法,在算法设计时又常常采用递归技术,用递归描述算法。 1.列举法(穷举) 列举法的基本思想是根据提出的问题,列举所有可能情况,并用问题中提出的条件检验哪些是需要的,哪些是不需要的。因此,列举法常用于解决“是否存在”或“有多少种可能”等类型的问题。例如,求解不定方程的问题可以采用列举法。 列举法的特点是算法比较简单,但当列举的可能情况较多时,执行列举算法的工作量将会很大。因此,在用列举法设计算法时,应该重点注意使方案优化,尽量减少运算工作量。通常,只要对实际问题作详细的分析,将与问题有关的知识条理化、完备化、系统化,从中找出规律,或对所有可能的情况进行分类,引出一些有用的信息,列举量是可以减少的。 先介绍“列举法”在易语言中实现的方法。 列举法,顾名思义是列举出所有可能的情况,并用问题的条件来一一检验,并从中找出符合要求的解。特点比较简单,但是在写列举算法时尽量过滤掉一些不必要的情况,优化算法。下面举一个例子,在易语言中编写代码实现,来说明列举法的基本思想,以及如何减少列举量。 大家都知道百鸡的问题吧!母鸡每只3元,公鸡每只2元,小鸡每只0.5元,计算一下如何100块钱买100只鸡。 计算中,只有以下两个条件成立,才输出结果。 母鸡数量+公鸡数量+小鸡数量=100只 3×母鸡数量+2×公鸡数量+0.5×小鸡数量=100元 列举所有可能的条件的代码如下: 可以看到,各层循环均需循环101次,因此总循环次数为1013 ,列举量太大。但只对问题稍加分析,很容易发现这个算法还可以改进,减少不必要的循环次数。 首先,考虑到母鸡为3元一只,因此,最多只能买33只母鸡,即算法中的外循环只需要从0到33就可以了,没有必要从0 到100。 其次,考虑到公鸡为2 元一只,因此,最多只能买50只公鸡。又考虑到对公鸡的列举是在算法的第二层循环中,因此,在第一层循环中已确定买母鸡数量的情况下,公鸡最多只能买50-母鸡数量,即第二层中对“公鸡”只需要从0到50-母鸡数量就可以了。 最后,考虑到总共买100只鸡,因此,在第一层循环中已确定买母鸡的数量,且第二层已确定买公鸡的情况下,买小鸡的数量只能是100-母鸡数量-公鸡数量,即第三层的循环已没有必要了。并且,在这种情况下,条件:母鸡数量+公鸡数量+小鸡数量=100只自然已经满足。 优化后的代码如下: 列举(穷举)所有可能情形,最直观的是联系循环的算法。但,循环层数的改变,就影响了这一问题的解,即没有一般性。例如:有多种鸡,而每种鸡的价格又不同,每次根据一个固定的金额购买某几种鸡。 程序名称:1列举法-百鸡.e 2. 递推法 所谓递推,是指从已知的初始条件出发,逐次推出所要求的各中间结果和最后结果。其中初始条件或是问题本身已经给定,或是通过对问题的分析与化简后确定。递推本质上也属于归纳法。许多递推公式,实际上是通过对实际问题的分析与归纳而得到的,因此,递推是归纳的结果。 也就是利用问题本身所具有的一种递推关系求问题解的一种方法。设要求问题规模为N的解,当N=1时,解或者已知,或者能非常方便地得到解。能采用递推法构造算法的问题有重要的递推性质,即当得到问题规模为i-1的解后,由问题的递推性质,能从已求得的规模为1,2,…,i-1的一系列解,构造出问题规模为I的解。这样,程序可从i=0或i=1出发,重复地,由已知至i-1规模的解,通过递推,获得规模为i的解,直至得到规模为N的解。 递推法中最具代表的就是阶乘法,下面采用分段乘法进行大数求阶乘。 在计算阶乘的时候,随着数字的增加,计算的结果会以极快的速度激增。当使用整数型数据储存结果时,当超过12时,计算结果将溢出;当使用长整数型数据储存结果时,当超过20时,计算结果将溢出。 为了能够计算较大的整数的阶乘并得到准确的结果,必须考虑适当的算法,分段乘法是其中的一种,将每一步的中间结果使用数组分段储存,数组的一个成员储存一段数据,由于我们经常使用的是10进制,因此以10的n次方为标准进行

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档