Chap 5_算法基础

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
求和 累积 求最大值和最小值 求数的位数
2012-5-24
计算机科学基础
14
迭代
一种建立在循环基础上的算法。 举例:“判断一个整数是否为素数”的迭代算法
算法思路:素数是指只能被1和它本身整除的数。判断它的方法为: 将n(设n是要被判断的整数)作为被除数,用2~(n-1)之间的各 个整数轮流去除,如果都不能整除,则n是素数。
2012-5-24
计算机科学基础
23
5.8 数据表达和数据结构
算法最终都需要通过适当的数据表达,以便 能够被计算机所处理。数据表达是对数据的 符号化表示。 数据结构的定义包括三方面内容: 逻辑结构、存储结构和对数据的操作。 按照它的结构形式可以分为链、表、堆、队、 树等。
2012-5-24
计算机科学基础
2012-5-24
计算机科学基础
27
2012-5-24
计算机科学基础
3
5.2 算法的分类和特点
算法一般可分成两大类:
数值运算算法 非数值运算算法
特性
确定性:算法中的每一个步骤都应该是确定的,不应使不同 的编程者对算法中的描述产生不同的理解 有穷性:算法中的步骤应该是有限的,否则计算机就会永远 无休止地执行程序 有效性:算法中的每一个步骤都应该被有效地执行,并应能 得到一个明确的结果 可有零个或多个输入 有一个或多个输出
2012-5-24
计算机科学基础
17
查找问题
把一个特定的数据从列表中找到并提供它所在的位置(即 索引)。对于列表数据有两种基本的方法: 顺序查找 从列表的第一个数据(或叫做元素)开始,但给定的数 据和表中的数据匹配时,查找过程结束,给出这个数据 所在表中的位置。 折半查找 也叫二分法,从列表的一半开始,比较列表处于一半 (中间)位置的数据,判断是在前半部分还是后半部分 (根据列表的排序确定的)。
CS, ZJU 5/24/2012
Overview
算法的概念 算法的分类和特性 算法的三种结构 算法的表示 算法的发现 常用算法 算法的方法 数据表达和数据结构
2012-5-24
计算机科学基础
2
5.1 算法的概念
广义地说,为解决问题而采用的方法和步骤就是 算法。在计算机中,算法是程序设计的基础,算 法的质量直接影响程序运行的效率。 根据图灵理论,只要能够被分解为有限步骤的问 题就可以被计算机执行。 在计算机领域,算法描述主要就是为了能够将算 法的步骤变成计算机能够用它的语言所实现的表 示方式。 算法的正式定义:算法是求解问题步骤的有序集 合,它能够产生结果并在有限时间内结束。
24
数据元素是数据的基本单位,数据元素之间存在某种关联。 有三类基本的数据之间的结构,如 线性结构:结构中的数据元素存在一对一的关系; 树型结构:结构中的数据元素存在一对多的关系; 网状结构:结构中的数据元素存在多对多的关系;
2012-5-24
计算机科学基础
25
数据的逻辑关系反映的是数据间的关系,是静态的。 静态的对象和动态的作用于对象上的操作就构成了数 据类型。如何用程序设计语言实现相应的抽象数据类 型是数据结构的一个重要问题:
2012-5-24
计算机科学基础
21
动态规划
动态规划(Dynamic Programming)被描述为: 如果一个较大问题可以被分解为若干个子问题, 且子问题具有重叠,可以将每个子问题的解存 放到一个表中,这样就可以通过查表解决问题。 例:背包问题
2012-5-24
计算机科学基础
22
回溯法
回溯法也叫穷尽搜索法(Brute-Force Search), 尝试分步地去解决一个问题。在分步解决问题的 过程中,当它通过尝试发现现有的分步答案不能 得到有效的、正确的解答的时候,将取消上一步 甚至上几步的计算,再通过其他的可能的分步解 答再次尝试寻找问题的答案。通常使用递归实现。 例:n皇后问题。
○ 可行性——每一步选择必须满足问题的约束; —— ○ 局部最优——它是当前可选择的方案中最优的; ○ 不可取消性——选择一旦做出,在算法的其后步骤中不能被取
消。
贪心法不能确定得到的最后解是最优的,也不能用于求 解最大或最小问题。在算法的效率上,贪心法快速,程 序实现需要的内存开销也较小。但遗憾的是,它们往往 是不正确的。然而一旦被证明是正确的,其执行效率和 速度有很大的优势。
2012-5-24
计算机科学基础
18
5.7 算法的方法学
贪心法 分治法 动态规划 回溯法
2012-5-24
计算机科学基础
19
贪心法
贪心算法(Greedy Algorithm)的基本思想是从小的方案 推广到大的解决方法。它分阶段工作,在每一个阶段选 择最好的方案,而不考虑其后的结果如何。 贪心法主要用于求解最优问题,但它已经发展成为一种 通用的算法设计技术:核心是:
2012-5-24
计算机科学基础
15
递归
递归是算法的自我调用 例:求N的阶乘。
2012-5-24
计算机科学基础
16
排序
迭代的延续应用。是将一组原始数据按照递增或递减的规 律进行重新排列的算法。排序不仅用在数值方面,也用在 文本处理中。排序规则是递增或递减,其输出是原数据的 一种重新排列。
常用的方法有:(如果是从小到大排序的话) ○ 选择法排序 把表中最小的数找到并放入第一个位置,然后比较余下的 数,找到次小的数放到第二个位置,直到对所有数据全部 扫描过。 ○ 冒泡法排序。 从列表的最后开始比较相邻的两个数,将较小的向前移动, 再和前一个相邻的数据比较,同样把较小的数向前移动, 直到列表的开始。接着继续这个过程,找到的次小的数排 到列表的第二个位置,依次类推,直到结束。
对象如何用程序设计语言来表示,即对象逻辑结构的物 理实现; 对象的操作如何实现,即编写相应的函数; 例:队列
2012-5-24
计算机科学基础
26
思考题
请解释算法的正式定义。 使用伪代码表示求1~1000之间的偶数之和。 计算1+1/2+1/3+…+1/n是使用迭代算法,尝试使用 伪代码表示的迭代算法实现。 对下列数据,给出冒泡法排序每次扫描得到的数据 排列结果: 2 34 7 -1 -100 15 89
计算机科学基础
5
分支结构 顺序结构
A
B
Yes 条件 No
A
B
2012-5-24
计算机科学基础
6
A Yes 条件
A
No 条件
No
Yes
(a)While结构
(b) Until结构
2012-5-24
计算机科学基础
7
5.4 算法的表示
算法的表示是为了把算法以某种形式加以表达, 因此一个算法的表示可以有不同的方法,常用的:
2012-5-24
计算机科学基础
4ቤተ መጻሕፍቲ ባይዱ
5.3 算法的三种结构
根据结构化程序设计,所有的程序都由三种结构构成: 顺序结构
最简单的一种结构,它使计算机按照命令出现的先后顺序依次执行
循环结构
使计算机按照设定的条件重复执行一组命令
分支结构
在程序执行过程中 ,根据设定的条件来决定程序的执行方向
2012-5-24
自然语言 传统的流程图 结构流程图 伪代码 PAD图
2012-5-24
计算机科学基础
8
例:流程图 求N!的算法
2012-5-24
计算机科学基础
9
例:自然语言 求N!的算法
2012-5-24
计算机科学基础
10
例:伪代码 求N!的算法
2012-5-24
计算机科学基础
11
例:伪代码 求N!的算法
2012-5-24
计算机科学基础
12
5.5 算法的发现
发现算法具有很大的挑战性
“中国邮递员问题”: 不但要选择路径,而且要确保这个选择的路径是最短的。
解决问题的4个步骤:
1. 理解问题 2. 设计一个解决问题的方案 3. 执行这个方案 4. 检验这个方案
2012-5-24
计算机科学基础
13
5.6 算法的举例
理解常用的算法进而体会算法的发现、设计,是大 多数学习计算机的人所采用的学习方法。 基本算法
2012-5-24
计算机科学基础
20
分治法
基本思想就是,将一个较大规模的问题分解为若干 个较小规模的子问题,找出子问题的解,然后把各 个子问题的解合并成整个问题的解。 分治法的分(Divide)是指划分较大问题为若干个 较小问题,递归求解子问题;分治法的治 (Conquer)是指从小问题的解构建大问题的解。 例: 金块问题
相关文档
最新文档