第八章数据结构与算法算法篇PPT讲稿.ppt
《第八章数据结构与算法算法篇PPT讲稿.ppt》由会员分享,可在线阅读,更多相关《第八章数据结构与算法算法篇PPT讲稿.ppt(54页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第八章数据结构与算法算法篇第1页,共54页,编辑于2022年,星期三一、算法概述算法的概念算法的特征算法的表示算法的复杂性第2页,共54页,编辑于2022年,星期三1、算法概念:、算法概念:是在有限步骤内求解某一问题所使用的一组定义明确的规则。通俗点说,就是计算机解题的过程。在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法。前者是推理实现的算法,后者是操作实现的算法。第3页,共54页,编辑于2022年,星期三2、算法特征、算法特征一个算法应该具有以下五个重要的特征:1.1.有穷性:有穷性:一个算法必须保证执行有限步之后结束;2.2.确切性:确切性:算法的每一步骤必须有确切的定义
2、;3.3.输入:输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件;4.4.输出:输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;5.5.可行性:可行性:算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。第4页,共54页,编辑于2022年,星期三3、算法表示、算法表示文字描述用纯粹的文件描述一个算法。优点较易理解,缺点是难于用计算机语言实现。程序流程图用图形的方式描述算法过程。优点是较为直观,缺点与具体语言相关,编写代码不易。程序源代码写出的算法。优点是能直接运行,缺点是难于阅读。伪语言用类
3、似程序语言的风格写出算法,克服了上述各种方法的缺点。第5页,共54页,编辑于2022年,星期三3、算法的复杂性(算法效率)、算法的复杂性(算法效率)时间上即描述算法在执行中的运行效率,原则上要求算法尽可能地少花时间,即在短时间内得到结果,一个算法的时间效率与该算法处理的问题的规模及算法程序中的循环与递归的量有关。一般而言,规模越大,处理所花的时间就越长;算法中循环与递归越多,效率就成指数级下降。空间上即算法在运行中消耗的存储容量。原则上要求算法尽可能地少占用存储单元。时空上,程序算法是一个矛盾的对立统一。一般来说,两者成反比。有时是以空间换效率,有时用牺牲效率换空间,视具体情形而言第6页,共5
4、4页,编辑于2022年,星期三二、程序流程图NS盒图PAD图程序流程图ER图第7页,共54页,编辑于2022年,星期三1、NS盒图盒图N-S图也被称为盒图或CHAPIN图。流程图流程图由一些特定意义的图形、流程线及简要的文字说明构成,它能清晰明确地表示程序的运行过程。在使用过程中,人们发现流程线不一定是必需的,为此,人们设计了一种新的流程图,它把整个程序写在一个大框图内,这个大框图由若干个小的基本框图构成,这种流程图简称N-S图.第8页,共54页,编辑于2022年,星期三N-S图结构图结构1.顺序结构N-S图2.选择结构N-S图AB条件真假A块B块3.循环结构N-S图1)当型循环2)直到型循环
5、循环体当条件为真时循环体直到条件为真时第9页,共54页,编辑于2022年,星期三PAD图PAD是问题分析图(ProblemAnalysisDiagram)的英文缩写,自1973年由日本日立公司发明以来,已经得到一定程度的推广。它用二维数形结构的图表示程序的控制流,将这种图转换为程序代码比较容易。第10页,共54页,编辑于2022年,星期三第11页,共54页,编辑于2022年,星期三程序流程图 1程序流程图的作用程序流程图是人们对解决问题的方法、思路或算法的一种描述。2流程图采用的符号(1)起始框(2)终止框(3)执行框(4)判别框(5)进程框(6)数据框主要元素:(1)方框:表示一个处理步骤(
6、2)菱形框:表示一个逻辑条件(3)箭头:表示控制流向第12页,共54页,编辑于2022年,星期三第13页,共54页,编辑于2022年,星期三E-R图即实体-联系图(EntityRelationshipDiagram),提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型。构成E-R图的基本要素是实体型、属性和联系,其表示方法为:实体型(Entity):用矩形表示,矩形框内写明实体名;比如学生张三丰、学生李寻欢都是实体。如果是弱实体的话,在矩形外面再套实线矩形。属性(Attribute):用椭圆形表示,并用无向边将其与相应的实体连接起来;比如学生的姓名、学号、性别、都是属性。如果是多值
7、属性的话,再椭圆形外面再套实线椭圆。如果是派生属性则用虚线椭圆表示。联系(Relationship):用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1:1,1:n或m:n)。比如老师给学生授课存在授课关系,学生选课存在选课关系。如果是弱实体的联系则在菱形外面再套菱形。第14页,共54页,编辑于2022年,星期三第15页,共54页,编辑于2022年,星期三三、程序算法要使计算机能完成人们预定 的工作,首先必须为如何完成预定的工作设计一个算法,然后再根据算法编写程序。计算机程序要对问题的每个对象和处理规则给出正确详尽的描述,其中程序的数 据结构和变
8、量用来描述问题的对象,程序结构、函数和语句用来描述问题的算法。算法,数据结构是程序的两个重算法,数据结构是程序的两个重要方面要方面。算法是问题求解过程的精确描述算法是问题求解过程的精确描述,一个算法由有限条可完全机械地执行的、有确定结果的指令组成。指令正确地描述了要完成的任务和它们被执行的顺序。计算机按算法指令所描述的顺序执行算法的指令能在有限的步骤内终止,或终止于给出问题的解,或终止于指出问题对此输入数据无解。通常求解一个问题可能会有多种算法可供选择,选择的主要标准是算法的正确性和可靠性算法的正确性和可靠性,简单性和易理解性。其次是算法所需要的存储空间少和执行更快等。第16页,共54页,编辑
9、于2022年,星期三主要算法:迭代法穷举搜索法递推法贪婪法回溯法分治法动态规划法etc第17页,共54页,编辑于2022年,星期三1、迭代法迭代法是用于求方程或方程组近似根的一种常用的算法设计方法。设方程为f(x)=0,用某种数学方法导出等价的形式x=g(x),然后按以下步骤执行:(1)选一个方程的近似根,赋给变量x0;(2)将x0的值保存于变量x1,然后计算g(x1),并将结果存于变量x0;(3)当x0与x1的差的绝对值还小于指定的精度要求时,重复步骤(2)的计算。若方程有根,并且用上述方法计算出来的近似根序列收敛,则按上述方法求得的x0就认为是方程的根。第18页,共54页,编辑于2022年
10、,星期三【算法】迭代法求方程的根 x0=初始近似根;do x1=x0;x0=g(x1);/*按特定的方程计算新的近似根*/while(fabs(x0-x1)Epsilon);printf(“方程的近似根是%fn”,x0);第19页,共54页,编辑于2022年,星期三2、穷举搜索法穷举搜索法是对可能是解的众多候选解按某种顺序进行逐一枚举和检验,并从众找出那些符合要求的候选解作为问题的解。【问题】将A、B、C、D、E、F这六个变量排成如图所示的三角形,这六个变量分别取1,6上的整数,且均不相同。求使三角形三条边上的变量之和相等的全部解。如图就是一个解。程 序引入变量a、b、c、d、e、f,并让它们
11、分别顺序取1至6的证书,在它们互不相同的条件下,测试由它们排成的如图所示的三角形三条边上的变量之和是否 相等,如相等即为一种满足要求的排列,把它们输出。当这些变量取尽所有的组合后,程序就可得到全部可能的解。细节见下面的程序。第20页,共54页,编辑于2022年,星期三【程序1】#includevoid main()int a,b,c,d,e,f;for(a=1;a=6;a+)for(b=1;b=6;b+)if(b=a)continue;for(c=1;c=6;c+)if(c=a)|(c=b)continue;for(d=1;d=6;d+)if(d=a)|(d=b)|(d=c)continue;
12、for(e=1;e=6;e+)if(e=a)|(e=b)|(e=c)|(e=d)continue;f=21-(a+b+c+d+e);if(a+b+c=c+d+e)&(a+b+c=e+f+a)printf(“%6d,a);printf(“%4d%4d”,b,f);printf(“%2d%4d%4d”,c,d,e);scanf(“%*c”);第21页,共54页,编辑于2022年,星期三3、递推法是利用问题本身所具有的一种递推关系求问题解的一种方法。设要求问题规模为N的解,当N=1时,解或为已知,或能非常方便地得到解。能采用递推法构造 算法的问题有重要的递推性质,即当得到问题规模为i-1的解后,由问
13、题的递推性质,能从已求得的规模为1,2,i-1的一系列解,构造出问题规模为 I的解。这样,程序可从i=0或i=1出发,重复地,由已知至i-1规模的解,通过递推,获得规模为i的解,直至得到规模为N的解。第22页,共54页,编辑于2022年,星期三【问题】阶乘计算问题描述:编写程序,对给定的n(n100),计算并输出k的阶乘k!(k=1,2,n)的全部有效数字。由于要求的整数可能大大超出一般整数的位数,程序用一维数组存储长整数,存储长整数数组的每个元素只存储长整数的一位数字。如有m位成整数N用数组a 存储:N=am10m-1+am-110m-2+a2101+a1100并用a0存储长整数N的位数m,
14、即a0=m。按上述约定,数组的每个元素存储k的阶乘k!的一位数字,并从低位到高位依次存于数组的第二个元素、第三个元素。例如,5!=120,在数组中的存储形式为:3 0 2 1 首元素3表示长整数是一个3位数,接着是低位到高位依次是0、2、1,表示成整数120。计算阶乘k!可采用对已求得的阶乘(k-1)!连续累加k-1次后求得。例如,已知4!=24,计算5!,可对原来的24累加4次24后得到120。第23页,共54页,编辑于2022年,星期三#include#include#define MAXN 1000void pnext(int a,int k)int*b,m=a0,i,j,r,carry
15、;b=(int*)malloc(sizeof(int)*(m+1);for(i=1;i=m;i+)bi=ai;for(j=1;j=k;j+)for(carry=0,i=1;i0;i)printf(“%d”,ai);printf(“nn”);void main()int aMAXN,n,k;printf(“Enter the number n:“);scanf(“%d”,&n);a0=1;a1=1;write(a,1);for(k=2;k1时)。写成递归函数有:int fib(int n)if(n=0)return 0;if(n=1)return 1;if(n1)return fib(n-1)+
16、fib(n-2);递 归算法的执行过程分递推和回归两个阶段。在递推阶段,把较复杂的问题(规模为n)的求解推到比原问题简单一些的问题(规模小于n)的求解。例如上例中,求 解fib(n),把它推到求解fib(n-1)和fib(n-2)。也就是说,为计算fib(n),必须先计算fib(n-1)和fib(n-2),而计算fib(n-1)和fib(n-2),又必须先计算fib(n-3)和fib(n-4)。依次类推,直至计算fib(1)和fib(0),分 别能立即得到结果1和0。在递推阶段,必须要有终止递归的情况。例如在函数fib中,当n为1和0的情况。在回归阶段,当获得最简单情况的解后,逐级返回,依次得
17、到稍复杂问题的解,例如得到fib(1)和fib(0)后,返回得到fib(2)的结果,在得到了fib(n-1)和fib(n-2)的结果后,返回得到fib(n)的结果。第26页,共54页,编辑于2022年,星期三5、回溯法回溯法也称为试探法,该方法首先暂时放弃关于问题规模大小的限制,并将问题的候选解按某种顺序逐一枚举和检验。当发现当前候选解不可能是解时,就选择下一个 候选解;倘若当前候选解除了还不满足问题规模要求外,满足所有其他要求时,继续扩大当前候选解的规模,并继续试探。如果当前候选解满足包括问题规模在内的 所有要求时,该候选解就是问题的一个解。在回溯法中,放弃当前候选解,寻找下一个候选解的过程
18、称为回溯。扩大当前候选解的规模,以继续试探的过程称为向前 试探。第27页,共54页,编辑于2022年,星期三1)、回溯法的一般描述可用回溯法求解的问题P,通常要能表达为:对于已知的由n元组(x1,x2,xn)组成的一个状态空间 E=(x1,x2,xn)xiSi,i=1,2,n,给定关于n元组中的一个分量的一个约束集D,要求E中满足D的全部约束条件的所有n元组。其中Si是分量xi的定义域,且|Si|有限,i=1,2,n。我们称E中满足D的全部约束条件的任一n元组为问题P的一个解。解问题P的最朴素的方法就是枚举法,即对E中的所有n元组逐一地检测其是否满足D的全部约束,若满足,则为问题P的一个解。但
19、显然,其计算量是相当大的。我 们发现,对于许多问题,所给定的约束集D具有完备性,即i元组(x1,x2,xi)满足D中仅涉及到x1,x2,xi的所有约束意味着j(jj。因此,对于约束集D具有完备性的问题P,一旦检测断定某个j元组(x1,x2,xj)违反D中仅涉及x1,x2,xj的一个约束,就可以 肯定,以(x1,x2,xj)为前缀的任何n元组(x1,x2,xj,xj+1,xn)都不会是问题P的解,因而就不必去搜索它们、检测它 们。回溯法正是针对这类问题,利用这类问题的上述性质而提出来的比枚举法效率更高的算法。第28页,共54页,编辑于2022年,星期三回溯法首先将问题P的n元组的状态空间E表示成
20、一棵高为n的带权有序树T,把在E中求问题P的所有解转化为在T中搜索问题P的所有解。树T类似于检索树,它可以这样构造:设Si 中的元素可排成xi(1),xi(2),xi(mi-1),|Si|=mi,i=1,2,n。从根开始,让T的第I层的每一个结点都有mi个儿子。这mi个儿子到它们的双亲的边,按从左到右的次序,分别带权xi+1(1),xi+1(2),xi+1(mi),i=0,1,2,n-1。照这种构造方式,E中的一个n元组(x1,x2,xn)对应于T中的一个叶子结点,T的根到这个叶子结点的路径上依次 的n条边的权分别为x1,x2,xn,反之亦然。另外,对于任意的0in-1,E中n元组(x1,x2
21、,xn)的一个前缀I元组(x1,x2,xi)对应于T中的一个非叶子结点,T的根到这个非叶子结点的路径上依次的I条边的权分别为x1,x2,xi,反之亦然。特别,E中的任意 一个n元组的空前缀(),对应于T的根。因而,在E中寻找问题P的一个解等价于在T中搜索一个叶子结点,要求从T的根到该叶子结点的路径上依次的 n条边相应带的n个权x1,x2,xn满足约束集D的全部约束。在T中搜索所要求的叶子结点,很自然的一种方式是从根出发,按深度优先的策略逐步深 入,即依次搜索满足约束条件的前缀1元组(x1i)、前缀2元组(x1,x2)、,前缀I元组(x1,x2,xi),直到i=n为止。第29页,共54页,编辑于
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第八 数据结构 算法 PPT 讲稿
限制150内