第8章 算法基础
大学计算机基础算法

《大学计算机基础》 主讲人:赵丕锡教授
8.2.1 什么是数据结构?
例8.5 无序表的顺序查找与有序表的对分查找。
《大学计算机基础》 主讲人:赵丕锡教授
现实世界中存在的一切个体都可以是数据元素。
例如:“春、夏、秋、冬”,可以作为季节的数据元素;
“26、56、65、 73、26、…”,可以作为数值的数据元素;
《大学计算机基础》
第8章 数据结构与算法
程序是什么?
程序=数据结构+算法!
大连民族学院计算机学院 赵丕锡教授
例:某校对100个学生进行奖励,学生信息存在磁盘文件“file.dat”中, 条件是其三门成绩全部在90分以上才能进行奖励,打印出被奖励学生 的学号。
以C语言为例,程序代码如下: #include <stdio.h> Void main() { struct stu /*数据类型*/ { int num; float score[3]; }a[100]; /* 定义变量*/ FILE *fp; Int I,j; fp=fopen(“file.dat”,”r”); /* 打开文件file.dat*/
对操作的描述。即对数据的操作处理步骤。
程序:就是用计算机语言表示的数据结构和算法。 程序设计:用计算机语言编写程序的过程。两个基本步骤: 1、设计数据结构和算法。 2、用一种计算机语言表示出来。
因此,数据结构与算法是程序设计的基础。
《大学计算机基础》 主讲人:赵丕锡教授
8.1 算
法
8.1.1 算法的基本概念
首先计算区间的中点c=(a+b)/2,然后计算函数在中点c的值f (c),并判断f (c)是否为0。若f(c)=0,则说明c就是所求的根, 求解过程结束;如果f (c)≠0,则根据以下原则将原区间减半:
数据结构 第8章

数据结构第8章在数据结构的学习旅程中,第8 章往往会带来一些新的概念和挑战。
这一章通常会深入探讨一些复杂但实用的数据结构,为我们解决实际问题提供更多有力的工具。
让我们先来谈谈第 8 章可能会涉及到的一种重要数据结构——树。
树是一种分层的数据结构,它就像一棵倒立的树,有一个根节点,然后从根节点向下延伸出许多分支,每个分支又可以继续延伸出子分支。
树的结构使得数据的存储和检索变得更加高效。
比如二叉树,它的每个节点最多只有两个子节点,左子节点和右子节点。
通过合理的构建和遍历算法,我们可以快速地查找、插入和删除节点中的数据。
在实际应用中,树结构有着广泛的用途。
比如文件系统的目录结构就是一种树状结构。
从根目录开始,一级一级地向下展开,每个文件夹都可以看作是树的一个节点。
还有决策树,在机器学习和数据分析中经常被用到。
它通过一系列的条件判断,将数据逐步分类,帮助我们做出决策。
除了树,第 8 章可能还会讲到图。
图是一种更加复杂但强大的数据结构,它由顶点和边组成。
顶点表示对象,边表示顶点之间的关系。
图可以分为有向图和无向图。
有向图中的边是有方向的,而无向图中的边没有方向。
图的应用场景也非常丰富。
比如社交网络,每个人可以看作是一个顶点,人与人之间的关系就是边。
通过分析图的结构,我们可以了解社交网络中的信息传播、社区结构等。
在交通网络中,城市是顶点,道路是边,利用图算法可以找到最优的路径规划。
另外,第 8 章可能还会涉及到一些针对树和图的算法。
比如树的遍历算法,常见的有前序遍历、中序遍历和后序遍历。
这些遍历算法可以帮助我们按照特定的顺序访问树中的节点,从而实现对树中数据的处理。
对于图,最短路径算法是非常重要的,比如迪杰斯特拉算法和弗洛伊德算法,它们可以帮助我们在图中找到两个顶点之间的最短路径。
在学习第 8 章的过程中,可能会遇到一些困难。
因为这些数据结构和算法相对复杂,需要我们有较强的逻辑思维和抽象能力。
但是,只要我们坚持不懈,多做练习,通过实际的编程实现来加深对这些概念的理解,就一定能够掌握。
python课程设计与算法基础

