第1章算法与程序PPT讲稿.ppt
《第1章算法与程序PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《第1章算法与程序PPT讲稿.ppt(92页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第1章算法与程序第1页,共92页,编辑于2022年,星期日第1章 算法与程序1.1 算法的基本概念 1.2 算法的表示1.3 算法的设计与评价1.4 算法与程序第2页,共92页,编辑于2022年,星期日1.1 算法的基本概念1.1.1 什么是算法1.1.2 算法的基本特性第3页,共92页,编辑于2022年,星期日什么是算法 早在公元前300年左右出现的著名的欧几里德算法,就描述了求解两个整数的最大公因子的解题步骤。要求解的问题描述为:“给定两个正整数m和n,求它们的最大公因子,即能同时整除m和n的最大整数”。欧几里德当时给出的算法如下:以n除m,并令所得余数为r(必有rn);若r=0,输出结果
2、n,算法结束;否则继续步骤;令m=n和n=r,返回步骤继续进行。第4页,共92页,编辑于2022年,星期日什么是算法(续)由此,我们可以得出这样的结论,算法就是求解问题的方法和步骤。这里的方法和步骤是一组严格定义了运算顺序的规则;每一个规则都是有效的,且是明确的;按此顺序将在有限次数下终止。有关算法(Algorithm)一词的定义不少,但其内涵基本上是一致的。最为著名的定义是计算机科学家D.E.Kunth在其巨著计算机程序的艺术(Art of Computer Program)第一卷中所做的有关描述。其非形式化的定义是:一个算法,就是一个有穷规则的集合,其中之规则定义了一个解决某一特定类型问题
3、的运算序列。第5页,共92页,编辑于2022年,星期日什么是算法(续)算法的形式化定义如下所述:算法是一个四元组,即(Q,I,F)。其中:Q是一个包含子集I和的集合,它表示计算的状态;I表示计算的输入集合;表示计算的输出集合;F表示计算的规则,它是由Q至它自身的函数,且具有自反性,即对任何一个元素q Q,有F(q)=q。第6页,共92页,编辑于2022年,星期日什么是算法(续)一个算法是对于任何的输入元素x,都在有穷步骤内终止的一个计算方法。在算法的形式化定义中,对任何一个元素xI,x均满足性质 x0=x,xk+1=F(xk),(k0)该性质表示任何一个输入元素x均为一个计算序列,即x0,x1
4、,x2,xk;该序列在第k步结束计算。第7页,共92页,编辑于2022年,星期日1.1 算法的基本概念1.1.1 什么是算法1.1.2 算法的基本特性第8页,共92页,编辑于2022年,星期日算法的基本特性输入(Input)输出(Output)确定性(Definiteness)有穷性(Finiteness)有效性(Effectiveness)第9页,共92页,编辑于2022年,星期日第1章 算法与程序1.1 算法的基本概念 1.2 算法的表示1.3 算法的设计与评价1.4 算法与程序第10页,共92页,编辑于2022年,星期日1.2 算法的表示1.2.1 自然语言表示1.2.2 流程图表示 1
5、.2.3 NS图表示 1.2.4 伪代码表示1.2.5 程序语言表示 第11页,共92页,编辑于2022年,星期日自然语言表示 自然语言即人们日常使用的语言,如汉语、英语、日语、法语、德语等等。使用自然语言描述算法,人们比较容易接受和理解。如前面的欧几里德算法就是用自然语言描述的。然而,自然语言也具有许多缺点,在使用自然语言描述算法时一定要引起注意:自然语言存在着歧义性,容易导致算法的不确定性;自然语言容易冗长,使得描述不够简洁;自然语言的表示形式是顺序的,描述分支选择和转移时不够直观;自然语言与计算机程序设计语言的差别较大,不易转换为程序。第12页,共92页,编辑于2022年,星期日1.2
6、算法的表示1.2.1 自然语言表示1.2.2 流程图表示 1.2.3 NS图表示 1.2.4 伪代码表示1.2.5 程序语言表示 第13页,共92页,编辑于2022年,星期日流程图表示 流程图是描述算法的图形工具,它采用如下所示的一组图形符号来表示算法:起止框,表示算法的开始或结束;只有一个入口或一个出口。输入输出框,表示算法中数据信息的输入和输出;有一个入口和一个出口。判断框,表示条件判断;有一个入口和多个出口。处理框,表示算法中的一个(或一组)运算或处理;有一个入口和一个出口。流程线,表示算法中各步骤之间的次序关系。连接点,表示算法中的连接位置,主要用于同一算法在不同页描述时的接续等情况。
7、注释框,用于对算法中某些操作的注释说明。第14页,共92页,编辑于2022年,星期日流程图表示举例欧几里德算法的流程图描述如图1-1所示 图1-1欧几里德算法的流程图表示noyesmmodnrend读入m,nr=0beginNm,rn输出nm,n为正整数,算法求其最大公因子第15页,共92页,编辑于2022年,星期日流程图表示(续)同自然语言相比,用流程图描述算法直观,可以一目了然;算法步骤间用流程线连接,次序关系清楚,容易理解;可以很方便地表示顺序、选择和循环结构,不依赖于任何计算机和计算机程序设计语言,有利于不同环境下的程序设计。但是,流程图也还存在一些缺点,诸如:不易于表示算法的层次结构
8、;不易于表示数据结构和模块调用关系等重要信息;容易使人过早地考虑算法的控制流程,而忽视算法的全局结构;用流程线代表控制流,控制转移随意性较大。若对流程线的使用不加限制,随着求解问题规模和复杂度的增加,流程图会变得很复杂,使人难以阅读、理解和修改,从而使算法的可靠性难以保证。第16页,共92页,编辑于2022年,星期日1.2 算法的表示1.2.1 自然语言表示1.2.2 流程图表示 1.2.3 NS图表示 1.2.4 伪代码表示1.2.5 程序语言表示 第17页,共92页,编辑于2022年,星期日NS图表示 为了克服传统流程图的缺点,1973年美国学者纳斯(I.Nassi)和施内德曼(B.Shn
9、eiderman)提出了一种表示算法的较好工具N-S图。它独立于任何计算机和计算机语言,又能很方便地转换为计算机语言程序;它去掉了流程线全部用矩形方框来描述,限制了算法流程转移控制的随意性,又节省了篇幅;它很容易表示算法中的嵌套关系和模块中的层次关系,功能域可以从框图中直接反映出来;它仍是图形工具,阅读起来直观、明确、容易理解。第18页,共92页,编辑于2022年,星期日NS图表示(续)N-S图的基本图形符号如下:ABTFPAB当PAA直到P顺序结构,由两个或多个矩形框组成。其中A和B可以是基本操作,也可以是其它基本结构(如选择结构,循环结构)。选择结构,当条件P成立时执行操作A,否则执行操作
10、B。当型循环结构。当条件P成立时反复执行操作A,直到条件P不成立时止。直到型循环结构。反复执行操作A,直到条件P成立时止。第19页,共92页,编辑于2022年,星期日NS图表示举例 由于N-S图象一个多层的盒子,所以也称作盒图。用N-S图表示欧几里德算法如图1-2所示。读入正整数m,n读入正整数m,nm mod nrmr当r0反复做nm,rnnm,rnm mod nrm mod nr直到r=0时止输出最大公因子n输出最大公因子n(a)当型循环结构实现(b)直到型循环结构实现图1-2 欧几里德算法的N-S图表示第20页,共92页,编辑于2022年,星期日1.2 算法的表示1.2.1 自然语言表示
11、1.2.2 流程图表示 1.2.3 NS图表示 1.2.4 伪代码表示1.2.5 程序语言表示 第21页,共92页,编辑于2022年,星期日伪代码表示伪代码是介乎于自然语言和计算机程序语言之间的一种表示算法的工具。它用文字和符号描述问题的求解方法和步骤而不使用图形符号。如同一篇文章自上而下书写,每行写一个基本操作,而用若干行写出一个基本结构。因而书写方便,格式紧凑,清晰易读好理解,也更容易转化为某一计算机程序语言表示的程序。和图形工具相比较,便于修改,但直观性能较弱。第22页,共92页,编辑于2022年,星期日伪代码表示(续)下面,我们给出欧几里德算法的一种伪代码描述如下:Begin(算法开始
12、)Read(m,n)m mod nr while r0 do nm rn m mod nr write(n)End(算法结束)第23页,共92页,编辑于2022年,星期日1.2 算法的表示1.2.1 自然语言表示1.2.2 流程图表示 1.2.3 NS图表示 1.2.4 伪代码表示1.2.5 程序语言表示 第24页,共92页,编辑于2022年,星期日程序语言表示计算机程序设计语言,是计算机能够接受、理解和执行的算法描述工具。计算机不能直接识别自然语言、流程图、N-S图和伪代码等工具描述的算法,而设计算法的目的就是要用计算机来解决问题,算法最终都要用某一具体的计算机程序设计语言来表示。从这个意义
13、上讲,流程图、N-S图和伪代码都仅仅是为了求解问题而设计算法时的辅助工具。为了更好更准确地描述算法,人们使用图形或表格还创造了许多专用的算法设计辅助工具,如PAD图、判定表、数据流图、Warnier-rr图等等。第25页,共92页,编辑于2022年,星期日程序语言表示(续)和自然语言一样,计算机程序设计语言也是串行的描述,很不直观。对于较复杂的问题,人们很难用计算机程序设计语言直接写出程序。所以在算法设计阶段,一般是先采用某个专用的辅助工具来描述算法,在算法设计好之后,再把它转化为某一具体程序设计语言描述的程序。第26页,共92页,编辑于2022年,星期日程序语言表示(续)作为例子,下面我们给
14、出欧几里德算法的C语言描述如下:#include”stdio.h”main()int m,n,r;printf(“请输入两个正整数:”);scanf(“%d%d”,&m,&n);printf(“n%d和%d的最大公约数是:”,m,n);r=m%n;while(r!=0)m=n;n=r;r=m%n;printf(“%dn”,n);运行结果:请输入两个正整数:56 3256和32的最大公约数是:8 第27页,共92页,编辑于2022年,星期日第1章 算法与程序1.1 算法的基本概念 1.2 算法的表示1.3 算法的设计与评价1.4 算法与程序第28页,共92页,编辑于2022年,星期日1.3 算法
15、的设计与评价1.3.1 评价算法的标准1.3.2 算法的环路复杂度1.3.3 算法的时空效率1.3.4 常见的算法设计方法第29页,共92页,编辑于2022年,星期日评价算法的标准评价一个算法优劣的五条标准:正确性可读性健壮性高效性简洁性一个好的算法是满足这五条标准要求的算法。第30页,共92页,编辑于2022年,星期日评价算法的“正确性”标准所设计出来的算法要能够正确求解给定的问题。这就要求算法中的每一个步骤的描述是准确无歧义的,并且是可以执行的;要求算法能够满足问题要求,并在有限步骤内获得结果;否则就不具备正确性要求,更谈不上解决给定的实际问题了。算法要能经得起一切可能的输入数据的考验。第
16、31页,共92页,编辑于2022年,星期日评价算法的“正确性”标准(续)在将算法用程序语言表示为特定语言的程序后还必须注意:程序中不含有语法错误;对于一切合法的输入数据,程序能够产生满足要求的输出结果;对于一切非法的输入数据,程序能够得出满足规格说明的结果;对于精心选择的,甚至是带有刁难性的典型测试数据,程序都有满足要求的输出结果。第32页,共92页,编辑于2022年,星期日评价算法的“可读性”标准表示出来的算法要能够方便地供人们阅读、理解和交流。算法的可读性好是保证正确性的前提,良好的可读性有利于人们理解算法思想,减少出错机会,便于检查和修改。可适当地增加注释,增强算法或程序的可读性。第33
17、页,共92页,编辑于2022年,星期日评价算法的“健壮性”标准算法对意外情况的反映能力要强。当输入数据非法、0作除数、负数开平方等,算法应能做出相应的处理,给出错误信息或终止算法执行,避免产生错误的或莫明其妙的输出结果。第34页,共92页,编辑于2022年,星期日评价算法的“高效性”标准算法的执行效率要高。算法的效率可分为时间效率和空间效率。时间效率是通过该算法转化的程序在计算机上运行的时间耗费来确定,在算法设计与分析阶段用执行基本操作的次数(是问题规模的函数)相对于问题规模的渐近阶来表示。空间效率主要考虑除存储数据结构之外的辅助存储空间。一个高效算法是指执行算法耗费时间少,使用辅助存储空间小
18、的算法。第35页,共92页,编辑于2022年,星期日评价算法的“简洁性”标准所设计出来的算法要尽可能地简洁。对于同一问题所设计的不同算法,越简洁明了的越好。越简洁的算法可读性越好,越易于理解、编码和调试、测试,越受人们欢迎。第36页,共92页,编辑于2022年,星期日评价算法的标准(续)在评价一个算法时,要对这五个方面综合考虑,不要片面追求某一指标。有些指标之间往往是相互制约的,如时间效率与空间效率,简洁性与高效性等等;要学会针对具体问题要求和软硬件实现环境进行综合平衡,设计出满足需要的好算法。第37页,共92页,编辑于2022年,星期日1.3 算法的设计与评价1.3.1 评价算法的标准1.3
19、.2 算法的环路复杂度1.3.3 算法的时空效率1.3.4 常见的算法设计方法第38页,共92页,编辑于2022年,星期日算法的环路复杂度算法的复杂性很大程度上取决于控制流程的复杂性。单一的顺序结构最简单;循环结构和选择结构所构成的环路越多算法就越复杂。基于这一种观点,针对算法的流程图表示,我们先介绍算法的环路复杂度的概念和度量方法。第39页,共92页,编辑于2022年,星期日算法的环路复杂度(续)算法(或程序)的环路复杂度度量方法,以图论为工具,先画出程序图,然后用该程序图的环路作为算法(或程序)复杂性的度量值。所谓程序图可以看成是退化了的流程图,也就是把算法(或程序)流程图中的每个处理框都
20、退化成为一个点,原来连接不同框之间的流程线变成连接不同点的有向弧,这样得到的有向图称之为程序图。程序图是连通图,这是因为从算法流程的入口点总是能够到达图中的任何一个结点;如果我们再增加一条由出口到达入口的虚弧,则从图中任何一个结点出发都可以到达其它所有结点,使得程序图变为强连通的有向图。第40页,共92页,编辑于2022年,星期日算法的环路复杂度举例例如图1-1所示的欧几里德算法的流程图所对应的程序图如图1-3所示。图1-3欧几里德算法流程图的程序图图1-1欧几里德算法的流程图表示noyesmmodnrend读入m,nr=0beginNm,rn输出n第41页,共92页,编辑于2022年,星期日
21、算法的环路复杂度的计算方法强连通图中线性无关的环路个数我们可以用如下的公式确定:V(G)=e-n+p 其中:V(G)是图G中环路的个数;e是图G中有向弧的条数,包括由出口到入口增加的一条虚弧;n是图G中结点的个数;p是图G中连通分量的个数,对于连通图而言p恒为1。第42页,共92页,编辑于2022年,星期日环路复杂度的计算方法举例例1:前述的欧几里德算法的程序图(图1-3)中,有8条有向弧和7个结点,由该公式可以确定其环路复杂度如下:V(G)=8-7+1=2 图1-4程序图的复杂度n例2:如图1-4所示的程序图中,有11条弧和7个结点,由该公式 可如下确定其环路复杂度:V(G)=11-7+1=
22、5第43页,共92页,编辑于2022年,星期日算法的环路复杂度的计算方法(续)除了应用上述的公式法计算之外,还有如下的两种方法可以用来确定程序图的环路复杂度:观察法,即观察强连通的程序图在平面上所围成的独立区域的个数。如图1-3中由有向弧(含虚弧,下同)和结点围成的独立区域有两个,即环路数为2,环路复杂度为2;而图1-4中的独立区域有五个,环路数为5,环路复杂度为5。第44页,共92页,编辑于2022年,星期日算法的环路复杂度的计算方法(续)利用判定语句计算法,即把程序图中所有出现的分支结点处所需要的判定的总个数加起来再加1。每一个分支结点处所需要的判定数为该结点分支数(即出度)减1,即二路分
23、支需要一个判定,三路分支需要两个判定,依此类推。如图1-3中只有一个结点(第四个)是分支结点且为二路分支,故所需要的判定为一个,其环路复杂度(即环路数)为2;而图1-4中有两个结点(上数第二个和左下结点)是分支结点且结点都为三路分支,故所需的判定为2+2=4个,其环路复杂度为5。第45页,共92页,编辑于2022年,星期日算法的环路复杂度(续)算法的环路复杂度越高,说明算法的控制越复杂,在转化为程序时的难度就越大,转化后的程序测试难度也就越大问题越多。在设计算法时,一般地应控制模块的环路复杂度在10以内为宜。环路复杂度的度量方法的最大优点在于它的简明性,只要知道算法中的判定个数即可。然而它也有
24、许多不足之处,如没有区分不同类型控制流的不同复杂性(如选择结构和循环结构之间,嵌套选择结构和多选择结构之间的不同复杂性)等。在评价和度量算法复杂性时,可根据实际需要结合其它方法一块使用。第46页,共92页,编辑于2022年,星期日1.3 算法的设计与评价1.3.1 评价算法的标准1.3.2 算法的环路复杂度1.3.3 算法的时空效率1.3.4 常见的算法设计方法第47页,共92页,编辑于2022年,星期日算法的时空效率如果算法是用N-S图、伪代码、程序语言或其它方式表示的,要度量其环路复杂度需要先把它们的表示转化为流程图表示,然后把流程图退化为程序图再确定其环路数。环路复杂度是一种定量地评价算
25、法复杂度的方法。下面我们再介绍一种适应面更广泛的定性评价算法复杂度的方法,即大O方法。第48页,共92页,编辑于2022年,星期日算法的时空效率(续)执行一个算法的时间代价,是指将该算法转化为程序后在计算机上运行的时间耗费,即算法中每条语句在计算机上执行的时间总和,大致上可以认为它等于计算机执行一种基本操作(如赋值运算、比较运算、移动操作等)所需的时间与算法中进行基本操作总次数的乘积。而每条语句的执行时间则应该是执行该语句一次所需的时间与该语句执行的次数(也称之为频度)的乘积。某条语句执行一次所需的时间一般地是随机器而异的,取决于具体机器的性能、速度和编译代码的质量,是由机器本身的软、硬件环境
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 程序 PPT 讲稿
限制150内