Chap5算法基础 计算机科学基础课件.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
CS, ZJU * 广义地说,为解决问题而采用的方法和步骤就是算法。在计算机中,算法是程序设计的基础,算法的质量直接影响程序运行的效率。 根据图灵理论,只要能够被分解为有限步骤的问题就可以被计算机执行。 在计算机领域,算法描述主要就是为了能够将算法的步骤变成计算机能够用它的语言所实现的表示方式。 算法的正式定义:算法是求解问题步骤的有序集合,它能够产生结果并在有限时间内结束。 算法一般可分成两大类: 数值运算算法 非数值运算算法 特性 确定性:算法中的每一个步骤都应该是确定的,不应使不同的编程者对算法中的描述产生不同的理解 有穷性:算法中的步骤应该是有限的,否则计算机就会永远无休止地执行程序 有效性:算法中的每一个步骤都应该被有效地执行,并应能得到一个明确的结果 可有零个或多个输入 有一个或多个输出 根据结构化程序设计,所有的程序都由三种结构构成: 顺序结构 最简单的一种结构,它使计算机按照命令出现的先后顺序依次执行 循环结构 使计算机按照设定的条件重复执行一组命令 分支结构 在程序执行过程中 ,根据设定的条件来决定程序的执行方向 算法的表示是为了把算法以某种形式加以表达,因此一个算法的表示可以有不同的方法,常用的: 自然语言 传统的流程图 结构流程图 伪代码 PAD图 发现算法具有很大的挑战性 “中国邮递员问题”: 不但要选择路径,而且要确保这个选择的路径是最短的。 解决问题的4个步骤: 理解问题 设计一个解决问题的方案 执行这个方案 检验这个方案 理解常用的算法进而体会算法的发现、设计,是大多数学习计算机的人所采用的学习方法。 基本算法 求和 累积 求最大值和最小值 求数的位数 迭代 一种建立在循环基础上的算法。 举例:“判断一个整数是否为素数”的迭代算法 算法思路:素数是指只能被1和它本身整除的数。判断它的方法为:将n(设n是要被判断的整数)作为被除数,用2~(n-1)之间的各个整数轮流去除,如果都不能整除,则n是素数。 递归 递归是算法的自我调用 例:求N的阶乘。 排序 迭代的延续应用。是将一组原始数据按照递增或递减的规律进行重新排列的算法。排序不仅用在数值方面,也用在文本处理中。排序规则是递增或递减,其输出是原数据的一种重新排列。 常用的方法有:(如果是从小到大排序的话) 选择法排序 把表中最小的数找到并放入第一个位置,然后比较余下的数,找到次小的数放到第二个位置,直到对所有数据全部扫描过。 冒泡法排序。 从列表的最后开始比较相邻的两个数,将较小的向前移动,再和前一个相邻的数据比较,同样把较小的数向前移动,直到列表的开始。接着继续这个过程,找到的次小的数排到列表的第二个位置,依次类推,直到结束。 查找问题 把一个特定的数据从列表中找到并提供它所在的位置(即索引)。对于列表数据有两种基本的方法: 顺序查找 从列表的第一个数据(或叫做元素)开始,但给定的数据和表中的数据匹配时,查找过程结束,给出这个数据所在表中的位置。 折半查找 也叫二分法,从列表的一半开始,比较列表处于一半(中间)位置的数据,判断是在前半部分还是后半部分(根据列表的排序确定的)。 贪心法 分治法 动态规划 回溯法 贪心法 贪心算法(Greedy Algorithm)的基本思想是从小的方案推广到大的解决方法。它分阶段工作,在每一个阶段选择最好的方案,而不考虑其后的结果如何。 贪心法主要用于求解最优问题,但它已经发展成为一种通用的算法设计技术:核心是: 可行性——每一步选择必须满足问题的约束; 局部最优——它是当前可选择的方案中最优的; 不可取消性——选择一旦做出,在算法的其后步骤中不能被取消。 贪心法不能确定得到的最后解是最优的,也不能用于求解最大或最小问题。在算法的效率上,贪心法快速,程序实现需要的内存开销也较小。但遗憾的是,它们往往是不正确的。然而一旦被证明是正确的,其执行效率和速度有很大的优势。 分治法 基本思想就是,将一个较大规模的问题分解为若干个较小规模的子问题,找出子问题的解,然后把各个子问题的解合并成整个问题的解。 分治法的分(Divide)是指划分较大问题为若干个较小问题,递归求解子问题;分治法的治(Conquer)是指从小问题的解构建大问题的解。 例: 金块问题 动态规划 动态规划(Dynamic Programming)被描述为:如果一个较大问题可以被分解为若干个子问题,且子问题具有重叠,可以将每个子问题的解存放到一个表中,这样就可以通过查表解决问题。 例:背包问题 回溯法 回溯法也叫穷尽搜索法(Brute-Force Search),尝试分步地去解决一个问题。在分步解决问题的过程中,当它通过尝试发现现有的分步答案不能得到有效的、正确的解答的时候,将取消上一步甚至

文档评论(0)

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

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

1亿VIP精品文档

相关文档