1精简-计算机算法概述(第一章)

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
28
例:
问题分析图实例
29
30
5.伪代码
伪代码是用介于自然语言和计算机语言之间的文 字和符号来描述算法的工具。它不用图形符号,因此 书写方便,格式紧凑,易于理解,便于用计算机程序 设计语言实现。
如:类JAVA/类C/类C++
31
6.程序设计语言的缺点:
① 算法的基本逻辑流程难于遵循。与自然语言一样, 程序设计语言也是基于串行的,当算法的逻辑流程较 为复杂时这个问题就变得更加严重。 ② 特定程序设计语言编写的算法限制了与他人的交流, 不利于问题的解决。 ③ 要花费大量的时间去熟悉和掌握某种特定的程序设 计语言。 ④ 要求描述计算步骤的细节而忽视算法的本质。 ⑤ 需要考虑语法细节,而扰乱算法设计的思路。 ⑥ 考虑到程序设计语言不断更新,不适于描述算法。 算法设计一般不用程序设计语言直接描述。

计算gcd(m,n)的连续整数检测算法
第一步:将min{m,n}的值赋给d。 第二步:m除以d,若余数为0,进入第三步;否则第四步。 第三步:n除以d,若余数为0,返回d值(结果);否则第四步。 第四步:把d的值减1,返回第二步。 例如:对于60和24这两个数,该算法会先尝试24,然后是 23,这样一直尝试到12,算法结束。
32
自然语言
示例:求解斐波那契数
0,1,1,2,3,5,8,13,21,34,… (1)
来源于 1202 年意大利数学家斐波那契( L.P.Fibonacci) 在其《珠算之书》(Liber Abaci)中提出的“兔子问题”。
假设一对刚出生的兔子一个月后就能长大,再过一个月就能
生下一对兔子,并且此后每个月都能生一对兔子,且新生的
同一个问题有不同的解决方法!
22
欧几里德算法



gcd ( m, n ) = gcd ( n, m mod n ) gcd ( 24, 18 ) = gcd ( 18, 6 ) = gcd ( 6, 0 ) = 6 输入 正整数m和n 输出 m和n的最大公因子

