ImageVerifierCode 换一换
格式:PPTX , 页数:22 ,大小:304.43KB ,
文档编号:7651487      下载积分:5 文币
快捷下载
登录下载
邮箱/手机:
温馨提示:
系统将以此处填写的邮箱或者手机号生成账号和密码,方便再次下载。 如填写123,账号和密码都是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

优惠套餐
 

温馨提示:若手机下载失败,请复制以下地址【https://www.163wenku.com/d-7651487.html】到电脑浏览器->登陆(账号密码均为手机号或邮箱;不要扫码登陆)->重新下载(不再收费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  
下载须知

1: 试题类文档的标题没说有答案,则无答案;主观题也可能无答案。PPT的音视频可能无法播放。 请谨慎下单,一旦售出,概不退换。
2: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
3: 本文为用户(momomo)主动上传,所有收益归该用户。163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

1,本文(《计算机导论》课件第四章算法与数据结构.pptx)为本站会员(momomo)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!

《计算机导论》课件第四章算法与数据结构.pptx

1、第四章 算法与数据结构4.1 算 法4.2 数 据 结 构第四章 算法与数据结构第四章 算法与数据结构4.1 算 法第四章 算法与数据结构4.1.1 算法描述一个问题可以有多种求解方法,一个求解方法可以有多种描述形式。如果在人与人之间交流,可以采用自然语言、示例、图、表、公式等描述形式;如果在人与计算机之间交流,则只能采用程序设计语言,因此程序也称为程序设计语言描述的算法。下面,通过一个例子介绍不同的算法描述形式。例4-1 求解两个正整数的最大公约数。针对这个问题,给出两种求解方法:穷举法和辗转相除法,每种方法给出三种描述形式:自然语言形式、流程图形式和程序设计语言(C语言)形式。1穷举法(1

2、)穷举法的自然语言形式如下:令S为两个正整数M、N中的较小者;令R1为M除以S的余数,R2为N除以S的余数;第四章 算法与数据结构 若R1与R2同时等于0,则S就是两个正整数的最大公约数,否则令S为S减1,返回继续。穷举法的流程图形式如图4-1所示。(2)穷举法的程序设计语言形式如下:int greatest_common_divisor(int m,int n)int s,r1,r2;if(mn)s=n;else s=m;r1=m%s;r2=n%s;while(r1!=0|r2!=0)s=s-1;r1=m%s;r2=n%s;第四章 算法与数据结构 return(s);2辗转相除法(1)辗转相

3、除法的自然语言形式如下:令M为两个正整数中的较大者,N为较小者;令R为M除以N的余数;若R等于0,则N就是两个正整数的最大公约数;否则令M为N,N为R,返回继续。(2)辗转相除法的程序设计语言形式如下:int greatest_common_divisor(int m,int n)int r;if(mn)r=m;m=n;n=r;r=m%n;while(r!=0)第四章 算法与数据结构 m=n;n=r;r=m%n;return(n);辗转相除法的流程图形式如图4-2所示。第四章 算法与数据结构4.1.2 算法分析前面提到,一个问题可以有多个求解算法,究竟哪个算法好呢?这就是算法分析的任务。算法分

4、析,也称为算法复杂性分析,是对运行算法所消耗的资源进行分析。算法消耗的资源越多,算法复杂性就越高。资源可以分为时间资源(运行时间)和空间资源(内存空间),因此,算法复杂性分析也分为时间复杂性分析和空间复杂性分析。例4-2 直观分析例4-1给出的两个算法穷举法和辗转相除法。穷举法和辗转相除法的算法分析如表4-1所示。第四章 算法与数据结构如果选择变量数目作为空间度量,则穷举法需要5个变量M、N、S、R1、R2,辗转相除法需要3个变量M、N、R,辗转相除法优于穷举法。如果选择循环语句执行次数作为时间度量,则当M=30,N=15时,穷举法和辗转相除法都是0次循环,而当M=30,N=16时,穷举法是1