python课程设计与算法基础一、课程目标知识目标:1. 掌握Python编程语言的基本语法和结构,理解变量、数据类型、运算符等概念。
2. 学习算法基础,了解顺序、选择、循环等基本控制结构,并能够运用它们解决问题。
3. 学会使用函数进行代码封装,理解函数的定义、调用和参数传递。
4. 掌握基本的列表和字典数据结构,并能够运用它们进行数据处理。
技能目标:1. 培养学生的编程思维和逻辑思维能力,能够运用Python语言编写简单的程序解决实际问题。
2. 提高学生分析问题、设计算法和编写代码的能力,培养解决问题的策略和技巧。
3. 培养学生合作学习和团队协作的能力,能够与他人共同完成编程任务。
情感态度价值观目标:1. 培养学生对计算机编程的兴趣和热情,激发学生的学习积极性。
2. 培养学生勇于尝试、不怕失败的精神,培养面对困难时的坚持和毅力。
3. 增强学生的自信心,培养他们在编程学习中不断探索和创新的意识。
4. 培养学生遵守编程规范,养成良好的编程习惯,提高代码质量和可读性。
本课程针对的是具有一定计算机基础的学生,课程性质为理论与实践相结合。
在教学过程中,要注重引导学生主动参与,培养他们的动手实践能力。
同时,根据学生的特点和教学要求,将课程目标分解为具体的学习成果,以便进行后续的教学设计和评估。
通过本课程的学习,使学生能够掌握Python编程基础,为后续学习更高级的编程知识和技能打下坚实基础。
二、教学内容1. Python基本语法与结构- 变量、数据类型、常量- 运算符、表达式、赋值语句- 代码注释、缩进规范2. 算法基础- 顺序结构- 选择结构(if语句)- 循环结构(for循环、while循环)3. 函数- 函数定义、调用- 参数传递、返回值- 递归函数、匿名函数4. 数据结构- 列表(列表创建、列表操作、列表切片)- 字典(创建字典、访问字典、修改字典)5. 编程实践- 简单程序示例(计算器、温度转换等)- 小项目(学生信息管理系统、简易游戏等)教学内容按照课程目标进行选择和组织,保证科学性和系统性。
算法分析与设计概论

9
How to Study Algorithm?
“Sometimes we have experiences, and sometimes not. Therefore, the better way is to learn more."
10
1.1 算法与程序
算法:是满足下述性质的指令序列。
输 入:有零个或多个外部量作为算法的输入。 输 出:算法产生至少一个量作为输出。 确定性:组成算法的每条指令清晰、无歧义。 有限性:算法中每条指令的执行次数有限,执行 每条指令的时间也有限。
1) 第一种解法:
输入:所购买的三种鸡的总数目n 输出:满足问题的解的数目k,公鸡,母鸡,小鸡的只数g[ ],m[ ],s[ ] 1. void chicken_question(int n,int &k,int g[ ],int m[ ],int s[ ]) 2. { int a,b,c; 4. k = 0; 5. for (a=0;a<=n;a++) 6. for (b=0;b<=n;b++) 7. for (c=0;c<=n;c++) { 8. if ((a+b+c==n)&&(5*a+3*b+c/3==n)&&(c%3==0)) { 9. g[k] = a; 10. m[k] = b; 11. s[k] = c; 12. k++; 13. }}}
矩阵。
数组 T:表示售货员的路线,依次存放旅行路线中的城 市编号。
售货员的每一条路线,对应于城市编号的一个排列。
n 个城市共有 n! 个排列,采用穷举法逐一计算每一条路线的费 用,从中找出费用最小的路线,便可求出问题的解。
c语言(算法流程图)

N i<n?
Y t*=i;sum+=t;
iቤተ መጻሕፍቲ ባይዱ=2 输出sum
结束 用流程图表示
8.7 跟我上机
2. 将1到100之间 能用3或5整 除的数打印 出来。
开始
i赋初值为1
N i<=100?
Y N
i能被3或5整 除? Y 打印i
i++
结束
用流程图表示
i赋初值为1
i<=100?
i能被3或5整 除?
N d>=0?
x2=x-sqrt(-d)/(2a) x1=x+ sqrt(-d)/(2a)
输出结果
8.7 跟我上机
开始 输入n的值
1. 求1!+3!+5!+……+N!的值。N
i赋值为1 t赋初值为1
由键盘输入,且为奇数。
sum赋初值为0
输入n的值 t赋初值为1; i赋值为1
sum赋初值为0 i<n? t*=I; s+=t; i+=2
求最大公约数通常用“辗转相除法”,
方法如下:
(1)比较两数,并使m大于n。 (2)将m作被除数,n作除数,相除 后余数为r。 (3)将m←n,n←r; (4)若r=0,则m为最大公约数,结 束循环。若r≠0,执行步骤步骤(2) 和(3)。
输入m,n
T
m<n?
F
交换m,n
r←m%n m←n,n←r
r ≠0 输出m
8.3.6 用计算机语言表示算法
计算机语言通常分为三类:即机器语言,汇编语 言和高级语言。
8.4 结构化程序设计方法
结构化程序设计的思想:自顶向下、逐步求 精;
算法设计与分析ppt课件

