- 1、本文档共17页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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次方为标准进行
您可能关注的文档
- 活塞环地机械加工实用工艺规程设计.doc
- 矩形、菱形、正方形 经典难题复习巩固(教案设计).doc
- 钢筋直螺纹连接专项施工方案设计.doc
- 高考的复习——《电磁感应》典型例题复习.doc
- 高考的物理二轮专题复习:电磁感应中“单、双棒”问题归类例析.doc
- 消防系统维护保养专用文件资料表格——消防系统维护维修研究细则.doc
- 特殊地平行四边形复习讲义.doc
- 高中人教版新课标历史必修二教案设计.doc
- 曼昆经济学原理 重点总结材料.doc
- 牛顿环测凸透镜地曲率半径实验完整报告材料含大数据.doc
- 专题17 中国特色社会主义道路(第01期)-中考历史模拟题分项汇编(全国通用)(原卷版).docx
- 专题17 中国特色社会主义道路(第01期)-中考历史模拟题分项汇编(全国通用)(解析版).docx
- 专题20 宾语从句---三年(2024-2024)中考模拟题英语分项汇编(全国通用).docx
- 专题18 民族团结与祖国统一国防建设与外交成就(第01期)-2024年中考历史模拟题分项汇编(原卷版).doc
- 专题18 民族团结与祖国统一国防建设与外交成就(第02期)-2024年中考历史模拟题分项汇编(全国通用)(解析版).docx
- 专题15 中华人民共和国的成立和巩固(第02期)-中考历史模拟题分项汇编(全国通用)(解析版).docx
- 专题12 中华民族的抗日战争(第01期)-中考历史模拟题分项汇编(原卷版).doc
- 专题12 中华民族的抗日战争(第01期)-中考模拟题历史试题分项汇编(解析版).doc
- 专题12 中华民族的抗日战争(第02期)-中考历史模拟题分项汇编(全国通用)(原卷版).docx
- 专题12 中华民族的抗日战争(第02期)-中考历史模拟题分项汇编(全国通用)(解析版).docx
文档评论(0)