- 1、本文档共62页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
1.3.2子任务2算法的重要特征算法可以使用自然语言(中文、英文或其他语言)、伪代码、流程图等多种不同的方法来描述。一个算法应该具有以下五个重要的特征。(1)有穷性:算法的有穷性是指算法必须能在执行有限个步骤之后终止。(2)确切性:算法的每一步骤必须有确切的定义。(3)输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件。(4)输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的。(5)可行性:算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步骤,即每个计算步骤都可以在有限时间内完成。计算机科学家尼克劳斯-沃思曾著过一本著名的《数据结构?+?算法?=?程序》,由此可见算法在计算机科学界与计算机应用界的地位。1.3.3子任务3算法分析1.算法的复杂度同一问题可用不同的算法解决,而一个算法的复杂度将影响到算法乃至程序的效率。算法复杂度的分析目的在于选择合适算法和改进算法。2.时间复杂度算法的时间复杂度是指执行算法所需要的时间。一般来说,计算机算法的时间复杂度是问题规模n的函数f(n),通常记作:T(n)?=?Ο(f(n))O(f(n))给出了函数的复杂度的量级。因此,随着问题的规模n的增加,算法执行的时间的增长率与f(n)的增长率成正比,称做渐进时间复杂度(AsymptoticTimeComplexity)。3.空间复杂度算法的空间复杂度是指算法需要消耗的内存空间。与时间复杂度类似,空间复杂度是指算法在计算机内执行时所需存储空间的度量,记作:S(n)?=?O(f(n))一般所讨论的空间复杂度是除正常占用内存开销外的辅助存储单元规模。与时间复杂度一样,一般都用复杂度的渐进性来表示。同时间复杂度相比,空间复杂度的分析要简单得多。1.3.4子任务4算法设计方法算法设计有多种方法,本子任务简要介绍常见的算法。1.递推法递推法是利用问题本身所具有的一种递推关系求解问题的一种方法。它把问题分成若干步,找出相邻几步的关系,从而达到目的,此方法称为递推法。2.递归递归指的是一个过程:函数不断引用自身,直到引用的对象已知。3.穷举搜索法穷举搜索法是对可能是解的众多候选解按某种顺序进行逐一枚举和检验,并从中找出符合要求的候选解作为问题的解。4.贪婪法贪婪法是一种不追求最优解,只希望得到较为满意解的方法。贪婪法一般可以快速得到满意的解,因为它省去了为找最优解要穷尽所有可能而必须耗费的大量时间。贪婪法常以当前情况为基础作最优选择,而不考虑各种可能的整体情况,所以贪婪法不需回溯。5.分治法分治法是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单地直接求解,原问题的解即子问题的解的合并。6.动态规划法动态规划是一种在数学和计算机科学中使用的,用于求解包含重叠子问题的最优化问题的方法。其基本思想是,将原问题分解为相似的子问题,在求解的过程中通过子问题的解求出原问题的解。动态规划的思想是多种算法的基础,被广泛应用于计算机科学和工程领域。7.迭代法迭代法是数值分析中通过从一个初始估计出发寻找一系列近似解来解决问题(一般是解方程或者方程组)的过程,为实现这一过程所使用的方法统称为迭代法。1.3.5子任务5递归算法及案例1.递归算法递归(recursion):用一个概念本身直接或间接地定义它自己。递归是数学中一种重要的概念定义方式,递归算法是软件设计中求解递归问题的方法,在后续的结构定义和程序实现中有不少地方要用到递归算法,对这一方法应尽早领会和使用。2.案例1阶乘算法阶乘函数f(n)=n!(1)非递归算法程序。由于n!?=?1?×?2?×?…?×?i?×?…?×?(n?-?1)?×?n,因此程序实现可以使用一个变量i从1开始连乘至n即可,算法较为简单,不具体描述,下面是阶乘非递归算法的完整程序代码:importjava.util.Scanner;//阶乘的非递归实现publicclassFactorial{publicstaticvoidmain(String[]args){Scannerscan=newScanner(System.in);intproduct=1;System.out.print(\
文档评论(0)