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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

10/1/2020
计算机科学基础
5.7 算法的方法学
贪心法 分治法 动态规划 回溯法
10/1/2020
计算机科学基础
贪心法
贪心算法(Greedy Algorithm)的基本思想是从小的方案 推广到大的解决方法。它分阶段工作,在每一个阶段选 择最好的方案,而不考虑其后的结果如何。
贪心法主要用于求解最优问题,但它已经发展成为一种 通用的算法设计技术:核心是:
根据图灵理论,只要能够被分解为有限步骤的问 题就可以被计算机执行。
在计算机领域,算法描述主要就是为了能够将算 法的步骤变成计算机能够用它的语言所实现的表 示方式。
算法的正式定义:算法是求解问题步骤的有序集 合,它能够产生结果并在有限时间内结束。
10/1/2020
计算机科学基础
顺序结构
A
B
10/1/2020
计算机科学基础
例:流程图 求N!的算法
10/1/2020
计算机科学基础
例:自然语言 求N!的算法
10/1/2020
计算机科学基础
例:伪代码 求N!的算法
10/1/2020
计算机科学基础
例:伪代码 求N!的算法
10/1/2020
计算机科学基础
5.5 算法的发现
发现算法具有很大的挑战性
○选择法排序
把表中最小的数找到并放入第一个位置,然后比较余 下的数,找到次小的数放到第二个位置,直到对所有 数据全部扫描过。
○冒泡法排序。
10/1/2020
从列表的最后开始比较相邻的两个数,将较小的向前 移动,再和前一个相邻的数据比较,同样把较小的数 向前移动,直到列表的开始。接着继续这个过程,找 到的次小的数排到列表的第二个位置,依次类推,直
回溯法
回溯法也叫穷尽搜索法(Brute-Force Search), 尝试分步地去解决一个问题。在分步解决问题的 过程中,当它通过尝试发现现有的分步答案不能 得到有效的、正确的解答的时候,将取消上一步 甚至上几步的计算,再通过其他的可能的分步解 答再次尝试寻找问题的答案。通常使用递归实现 。
例:n皇后问题。
分支结构
Yes
No
条件
A
B
10/1/2020
计算机科学基础
A
条件
Yes
No
(a)While结构
A
No 条件
Y es
(b) Until结构
10/1/2020
计算机科学基础
5.4 算法的表示
算法的表示是为了把算法以某种形式加以表达, 因此一个算法的表示可以有不同的方法,常用的 :
自然语言 传统的流程图 结构流程图 伪代码 PAD图
“中国邮递员问题”: 不但要选择路径,而且要确保这个选择的路径是最短的 。
解决问题的4个步骤:
1.理解问题 2.设计一个解决问题的方案 3.执行这个方案 4.检验这个方案
10/1/2020
计算机科学基础
5.6 算法的பைடு நூலகம்例
理解常用的算法进而体会算法的发现、设计,是大 多数学习计算机的人所采用的学习方法。
基本算法
求和 累积 求最大值和最小值 求数的位数
10/1/2020
计算机科学基础
迭代
一种建立在循环基础上的算法。
举例:“判断一个整数是否为素数”的迭代算法
算法思路:素数是指只能被1和它本身整除的数。判断它的方法为: 将n(设n是要被判断的整数)作为被除数,用2~(n-1)之间的各 个整数轮流去除,如果都不能整除,则n是素数。
10/1/2020
计算机科学基础
分治法
基本思想就是,将一个较大规模的问题分解为若干 个较小规模的子问题,找出子问题的解,然后把各 个子问题的解合并成整个问题的解。
分治法的分(Divide)是指划分较大问题为若干个 较小问题,递归求解子问题;分治法的治( Conquer)是指从小问题的解构建大问题的解。
例: 金块问题
10/1/2020
计算机科学基础
动态规划
动态规划(Dynamic Programming)被描述为 :如果一个较大问题可以被分解为若干个子问 题,且子问题具有重叠,可以将每个子问题的 解存放到一个表中,这样就可以通过查表解决 问题。
例:背包问题
10/1/2020
计算机科学基础
10/1/2020
计算机科学基础
递归
递归是算法的自我调用
例:求N的阶乘。
10/1/2020
计算机科学基础
排序
迭代的延续应用。是将一组原始数据按照递增或递减的规律 进行重新排列的算法。排序不仅用在数值方面,也用在文 本处理中。排序规则是递增或递减,其输出是原数据的一 种重新排列。
常用的方法有:(如果是从小到大排序的话)
计算机科学基础
查找问题
把一个特定的数据从列表中找到并提供它所在的位置(即 索引)。对于列表数据有两种基本的方法:
顺序查找
从列表的第一个数据(或叫做元素)开始,但给定的数 据和表中的数据匹配时,查找过程结束,给出这个数据 所在表中的位置。
折半查找
也叫二分法,从列表的一半开始,比较列表处于一半( 中间)位置的数据,判断是在前半部分还是后半部分( 根据列表的排序确定的)。
10/1/2020
计算机科学基础
5.8 数据表达和数据结构
算法最终都需要通过适当的数据表达,以 便能够被计算机所处理。数据表达是对数据 的符号化表示。 数据结构的定义包括三方面内容: 逻辑结构、存储结构和对数据的操作。 按照它的结构形式可以分为链、表、堆、 队、树等。
10/1/2020
计算机科学基础
○ 可行性——每一步选择必须满足问题的约束; ○ 局部最优——它是当前可选择的方案中最优的; ○ 不可取消性——选择一旦做出,在算法的其后步骤中不能被取
消。
贪心法不能确定得到的最后解是最优的,也不能用于求 解最大或最小问题。在算法的效率上,贪心法快速,程 序实现需要的内存开销也较小。但遗憾的是,它们往往 是不正确的。然而一旦被证明是正确的,其执行效率和 速度有很大的优势。
CS, ZJU 10/1/2020
Chapter 5 算法基础
Overview
算法的概念 算法的分类和特性 算法的三种结构 算法的表示 算法的发现 常用算法 算法的方法 数据表达和数据结构
10/1/2020
计算机科学基础
5.1 算法的概念
广义地说,为解决问题而采用的方法和步骤就是 算法。在计算机中,算法是程序设计的基础,算 法的质量直接影响程序运行的效率。
数据元素是数据的基本单位,数据元素之间存在某种关联 。有三类基本的数据之间的结构,如
相关文档
最新文档