




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、算法的概念3.13.2算法的特征3.3算法的描述算法设计中常用的基本方法3.43.5算法的设计要求3.6算法的评价3.1 算法的概念 算法就是为解决一个特定问题而采取的方法和步骤。返回非数值运算算法数值运算算法1212计算机算法的分类3.2 算法的特征 一个算法必须具有以下特性:(1)有穷性(2)确定性(5)可行性(4)有一个或 多个输出(3)有零个或多个输入特性返回3.3.1 用自然语言描述算法 自然语言就是人们日常生活中使用的语言,用自然语言来描述算法具有很明显的优点,那就是通俗易懂,便于阅读。 缺点:自然语言固有的不严密性也会使得要简单清晰地描述算法变得很困难,并且易产生歧义。 流程图是
2、一种传统的算法表示法,它利用几何图形的框来代表各种不同性质的操作,用流程线来指示算法的执行方向。用流程图描述算法的方式比较直观形象,易于理解。3.3 算法的描述3.3.2 用传统流程图描述算法 缺点:在设计比较复杂的算法时,画流程图是十分花费时间的,也容易在流程控制上出错。返回3.3 算法的描述3.3.2 用传统流程图描述算法 流程图符号3.3.3 用 N-S 流程图描述算法 三种基本结构,及其 N-S 流程图的表示形式:3.3 算法的描述顺序结构选择结构循环结构3.3.4 用伪代码描述算法 伪代码是介于自然语言与编程语言之间的一种算法描述语言,使用伪代码来描述算法可以容易地以任何一种编程语言
3、实现。3.3 算法的描述 优点:结构清晰、代码简单、书写方便、可读性好,既类似于自然语言,又便于向计算机语言算法(即程序)过渡。3.3.5 用计算机语言描述算法 用计算机语言来描述的算法,可以说是算法描述的终极形式。当然,用计算机语言表示算法必须严格遵循所采用的语言的语法规则。3.4.1 迭代法 3.4 算法设计中常用的基本方法 迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程。迭代法又分为精确迭代和近似迭代两种。欧几里德算法属于精确迭代法,牛顿迭代法属于近似迭代法。 用迭代算法解决一个具体问题时,需要考虑以下三个方面: 迭代变量的确立。在可以用迭代算法解决的问题中,至少存在一个直接或间
4、接地不断由旧值递推出新值的变量,这个变量就是迭代变量。 迭代关系式的建立。所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。 迭代过程的控制。不能让迭代过程无休止地重复执行下去。迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控制;对于后一种情况,需要进一步分析出用来结束迭代过程的条件返回3.4.1 迭代法 3.4 算法设计中常用的基本方法 最经典的迭代算法是欧几里德算法,也叫辗转相除法,用于计算两个整数a,b的最大公约数(假定ab),其计算原理可表
5、示为: gcd(a,b)=gcd(b,a mod b),即(a,b)和(b,a mod b)的公约数是一样的。 欧几里德算法就是一个反复迭代执行,直到余数为0才停止的算法,这实际是一个循环结构。1.欧几里德算法 迭代法也是用于求方程或方程组近似根的一种常用的算法设计方法,牛顿迭代法就是其中的一种。设方程为 f(x)=0,用某种数学方法导出等价的形式 x = g(x)。2.牛顿迭代法3.4.1 迭代法 使用牛顿迭代法求根时应注意以下两种可能发生的情况:3.4 算法设计中常用的基本方法 方程虽然有解,但迭代公式选择不当或迭代的初始近似根选择不合理,也会导致迭代失败。2 如果方程无解,算法求出的近似
6、根序列就不会收敛,迭代过程会变成死循环,因此在使用迭代算法前应先考察方程是否有解,并在程序中对迭代的次数给予限制。1 穷举法也叫列举法。其基本思想是根据提出的问题,列举所有可能的情况,并用问题中给定的条件检验哪些是需要的,哪些是不需要的。因此,列举法常用于解决“是否存在”或“有多少种可能”等类型的问题,例如求解不定方程的问题。这种方法的好处是最大限度考虑了各种情况,从而为求出最优解创造了条件。对于许多毫无规律的问题而言,穷举法用时间上的牺牲换来了解的全面性保证3.4.2 穷举法 3.4 算法设计中常用的基本方法 递归是设计和描述算法的一种有力的工具,在用计算机解决某些复杂的问题时,使用递归是十
7、分有效的。递归过程一般通过函数或子过程来实现,在函数或子过程的内部,直接或者间接地又调用到了自身,这种用递归来描述的算法称之为递归算法。3.4.3 递归法 3.4 算法设计中常用的基本方法能采用递归描述的算法的特点: 将求解规模为N的问题,设法将它分解成规模较小的问题,然后从这些小问题的解方便地构造出大问题的解,并且这些规模较小的问题也能采用同样的分解和综合方法,分解成规模更小的问题,并从这些更小问题的解构造出规模较大问题的解。 特别地,当规模N=1时,能直接得解。递归算法的执行过程分递推和回归两个阶段。在递推阶段,把较复杂的问题(规模为N)的求解推到比原问题简单一些的问题(规模小于N)的求解
8、。3.4.3 递归法 3.4 算法设计中常用的基本方法在使用递归的算法中,必须包含下面两个关键点:12必须有一个明确的递归终止条件,即递归出口函数或过程的调用中包含它本身3.4.4 回溯法 3.4 算法设计中常用的基本方法 回溯法也称为试探法,该方法放弃关于问题规模大小的限制,并将问题的方案按某种顺序逐一枚举和试验。发现当前方案不可能有解时,就选择下一个方案,倘若当前方案不满足问题的要求时,继续扩大当前方案的规模,并继续试探。如果当前方案满足所有要求时,该方案就是问题的一个解。在回溯中,放弃当前方案,寻找下一个方案的过程称为回溯。扩大当前候选解的规模,以继续试探的过程称为向前试探。运用回溯法解
9、题的步骤:(1)针对所给问题,定义问题的解空间3.4.4 回溯法 3.4 算法设计中常用的基本方法(2)确定易于搜索的解空间结构(3)以深度优先的方式搜索解空间,并且在搜索 过程中用剪枝函数避免无效搜索注意:由于回溯法是对解空间的深度优先搜索,因此在一般情况下可用递归函数来实现回溯法3.4.5 分治法 分治法,顾名思义,就是“分而治之”的意思。就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题直到最后子问题可以简单直接求解,原问题的解即子问题的解的合并。 3.4 算法设计中常用的基本方法1.分治法概述 分治法的设计思想是:将一个难以直接解决的大问题,分割成一些规
10、模较小的相同问题,以便各个击破,分而治之。 分治法的分治策略是:对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分割为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。 3.4.5 分治法 3.4 算法设计中常用的基本方法1234该问题的规模缩小到一定的程度就可以容易地解决该问题可以分割为若干个规模较小的相同问题,即该问题具有最优子结构性质该问题可以分割为若干个规模较小的相同问题,即该问题具有最优子结构性质利用该问题分割出的子问题的解可以合并为该问题的解分治法所能解决的问题一般具有以下几个
11、特征:3.4.5 分治法 3.4 算法设计中常用的基本方法分治法在每一层递归上都有3个步骤:分割:将原问题分解为若干个规模较小、相互独立、与原问题形式相同的子问题。求解:若子问题规模较小而且容易解决则直接解决,否则递归地解各个子问题。合并:将各个子问题的解合并为原问题的解。2313.4.5 分治法 3.4 算法设计中常用的基本方法2.分治法在实际问题中的应用 二分查找法就是分治法的一种简单形式,适用于在有序的线性表中查找某个数据元素的位置。 利用分治策略求解时,所需时间取决于分解后子问题的个数、子问题的规模大小等因素。二分查找法划分简单、均匀,是经常采用的一种有效方法。3.5 算法的设计要求一
12、个好的算法应便于理解,便于编码,便于修改等。从书写角度来说,结构上要直观、清晰、美观,在必要的地方要加上注释说明,另外算法的描述不要拘泥于一种形式,在算法的每个部分可以采用最便于理解的描述形式。2)可读性1)正确性(1)程序中的每一条语句都符合语法规定。(2)程序对于所有合法的输入数据都能产生满足要求的结果。返回3.5 算法的设计要求效率指的是执行算法所花费的时间。对于解决同一问题的多个算法,执行时间短的算法效率高。存储量需求指算法执行过程中所需要的最大存储空间。这两者决定着一个算法的运行效率,也就是按该算法编制的程序在计算机上执行所花费时间和所占用空间。4)高效率与低储存量需求3)健壮性所谓
13、健壮性,主要指一个算法除了能对合法的输入数据得到正确的结果外,还应对非法的或不合乎要求的输入数据做出正确合理的处理。3.6 算法的评价3.6.1 时间复杂度 时间复杂度描述了一个算法在计算机上执行时占用计算机时间资源的情况。 使用绝对的时间单位衡量算法的效率是不合适的。可以认为一个特定算法“运行时间”的大小,只依赖于问题的规模(通常用整数n表示),它是问题规模的某个函数,记为T(n),反映在算法中就是算法中语句的执行次数。一个算法中的语句执行次数称为语句频度。当n不断变化时,语句频度T(n)也会不断变化。若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常
14、数,则称f(n)是T(n)的同数量级函数。采用“大O表示法”记作T(n)=O(f(n),称O(f(n) 为算法的渐进时间复杂度,简称时间复杂度。 返回3.6 算法的评价3.6.1 时间复杂度 随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率降低。 常见的时间复杂度,按数量级递增排列依次为:常数阶O(1)、对数阶O(log2n)、线性阶O(n)、线性对数阶O(nlog2n)平方阶O(n 2)、立方阶O(n 3)、k次方阶O(n k)、指数阶O(2 n)3.6 算法的评价3.6.2 空间复杂度 一个算法的空间复杂度S(n)定义为算法在计算机内执行时所需存储空间的度量,它也是问题规模n的函数。记作: S(n)=O(f(n) 空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度。一个算法在计算机
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【复习大串讲】【中职专用】高二语文上学期期末综合测试题(三)(职业模块)(原卷版)
- 单位员工招聘合同范本
- 兽医聘用劳务合同范本
- 光催化课题申报书
- 会所物资出售合同范本
- 厨具采买合同范本写
- 吊装合同范例简易版本
- 医院雇佣合同范本
- 企业各类合同范本
- 吊车及场地合作合同范本
- 中班美工区角活动教案10篇
- SJG 103-2021 无障碍设计标准-高清现行
- 皇冠假日酒店智能化系统安装工程施工合同范本
- 路面工程重点、关键、和难点工程的施工方案(技术标)
- 合肥市城市大脑·数字底座白皮书2020
- 机电预留预埋工程施工组织设计方案
- 2022年三八妇女节妇女权益保障法律知识竞赛题库及答案(共290题)
- 引水罐的设计计算
- Of studies原文译文及赏析
- 安全阀基本知识讲义
- 不锈钢排烟风管施工实施方案
评论
0/150
提交评论