ACM国际大学生程序设计竞赛
ACM国际大学生程序设计竞赛(英文 全称:ACM International Collegiate Programming Contest(ACM-ICPC或 ICPC)是由美国计算机协会(ACM)主办 的,一项旨在展示大学生创新能力、团队 精神和在压力下编写程序、分析和解决问 题能力的年度竞赛。经过30多年的发展, ACM国际大学生程序设计竞赛已经发展成 为最具影响力的大学生计算机竞赛。赛事 目前由IBM公司赞助。
第3章 动态规划 3.1 矩阵连乘问题 3.2 动态规划算法的基本要素 3.3 最长公共子序列 3.4 最大子段和 3.5 凸多边形最优三角剖分 3.6 多边形游戏 3.7 图像压缩 3.8 电路布线 3.9 流水作业调度 3.10 0-1背包问题 3.11 最优二叉搜索树 3.12 动态规划加速原理
7
1.1 算法与程序
算法:是满足下述性质的指令序列。
输 入:有零个或多个外部量作为算法的输入。 输 出:算法产生至少一个量作为输出。 确定性:组成算法的每条指令清晰、无歧义。 有限性:算法中每条指令的执行次数有限,执行
每条指令的时间也有限。
程序:是算法用某种程序设计语言的具体实现。
4
教材与参考书
教 材:
◦ 算法设计与分析(第三版) 王晓东,2007年 5月,电子工业出版社。
参考书:
◦ 徐士良编,C常用算法程序集,华大学出版 社,1998年
◦ 霍红卫编,算法设计与分析 西安电子科技 大学出版社,2005年
◦ 卢开澄编,计算机算法导引,清华大学出 版社,2003年
5
部分目录
算法分析是计算机领域的“古老”而“前沿” 的课题。
10
大学计算机基础教程-电子教案 第8章 算法设计与实现
基本算法设计方法
8.2.3 递推法与递归法
递推法是一种利用问题本身所具有的递推关系求解问题的方法。所谓 递推,就是从已知的初始条件开始,依据问题本身具有的某种递推关系, 依次推出问题的各个中间结果及最终结果。在实际问题中,内涵的递推关 系需要经过分析才能提取出来。 如对于数的阶乘从小到大的依次运算就属于递推法。由于整数N的阶乘 等于N和(N-1)阶乘的乘积,即N!=N×(N-1)!。从初始条件0!=1
8.2 基本算法设计方法
1
• 8.2.1 蛮力法
2
• 8.2.2 阶梯分段法
3
• 8.2.3 递推法与递归法
8.2
基本算法设计方法
8.2.1 蛮力法
使用计算机进行问题求解的最简单的方法称为蛮力法,又称为穷举法。 基本思路是:首先分析目标问题的解的特点,确定穷举对象、穷举范围和 判定条件,接下来针对整个解空间里面的所有值,一个个依次全部验证是 否是目标问题的解。 在蛮力法设计中,穷举对象和范围的选择是非常重要的,它直接影响算 法的时间复杂度。如求出班级所有学生某门课程的成绩总和,就需要将学生
8.1.2 算法特征和设计要求
一个设计良好的算法应具有以下五个重要的特征: (1)有穷性:算法的有穷性是指算法必须在执行有限个步骤之后)确定性:算法的每一个操作步骤必须要有确切的定义,而不能有 含糊不明确性。
(3)输入:算法可以有0个或多个输入,以描述运算对象的初始环境,
8.1.1
算法基本概念
(1)2006年,美国卡内基梅隆大学(Carnegie Mellon University)计算机科学系 主任周以真教授(Jeannette M. Wing)在美国计算机权威期刊《Communications of the ACM》首次提出“计算思维(Computational Thinking)”的概念。 周教授将计算思维定义为运用计算机科学的基础概念进行问题求解、系统设计、以及 人类行为理解等涵盖计算机科学广度的一系列思维活动。
机械系统动力学
《机械系统动力学》是清华大学出版社出版,杨义勇编著的机械专业书籍。
全书共9章。
介绍了机械系统中常见的动力学问题、机械动力学问题的类型和解决问题的一般过程,讲述了刚性机械系统的动力学分析与设计,含弹性构件的机械系统的动力学,含间隙副机械的动力学,含变质量机械系统动力学以及机械动力学数值仿真数学基础与相关软件。
本书可作为高等院校机械工程专业本科和研究生教材,也可作为从事机械工程研究和设计的技术人员的参考书籍。
《机械系统动力学》内容是集20多年的课程教学经验,在唐锡宽和金德闻1984年编写的《机械动力学》一书的基础上进行体系变更、内容更新、扩充和改写后编著而成的。
全书共9章:第1章绪论,介绍了机械系统中常见的动力学问题、机械动力学问题的类型和解决问题的一般过程,是学习后面内容的基础;第2、3章讲述刚性机械系统的动力学分析与设计,包括机构惯性力平衡的原理与方法;第4章和第5章是含弹性构件的机械系统的动力学,后者内容为含柔性转子机械的平衡原理与方法;第6章是含间隙副机械的动力学;第7章是含变质量机械系统动力学;第8、9章介绍机械动力学数值仿真数学基础与相关软件,并给出了仿真实例。
书后附有103道练习题。
《机械系统动力学》可作为高等院校机械工程专业本科和研究生教材,也可作为从事机械工程研究和设计的技术人员的参考书籍。
机械动力学课程在清华大学的开设已有20多年历史。
近几年,杨义勇在中国地质大学(北京)也开设了机械系统动力学这一学位课程。
上述课程所使用的教材均以唐锡宽、金德闻编写的《机械动力学》(高等教育出版社1984年出版)为基础,加上多种补充教材和讲义。
在多年的教学过程中,随着对课程地位、学生学习的目的和课程体系的不断探索,金德闻先后编写了《高速转子的振动与平衡》、《机械动力学设计》等补充教材和研究生学位课程讲义《现代机械设计理论与方法》中的“机械动力学”部分,金德闻、唐锡宽还配套编写了《机械动力学习题、作业实验汇编》;杨义勇则编写了《机械系统动力学》讲义。
DS第8章 排序
第8章 排序
考纲分析
归并排序算法思想比较简单,但非递归实现比较难,重 点掌握一次归并的实现和归并排序的性能分析。基数排 序不是基于比较的排序方法,在考试中出现的概率比较 低,只要求掌握基数排序的分配和收集过程。 通过本章学习,需要深刻领会各种排序的思想、各种初 始排列(正序、逆序、随机)下算法的执行特点、算法 的性能分析(时间性能、空间性能、稳定性),以及算 法的设计过程,能够在深刻理解各种排序方法的基础上 对各种排序方法进行综合比较。各种排序方法不但要求 会写出来,重要的是理解算法以及算法的执行过程,因 此,复习时要手工运行算法,掌握算法运行过程中的某 些规律。
第8章 排序
8.2 排序的基本概念 1. 考核知识点 5) 排序的分类 根据在排序过程中待排序的所有记录是否全部被 放置在内存中,可将排序方法分为内排序和外排 序两大类。内排序是指在排序的整个过程中,待 排序的所有记录全部被放置在内存;外排序是指 由于待排序的记录个数太多,不能同时放置在内 存,而需要将一部分记录放置在内存,另一部分 记录放置在外存,整个排序过程需要在内外存之 间多次交换数据才能得到排序的结果。
教材P.235.
注意比较次数 比树高少1
8.2 排序的基本概念 典型题解析
选择题2:一个待排序的n个记录可分为n/k组,每组包 含k个记录,且任一组内的各记录分别大于前一组内的 所有记录且小于后一组内的所有记录,若采用基于比较 的排序方法,其时间下界为( )。 A. O(klog2k) B. O(klog2n) C. O(nlog2k) D. O(nlog2n) 解答: C 分析:由题意,只需对每一组记录序列单独排序。对于 具有k个记录的序列进行基于比较的排序,其时间下界 为O(klog2k) ,共n/k组,因此,总的时间下界为 O(n/k*klog2k)= O(nlog2k) 。
大学计算机基础 第8章 程序设计基础
(1)支持对象(Object)的有关概念。 (2)将对象抽象为类(Class)。 (3)类通过继承(ance)形成类层次。 (4)对象间通过传递消息(Message)而相互联系
是将某些对象的相同特征(属性和方法)抽取出来,形成的一个关于这些 对象集合的抽象模型。类具有封装性、继承性、多态性等3个特征。
3. 类(Class)和实例(Instance) 具有相同特性和行为的对象的抽象就是类。因此,对象的抽象是类,类的
具体化就是对象,也可以说类的实例是对象。对象具有所属类的全部属性、 事件和方法。 4. 消息(Message) 面向对象的世界是通过对象与对象间彼此的相互合作来推动的,对象间的 这种相互合作需要有一个协调机制,这样的机制就称为“消息”,它是对 象之间进行通信的结构。
须能在有限的时间内完成。如果在数值计算过程中涉及到无穷数级的 情况,必须根据精度要求确定的计算过程才是有穷算法。 2.确切性,是指算法的每一步骤必须要有确切的定义,不能存在二义 性。 3.输入,是指算法在执行的过程中从外界获取的信息。一个算法可以 有0个或多个输入,当有0个输入时,是指算法本身指定了初始条件。 算法的执行结果总是与输入的初始数据相关的,不同的输入会产生不
算法写好后,要检查算法的正确性和完整性,然后再根据算法 用某种高级语言去编写程序。
8.2.3 常用的基本算法
(1)列举法 列举法通常用于解决“是否存在”或“有哪些可能”等问题。它的基
本思想是根据提出的问题,列举出所有可能的情况,并用问题中给定 的条件检验符合条件的解。列举法比较简单,在使用时,要对问题进 行详细的分析,将与问题有关的知识条理化、系统化,并从中找出规 律,优化方案减少运算工作量是应当注意的问题。 (2)归纳法 归纳是一种抽象,即从特殊现象中找出一般规律。归纳法的基本思想 是,通过分析列举的少量特殊情况,找出一般的关系。但这种方法得 到的结论只是一种猜测,还需要进行证明。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设在a中存放这n个整数,已经 按照从小到大的顺序排序,要 查找的数为x。用L、R、m分 别表示查找数据范围的起点、 终点和中点,m=(L+R)/2, m取整。 ① 如果x=am,则找到,否则 进行下面的判断; ② 如果x< am,x应在L和m1的范围之内查找,则R=m-1, (缩小约一半的查找范围) ③ 如果x> am,x应在m+1 和R的范围之内查找,则L= m+1; ④ 在确定了新的查找范围后, 重复进行以上比较,直到找到 或者L > R。
递归算法要求:
递归算法所体现的“重复”一般有三个要求: ① 每次调用在规模上都有所缩小; ② 相邻两次重复之间有紧密的联系,前一次要为后一次做 准备(通常前一次的输出就作为后一次的输入); ③ 在问题的规模极小时必须用直接给出解答而不再进行递 归调用,因而每次递归调用都是有条件的(以规模未达到直 接解答的大小为条件),无条件递归调用将会成为死循环而 不能正常结束。
流程图表示方法
算法的三种结构
欧几里得算法流程图
(求解最大公约数的流程图)
基本算法介绍
求和
给出系列整数
sum=0
是
系列整数是否结束
否
num=next_ number
sum=sum+num
输出sum
图8.3 求和算法流程图
乘积
(1)将乘积(product)初始化。 (2)循环,在每次迭代中将一个新数与乘积(product)相乘。 (3)退出循环后,输出乘积(product)。 乘积算法通过较小的改动可用来计算xn和n!(阶乘)算法。
穷举法
穷举法(Exhaustive Attack Algorithm), 也称为暴力破解法(Brute-Force Attack)。 其基本思路是:对于要解决的问题,列举出它的所 有可能的情况,逐个判断有哪些是符合问题所要求 的条件,从而得到问题的解。
例如:百钱百鸡问题。这
是中国古代算书《张丘建 算经》中一道著名的百鸡 问题:公鸡每只值5文钱, 母鸡每只值3文钱,而3只 小鸡值1文钱。用100文钱 买100只鸡,问:这100 只鸡中,公鸡、母鸡和小 鸡各有多少只?
第8章 算法基础
算法的基本概念
计算机科学家唐纳德.E.克努斯(Donald E.Knuth) 在他撰写的“The Art of Computer Programming” 中写到:“一个算法,就是一个有穷规则的集合, 其中的规则规定了一个解决某一特定类型的问题的 运算序列。”
算法具有如下基本特征
递归
递归是计算机科学的一个重要概念。递归算法是把 问题转化为规模缩小了的同类问题的子问题。然后 递归调用函数(或过程)来表示问题的解。一个过 程(或函数)直接或间接调用自己本身,这种过程( 或函数)叫递归过程(或函数) 例如,已知1!=1,利用递归算法求整数n(n>2 )的阶乘。( n!= n* (n-1)!来计算n! )
2. 选择排序 选择排序(Selection sort)算法是对冒泡排序 算法的改进,在参加排序 的所有数组元素中找出最 小数据的元素,使它与第 一个元素中的数据相互交 换位置。然后再在余下的 元素中找出次最小数据的 元素,与第二个元素中的 数据相互交换位置,以此 类推,直到所有元素成为 一个有序的序列
算法归纳
求和 求积 最大最小 穷举法 递推法 排序算法
冒泡排序 选择排序
查找算法
顺序查找 二分查找
递归
查找算法
查找是在大量的信息中寻找一个特定的信息元素, 在计算机应用中,查找是常用的基本运算,例如编 译程序中符号表的查找。用关键字标识一个数据元 素,查找时根据给定的某个值,在表中确定一个关 键字的值等于给定值的记录或数据元素。
1. 顺序查找 顺序查找也称为线形 查找,从数据结构线 形表的一端开始,顺 序扫描,依次将扫描 到的结点关键字与给 定值k相比较,若相 等则表示查找成功; 若扫描结束仍没有找 到关键字等于k的结 点,表示查找失败。
2. 二分查找 二分查找又称折半查找,它是一种 效率较高的查找方法。二分查找要 求线形表中的结点按关键字值升序 或降序排列,用给定值k先与中间 结点的关键字比较,中间结点把线 形表分成两个子表,若相等则查找 成功;若不相等,再根据k与该中 间结点关键字的比较结果确定下一 步查找哪个子表,这样一直进行, 直到查找到或查找结束发现表中没 有这样的结点
递归算法解决问题的特点:
① 递归就是在过程或函数里调用自身。 ② 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。 ③ 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以 一般不提倡用递归算法设计程序。 ④ 在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存 储。递归次数过多容易造成栈溢出等。
例,猴子吃桃问题:一 只猴子第一天摘下若干 个桃子,当即吃了一半 ,还不瘾,又多吃了一 个,第二天早上又将剩 下的桃子吃掉一半,又 多吃了一个。以后每天 早上都吃了前一天剩下 的一半零一个。到第10 天只剩下一个桃子了。 求第一天共摘了多少。
排序算法
1. 冒泡排序
图 8. 7 冒泡排序流程图 冒泡排序(Bubble Sort), 是一种相对比较较简单的排序 算法。它的排序思想是:重复 走访过要排序的数列,一次比 较两个元素,如果他们的顺序 错误就把他们交换过来。走访 数列的工作是重复地进行直到 没有再需要交换,也就是说该 数列已经排序完成。
① ② ③ ④ ⑤ 有穷性(Finiteness) 确定性(Definiteness) 输入项(Input) 输出项(Output) 可行性(Effectiveness)
8.2 算法的三种结构
顺序 分支(选择) 循环
8.3 算法的表示方法
自然语言表示方法
例如,用自然语言描述求解最大公约数(欧几里得算法)的 算法如下: (1) 对于已知两个正整数m,n,使得m>n; (2) 以大数m作被除数,小数n作除数,m除以n得余数r; (3) 若r≠0,m←n,n←r,继续执行步骤(2); (4) 若r=0,则n即为所求的m与n的最大公约数,算法结束。
最大和最小 (1)求一组数中的最大值。 例如,一组数5,3,0,9,6 求其中的最大值,方法如 下: ① 输入第1个数字5; ② 设置m等于第1个数5; ③ 再输入下一个数到x; ④ 比较m和x,如果x大于m,则m=x; ⑤ 判断这组数字是否结束,如果没结束,转③再 重复上面的操作;如果结束就返回最大值m。
递推法
递推算法(Recurrence Algorithm)是一种用 若干步可重复的简单运算来描述复杂问题的方法。 递推算法分为顺推和逆推两种。所谓顺推法是从已 知条件出发,逐步推算出要解决的问题的方法。所 谓逆推法是从已知问题的结果出发,用迭代表达式 逐步推算出问题的开始条件,即顺推法的逆过程。 递推算法是一种理性思维模式的代表,根据已有的 数据和关系,逐步推导出问题的结果。