同 一 个 1. 如果n = 0, 计算停止返回m, m即为结果;否则继续2。 算 法 2. 记r为m除以n的余数,即r=m mod n。 有 3. 把n赋值给m,把r赋值给n,继续1。 不 Begin 伪代码如下: 同 Euclid(m, n) 的 { 表 n=0? while n<> 0 达 { N 方 r = m % n; Y r=m mod n 式 m = n; m=n ! n = r;



广播操图解是广播操的算法; 菜谱是做菜的算法; 歌谱是一首歌曲的算法; 空调说明书是空调使用的算法等
4
例1:给出求1+2+3+4+5的一个算法。
算法1 按照逐一相加的程序进行。
第一步
第二步 第三步 第四步
计算1+2,得到3;
将第一步中的运算结果3与3相加,得到6; 将第二步中的运算结果6与4相加,得到10;
学会对算法的时间和空间复杂性进行分析,掌握提 高算法效率的方法和途径。(评价有效算法)
12
学习目标:“用计算机求解问题”
一般计算机对现实问题无能为力,需要人类对 问题抽象化、形式化后才能去机械的执行。





问题分析:准确、完整地理解和描述问题 数学模型建立 算法设计与选择:创造性的活动 算法表示:思想的表示形式 算法分析:算法时空特性分析 算法实现 程序调试:测试 结果整理文档编制
13
绪 论
14
1.1 算法
1.

什么是算法?
算法是指解决问题的一种方法或一个过程。
算法是若干指令的有穷序列。
15
2.
算法的五个重要特性
确定性、输入、输出、有穷性/有限性
1)确定性 算法每种运算必须有确切定义,不能有二义性。 例:不符合确定性的运算: ①5/0 ②将6或7与x相加 ③未赋值变量参与运算
兔子在第二个月后也是每个月生一对兔子。 问:一对兔子一年内可繁殖成多少对兔子?
求解斐波那契数
在序列(1)中,每个数都是它的前两个数之和;
用Fn表示这个序列的第n个数,
该序列可以形式化地定义为: F0=0,F1=1,Fn+2=Fn+1+Fn,n≥0
递归定义
求斐波那契数列的前n个数
斐波那契数列:F0=0,F1=1,Fn+2=Fn+1+Fn (n≥0)
设变量 X 表示前一个已经求出的数 ( 对应于 Fn) ,变量 Y 表示当前求出的数(对应于Fn+1),变量Z表示下一个将要求的 数(对应于Fn+2);变量I表示当前求出的是第I个数。 则:
(1)如果n=0,则将0赋值给Y,输出Y,转步骤(11); (2)将0赋给X,将1赋值给Y;
(3)输出X、Y;
X=0,Y=1
Print X,Y
I=1
Y
I>n-1?
N
Z=X+Y X=Y Y=Z
Print Y
结束
I=I+1
伪代码

示例:求解斐波那契数
if n = =0 { Y←0 Print Y } else { X←0 Y←1 Print X,Y For (i=1;i<=n–1;i++) { Z ← X+Y X←Y Y←Z Print Y } }
程序=数据结构+算法
9
现代科学研究的三大支柱
理 论 研 究 科 学 实 验 科 学 计 算
研究算法
10
21世纪信息社会的两个主要特征:
“计算机无处不在”
“数学无处不在” 21世纪信息社会对科技人才的要求:
--会“用数学”解决实际问题。
--会用计算机进行科学计算。
11
How to study?
本课程为计算机科学与技术学科本科生的专业课。 通过该课程的学习,对计算机常用算法有一个全 盘的了解,掌握通用算法的一般设计方法。
斐波那契数列: F0=0,F1=1
Y=0
Print Y
,Fn+2=Fn+1+Fn (n≥0) 设变量X , Y, Z, I表示……
(1)如果n=0,则将0赋值给Y,输 出Y,转步骤(11); (2)将0赋给X,将1赋值给Y; (3)输出X、Y; (4)将1赋值给I; (5)如果 I 大于 n -1 ,则转到步骤 (11),否则继续执行; (6)将X和Y的和赋值给Z; (7)将Y赋值给X; (8)将Z赋值给Y; (9)将Y输出; ( 10 )将 I 加 1 ,转步骤( 5 )继续 执行; (11)算法结束。
例1.1
求两个正整数的最大公约数。
数学模型:m,n>0 整数,求d,d能整除m,n,且m/d 与n/d互质。 一般求d=gcd(m,n)的过程用自然语言可以描述如下: (1) 找出m的素因子。 (2) 找出n的素因子。 (3) 从第(1) (2)步求得的素因子中找出m,n的公共素因子。 (4) 将第(3)步找到的素因子相乘,其结果即为m,n的最 大公约数。
25
2.流程图
主要缺点:
①使算法设计人员过早考虑算法 控制流程,而不去考虑全局结 构,不利于逐步求精。 ②随意性太强,结构化不明显。 ③不易表示数据结构。 ④层次感不明显。
开始 输入正整数m和n
r←m被n除的余数
Y
r等于0?
N
m ← n; n ← r
r←m被n除的余数
输出n的值
结束
26
3.盒图(NS流程图)

例如操作系统,是一个在无限循环中执行的程序,因而
不是一个算法。

操作系统的各种任务可看成是单独的问题,每一个问题 由操作系统中的一个子程序通过特定的算法来实现。该 子程序得到输出结果后便终止。
18
4.问题求解
理解问题 精确解或近似解 选择数据结构 算法设计策略 设计算法
证明正确性
分析算法 设计程序
将第三步中的运算结果10与5相加,得到15。
5
算法2
可以运用公式
n(n 1) 1 2 3 n 直接计算; 2
第一步 第二步 第三步 取n=5; 计算 n(n 1)
2
输出运算结果。
6
例2:三个牧师和三个野人过河,只有一条能装下 两人的船,在河的任一边或者船上,若野人人数 大于牧师人数,那么牧师就会有被吃掉的危险。 你能不能找出一种安全的渡河算法呢? 第一步 第二步 第三步 第四步 第五步 第六步 两个野人先过河,一个野人回来; 再两个野人过河,一个野人回来; 两个牧师过河,一个野人和一个牧师回来; 两个牧师过河,一个野人回来; 两个野人过河,一个野人回来; 两个野人过河。
输入正整数m和n
(1)盒图具有以下优点: ① 层次感强、嵌套明确。 ② 支持自顶向下、逐步求精。 ③ 容易转换成高级语言源算法。 (2)主要缺点:
r←m被n除的余数
当r不等于 0
m ← n; n ← r
r←m被n除的余数
输出n的值
不易扩充和修改,不易描述大型复杂算法。
27
4. PAD图
问题分析图(Problem Analysis Diagram, 简称PAD)表示 的算法是一个二维树形结构图,层次感强、嵌套明确且有 明确的控制流程。 PAD图的主要优点: ①设计出来的算法必是结构化的。 ②PAD图描绘的算法结构清晰。 ③用PAD图表现的算法逻辑,易读、易懂、易记。 ④容易用软件工具自动将PAD图转换成高级语言源算法。 ⑤既可用于表示算法逻辑,也可用于描绘数据结构。 ⑥支持自顶向下、逐步求精。 缺点:由于是图形符号书写、编辑、录入不方便。
20
计算gcd(m,n)的短除法


算法设计:计算机没有“宏观”能力来“看出”公约数, 但通过“枚举尝试”(逐个尝试)就可以“试出”m,n有 哪些是公约数,并将这些公约数“累乘”,就能得到最大 公约数。 算法描述如下: main( ) 为什么用while? {int m,n,d,i; input (m,n); d=1; //变量d是为累乘因数而设置的; for (i=2; i<=m and i<=n; i++) //“枚举”可能的公约数 while (m mod i=0 and n mod i=0 ) //“试”i是否为公约 数 {d=d*i; m=m/i; n=n/i;} 21 print(d ,“is maximal common divisor”);
2
与其他课程的关系
数据结构
算法分析设计
高级程序设计语言(JAVA, C, C++)
与数据结构的区别: 考虑问题的角度:数据结构关心不同的数据结构在解题中 的作用和效率;算法关心不同设计技术的适用性和效率。
考虑问题的高度:数据结构关心的是解具体问题,算法不 仅如此,它提供一种解决问源自文库的通用方法。
3
What?
(4)将1赋值给I;
求斐波那契数列的前n个数
(5)如果I大于n-1,则转到步骤(11),否则继续执行;
(6)将X和Y的和赋值给Z; (7)将Y赋值给X; (8)将Z赋值给Y; (9)将Y输出; (10)将I加1,转步骤(5)继续执行; (11)算法结束。
流程图
示例:求解斐波那契数
开始 n=0? Y N
7
算法
广义:在解决问题时,按照某种机械步骤一定可 以得到问题结果(有解时给出问题的解,无解时 给出无解的结论)的处理过程。 狭义:用计算机解决问题的方法和步骤的描述。
8
Why to study?
20 世纪最伟大的科学技术发明---计算机; 计算机是对人脑的模拟,它强化了人的思维; 没有软件的支持,超级计算机只是一堆废铁而已。 软件的核心就是算法 !
} }
n=r
end
23
1.2 算法描述
算法 = 控制结构 + 原操作
表示算法的语言主要有: 自然语言 流程图 盒图 PAD图 伪代码 计算机程序设计语言
24
1.自然语言
自然语言是人们日常所用的语言。 自然语言描述算法的缺点: ①自然语言的歧义性易导致算法执行的不确定性。 ②自然语言语句一般太长导致描述的算法太长。 ③当算法中循环和分支较多时就很难清晰表示。 ④不便翻译成程序设计语言理解的语言。
16
2)输入 每个算法有0个或多个输入。 3)输出 一个算法产生一个或多个输出。
4)有穷性/有限性 一个算法总是在执行了有穷步的运算之后终止。也就是 说算法中每条指令的执行次数是有限的,执行每条指令的 时间也是有限的。
17
3. 程序与算法的区别


程序是算法用某种程序设计语言的具体实现。
程序可以不满足算法的性质(4)。
算法分析设计
Design and Analysis to Algorithms
黄新艳
1
教材:
算法设计与分析 王晓东编 清华大学出版社
算法设计与分析 吕国英主编 清华大学出版社
参考书:
计算机算法基础 余祥宣等编 华中科大出版社 计算机算法导引——设计与分析 卢开澄编 清华大学出版社
学时:3+1学时/周
相关文档
最新文档