算法和其描述.pptVIP

  1. 1、本文档共34页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机常用算法与程序设计案例教程 杨克昌 ?教学要求 了解算法概念、算法特征及算法的描述 建立算法的复杂性概念 掌握结构化程序设计的基本方法 ?本章重点 应用 c 语言描述算法 掌握算法时间复杂度分析 1.1 算法及其描述 算法是程序设计的基础,是计算机科学的核心。 1.1.1 算法定义 算法是计算机解决问题的过程,是解决某一问题的运算序列。或者说算法是问题求解过程的运算描述。 当面临某一问题时,需要找到用计算机解决这个问题的方法与步骤,算法就是解决这个问题的方法与步骤的描述。 1. 算法的三要素 算法由操作、控制结构与数据结构三者组成。 (1) 操作:算术运算,关系运算,逻辑运算;输入、输出、赋值等操作。 (2) 控制结构:顺序结构,选择结构,循环结构,模块调用。 (3) 数据结构:数据之间的逻辑关系。 2. 算法的基本特征 一个算法由有限条可完全机械地执行的、有确定结果的指令组成,具有以下特性: (1) 确定性 (2) 可行性 (3) 有穷性 (4) 算法有零个或多个输入 (5) 算法有一个或多个输出 1.1.2 算法描述 (1)一个问题可以设计不同的算法来求解; 同一个算法可以采用不同的形式来表述。 (2)描述算法可以有:自然语言方式、流程图方式、伪代码方式、计算机语言表示方式与表格方式等。 (3)当一个算法使用计算机程序设计语言描述时,就是程序。 本书采用C语言与自然语言相结合来描述算法。 例1-1 求两个整数a,b的最大公约数的欧几里德算法 (1) 数 a 除以 b 得余数 r;若r=0,则b为所求的最大公约数。 (2) 若 r≠0,以b为a,r为b,继续(1). 欧几里德算法具体描述如下: input(a,b); // 输入的简略表示 r=a%b; while(r!=0) // 实施辗转相除 { a=b; b=r; r=a%b; } print(b); // 输出的简略表示 例1-2 由n个1组成的整数能被2011整除,求n至少为多大? (1) 试模拟整数竖式除法: 可以证明,n是存在的,且不大于2011,因而以上竖式运算总会停止。当除运算的余数为“0”时,数一数被除数中有多少个“1”即可。 设整数竖式除法每次试商的被除数为a, 除数为2011,每次试商的余数为c。 循环以余数c≠0作为循环条件。循环外赋初值:c=1111,n=4或c=111,n=3等等。 设置竖式除法模拟循环,循环中被除数a=c*10+1,试商余数c=a%2011。 若余数c=0,结束循环,输出结果; 否则,计算a=c*10+1为下一轮运算的被除数,继续试商。每商一位,统计被除数中“1”的个数的变量n增1。 (2) 竖式除法模拟描述 c=1111;n=4; // 变量c与n赋初值 while(c!=0) // 模拟竖式除法 { a=c*10+1; c=a%2011; n=n+1; // 每试商一位n增1 } print(n); // 输出的简略表示 1.2 算法的复杂性分析 算法的复杂性越高,所需的计算机资源越多。 最重要的计算机资源是时间资源与空间资源。 需要计算机时间资源的量称为时间复杂度,需要计算机空间资源的量称为空间复杂度。 时间复杂度与空间复杂度集中反映算法的效率。 1.2.1 时间复杂度 要想充分理解算法并有效地应用算法求解实际案例,关键是对算法的分析。通常我们可以利用实验对比方法、数学方法来分析算法。 实验对比分析很简单,两个算法相互比较求解时间 。 数学方法能在严密的逻辑推理基础上判断算法的优劣。 在算法分析中,我们往往采用能近似表达性能的方法来展示某个算法的性能指标。 一个算法的时间复杂度是指算法运行所需的时间。 一个算法的运行时间取决于算法所需执行的语句(运算)的多少。 算法的时间复杂度通常用该算法执行的总语句(运算)的数量级决定。 一条语句的数量级即执行它的频数,一个算法的数量级是指它所有语句执行频数之和。 在分析算法时,隐藏细节的数学表示方法为大写字母“O”记法,它可以帮助我们简化算法复杂度计算的许多细节,提取主要成分。 2个语句各执行1次,共执行2次。时间复杂度为O(1) 第1章作业 习题1: 1, 2, 3, 4, 5 例1-8 把欧几里德算法设计成子模块,通过主模块调用实现求n个整数的最大公约数。 // 实现欧几里德算法的函数,c135 (可加c135在VC++6.0的链接)

文档评论(0)

kehan123 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档