5、4次循环,辗转相除法是2次循环。可以看到,不同的M和N,同一算法的循环次数也不同,因此,时间复杂性有最好情况、最坏情况、平均情况三种。从平均情况来看,辗转相除法优于穷举法。事实上,当进行算法复杂性分析时,不可能也没必要如例4-2一样,针对特定输入分析算法的变量数目和基本语句执行次数,而是分析随着问题规模的增长,复杂性增长的量级。例如,算法的时间复杂性与算法本身、问题规模n相关,当算法确定时,算法的时间复杂性就是n的函数T(n),并且通常采用渐进上界O(f(n)表达其时间复杂性增长的量级。如果算法的时间复杂性过高,则该算法可能是理论可计算,而实际不可计算。例如,时间复杂性为O(2n)的算法,随着

6、问题规模n的增加,运行时间呈指数增加,算法就是理论可计算而实际不可计算。第四章 算法与数据结构4.1.3 算法设计1.分治与递归计算机求解问题所需时间一般都与问题规模相关,问题规模越小,所需时间越少,也较容易处理。分治是将一个难以直接解决的规模较大的原问题分解成一系列规模较小的子问题,分别求解各个子问题,再合并子问题的解得到原问题的解。分治是算法设计的基本策略,包括三个步骤:(1)分解:将原问题分解成一系列子问题。(2)求解:求解各个子问题。(3)合并:合并子问题的解得到原问题的解。在算法设计中,递归与分治就像孪生兄弟,密切相关。递归是指函数(或过程)直接调用自己或通过一系列调用语句间接调用自

7、己。通常,递归用于解决结构自相似问题,即构成原问题的子问题与原问题在结构上相似,可以采用类似方法求解。递归是描述问题和解决问题的基本方法,包括两个要素:(1)边界条件:确定递归何时终止,也称为递归出口。(2)递归模式:确定原问题如何分解为子问题,也称为递归体。第四章 算法与数据结构例4-3 求解n!。方法一:n!可以展开为n!=n*(n-1)*(n-2)*3*2*1,可以采用循环求解,流程图如图4-3所示,程序如下:int factorial(int n)int p,m;p=1;m=1;while(m=2)p=fibonacci(n-1)+fibonacci(n-2);第四章 算法与数据结构r

8、eturn(p);从图4-5可以看到,在f5的递归计算中,有许多子问题被重复计算,如f3被重复计算了2次,f2被重复计算了3次。随着n的增加,这个现象更加突显,严重影响计算效率。方法二:采用动态规划,即颠倒计算方向,将自顶而下计算变为自底而上计算,对每个子问题仅计算一次并将解保存在表格中,当需要再次计算该子问题时,通过查表获得其解,从而避免重复求解公共子问题,程序如下:int fibonacci(int n)int p,f100,i;if(n=0)p=0;if(n=1)p=1;if(n=2)第四章 算法与数据结构f0=0;f1=1;for(i=2;i=n;i+)fi=fi-1+fi-2;p=f

9、n;return(p);动态规划求解过程中的表格如表4-2所示。第四章 算法与数据结构4.2 数 据 结 构第四章 算法与数据结构4.2.1 基本概念数据结构是相互之间存在一种或多种特定关系的数据元素的集合。所谓数据元素是在程序中作为一个整体进行考虑和处理的数据的基本单位,可由若干个数据项组成。例4-5 如图4-6所示,在职工管理中,一个职工的信息就是一个数据元素,可由职工号、姓名、性别、出生年月等数据项组成。数据结构的研究内容包括:(1)数据的逻辑结构:研究数据元素之间的逻辑关系。(2)数据的存储结构:研究数据元素及其关系在计算机中的表示与存储。(3)基本操作的算法:研究当某种逻辑结构采用某

10、种存储结构实现时,基本操作的算法及复杂性。第四章 算法与数据结构数据结构的研究内容如图4-7所示。逻辑结构可以分为线性结构、树结构、图结构,存储结构可以分为顺序存储结构和链式存储结构。例4-6 在职工管理中,n个职工的信息是n个数据元素,它们的逻辑结构可以看做线性结构中的线性表,即数据元素之间的逻辑关系是线性关系,而且可以在任一位置删除或者插入一个数据元素,如图4-8所示。线性表的顺序存储结构可以采用C语言中的数组实现,一个数组元素存储一个数据元素,数据元素之间的逻辑相邻采用数组元素之间的物理相邻表示,顺序存储结构如图4-9所示。线性表的链式存储结构可以采用C语言中的指针实现,如图4-10所示

11、,一个结点存储一个数据元素,数据元素之间的逻辑相邻采用结点之间的指针表示。第四章 算法与数据结构4.2.2 线性结构线性结构是指数据元素之间的逻辑关系是线性关系(一对一关系)。第一个数据元素没有前驱,只有唯一后继,最后一个数据元素没有后继,只有唯一前驱,其它数据元素有唯一前驱和唯一后继。如图4-12所示,圆圈表示数据元素,线表示数据元素之间的关系。根据线性结构中数据元素的操作限制,线性结构分为以下几个:(1)线性表:允许在任一位置进行插入和删除操作。第四章 算法与数据结构(2)堆栈:只允许在一端进行插入和删除操作。这一端称为栈顶,另一端称为栈底,如图4-13所示。堆栈的特点是先进栈的数据元素后

12、出栈,称为先进后出(First In Last Out,FILO)。(3)队列:只允许在一端进行插入操作,在另一端进行删除操作。插入一端称为队尾,删除一端称为队头,如图4-14所示。队列的特点是先进队的数据元素先出队,称为先进先出(First In First Out,FIFO)。第四章 算法与数据结构4.2.3 树结构树结构是一种非常重要的数据结构。树的递归定义为:没有结点(数据元素)的树称为空树。在非空树中,有且仅有一个结点称为根结点,其余结点可分为若干互不相交的集合,每个集合又是一棵树,称为根结点的子树。结点的子树数目称为结点的度。除根结点外,度为0的结点称为叶子结点,度不为0的结点称为

13、内部结点。结点的子树根结点称为该结点的子结点,相应地,该结点称为子树根结点的父结点。根结点没有父结点,可以有若干子结点;叶结点没有子结点,只有唯一父结点;内部结点只有唯一父结点,可以有若干子结点。因此,树结构是指数据元素(结点)之间的逻辑关系是一对多关系(分支),一个父结点可以有若干子结点,一个子结点只有唯一父结点,如图4-15所示。二叉树是一种应用广泛的特殊的树结构,它的递归定义是:没有结点(数据元素)的二叉树称为空树。在非空二叉树中,有且仅有一个结点称为根结点,其余结点可分为两个互不相交的集合,每个集合又是第四章 算法与数据结构一棵二叉树,分别称为根结点的左子树和右子树。二叉树的特点是任意

14、结点至多有二个子结点,子结点有左右之分,如图4-16所示。二叉排序树又是一种用于查找的特殊的二叉树,它的特点是:对于任意结点,若它的左子树不空,则左子树上所有结点的值均小于它的值;若它的右子树不空,则右子树上所有结点的值均大于它的值,如图4-17所示。4.2.4 图结构图结构是比树结构更复杂的一种数据结构。如图4-18所示,在图结构中,数据元素(顶点)之间的逻辑关系是多对多关系(边)。根据边是否有方向,可将图分为有向图(如图4-18(a)所示)和无向图(如图4-18(b)所示)。第四章 算法与数据结构在无向图中,从顶点vs到顶点ve的路径是顶点序列vs=v1,v2,vk=ve,其中vi与vi+1(1ik)之间有边。如果从顶点vs到顶点ve有路径,则称vs与ve是连通的。如果任意两个顶点都是连通的,则称无向图是连通图。连通图的生成树是极小连通子图,即含有全部n个顶点、仅含有n-1条边的连通子图。连通图的生成树可能不唯一。在图中,边可以附带一个称为权的值,称为带权图,如图4-18(b)所示。带权连通图的最小生成树是边的权之和最小的生成树。带权连通图的最小生成树也可能不唯一。

侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|