数据结构答案第1章绪论学习指导.doc_第1页
数据结构答案第1章绪论学习指导.doc_第2页
数据结构答案第1章绪论学习指导.doc_第3页
数据结构答案第1章绪论学习指导.doc_第4页
数据结构答案第1章绪论学习指导.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章 绪论1.1 知识点分析1数据数据是信息的载体,是对客观事物的符号表示。数据是计算机化的现实世界的事物的抽象描述。凡是能被计算机识别、存取和加工处理的符号、字符、图形、图象、声音、视频信号等一切信息都可以称为数据。2数据元素数据元素是对现实世界中某独立个体的数据描述,是数据的基本单位。数据元素也称为结点,通常由若干数据元素组成。3数据项数据项是数据不可分割的、具有独立意义的最小数据单位,是对数据元素属性的描述。数据、数据元素、数据项反映了数据组织的三个层次,即数据可以由若干个数据元素组成,数据元素又有若干数据项组成。4数据对象数据对象是性质相同的数据元素的集合,是数据的一个子集。5数据结构数据结构是相互之间存在的一种或多种特定关系的数据元素的集合。简言之,数据结构是指数据之间的关系,即数据的组织形式。数据结构包括以下三个方面:(1)数据的逻辑结构指数据元素之间的逻辑关系,即从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。一个数据的逻辑结构G可以用二元组G=(D,R)来表示,其中D是数据元素的集合,R是D上所有数据元素之间关系的有限集合。线性结构是指数据元素之间存在“一对一”关系的逻辑结构,非线性结构是指数据元素之间存在“一对多”或“多对多”关系的逻辑结构。(2)数据的存储结构数据元素及其关系在计算机存储器内的表示,称为数据的存储结构,也称为数据的物理结构。数据的存储结构是数据的逻辑结构用计算机语言的实现,它依赖于计算机语言。(3)数据的运算指对数据施加的操作。数据的运算是定义在数据的逻辑结构上的,而运算的实现则是在存储结构上进行的。6算法的描述和分析数据的运算是通过算法来描述的,对于算法的说明可以使用不同的语言,对同一问题可以有不同的算法。首选选用的算法必须是正确的。其次,主要考虑执行算法所耗费的时间(即时间效率)和执行算法所耗费的存储空间(即空间效率)。(1)时间复杂度通常把算法中所包含简单操作次数的多少叫做算法的时间复杂度。但是当一个算法比较复杂时,其时间复杂度的计算会变得相当困难。一般情况下,算法中原操作重复执行的次数是规模n的某个函数f(n),算法的时间复杂度T(n)的数量级可记作:T(n)=O(f(n)。算法的时间复杂度T(n)是该算法的时间消耗,一个算法的时间耗费就是该算法中所有语句的执行次数(频度)之和。当n时(即当n相当大时),T(n)的数量级(阶),用大“O”记号表示。由于limT(n)/f(n)=C,C是不为0的常数,所以T(n)=O(f(n)。其实,f(n)就是T(n)中最高阶的那一项,是算法中频度最大的语句频度。一般情况下,对于循环语句只需要考虑循环体中语句的执行次数,而忽略该语句中循环头的部分。有时,循环体中语句的频度不仅与问题规模n有关,还与输入实例等其它因素有关,此时可以用最坏情况下的时间复杂度作为算法的时间复杂度。(2)空间复杂度一个程序的空间复杂度是指程序运行从开始到结束所需要的存储空间。类似于算法的时间复杂度,我们把算法所需存储空间的量度,记作:S(n)=O(f(n)。其中n为问题的规模。一个程序上机执行时,除了需要存储空间来存放本身所用的指令、常数、变量和输入数据以外,还需要一些对数据进行操作的工作单元和实现算法所必需的辅助空间。在进行时间复杂度分析时,如果所占空间量依赖于特定的输入,一般都按最坏情况来分析。程序运行时所需要的存储空间包括以下两个部分:固定部分:主要包括程序代码、常量、变量、结构体变量等所占的空间。空间与所处理的数据大小和个数无关,或者说与问题事例的特征无关。可变部分:空间大小与算法在某次执行中处理的特定数据的大小和规模有关。1.2 典型习题分析【例1】 算法与程序的区别分析:算法与程序的既有区别,又有联系。其区别是:(1)算法必须满足有穷性,而程序则不一定满足有穷性。例如,我们启动计算机必须使用操作系统,只要不关机或不遭受破坏,操作系统就永不终止。即使没有作业运行,它也一直处在一个等待循环之中。因此,操作系统是一个不终止的计算过程,但它不满足算法的定义。(2)程序中的指令必须用计算机可以接受的语言书写,而算法则无此限制。但是,当用一个计算机可以接受的语言来书写算法时,它就是程序。一般而言,算法比较抽象,而程序则比较具体。【例2】 通常一个算法的时间复杂度是指( )。 A算法的平均时间复杂度 B算法在最坏情况下的时间复杂度C算法的期望运行时间 D算法在最好情况下的时间复杂度分析:如果没有“平均”、“最好”、“最坏”的修饰语,时间复杂度就是指最坏的时间复杂度。最坏时间复杂度是算法的所有输入可能情况的执行时间的上界,所以应选B。【例3】当n从1变化到10时,比较n、2n、n2、n3、2n、n!、nn增长率的变化。解:表1-1给出当n从1变化到10时的各函数变化过程,可见当n=10时,按增长率由小到大排列次序依次为:n、2n、n2、n3、2n、n!、nn。表1-1 各函数值增长表n2nn2n32nn!nn12112112448424369278627481664162425651025125321203125612362166472046656714493431285040823543816645122564032016777216918817925123628803.910810201001000102436288001.01010【例4】 T(n)=nsin n,则用大“O”记号可以表示为( )。 AT(n)= O (n-1) BT(n)= O (1)CT(n)= O (n) D不确定分析:sin n的取值范围是-1到1之间,所以T(n)的上界为O(n1),即O(n),所以应选C。【例5】设两个算法的执行时间分别为100n2和2n,它们在同一台计算机上运行,要使前者快于后者,n至少要多大?分析:要使前者快于后者,即要求满足100n2=1的整数情况下,可测出当n=15时,100n22 n(可以编一个程序进行测试)。所以要使前者快于后者,n至少要大于等于15。【例6】 当n充分大时,按从小到大的次序对下列时间排序:(1) T1(n)=5n2+10n+6lgn(2) T2(n)=3n2+100n+3lgn(3) T3(n)=8n2+3lgn(4) T4(n)=2n2+6000nlgn分析:为了比较两个同数量级算法的优劣,需突出主项的常数因子,而将低次的项用大“O”的记号进行表示。则T1(n)=5n2+10n+6lgn=5n2+O(n),T2(n)=3n2+100n+3lgn=3n2+O(n),T3(n)=8n2+3lgn= 8n2+O(lgn),T4(n)=2n2+6000nlgn=2n2+O(nlgn)。当n足够大时,T1(n) 、T2(n)、T3(n)、T4(n)的时间复杂度都为O(n2),虽然它们的数量级相同,但他们主项的系数还是有区别。因为T4(n)主项常数因子 T2(n) 主项常数因子 T1(n) 主项常数因子 T3(n) 主项常数因子,所以从优到劣的顺序为:T4(n) 、T2(n)、T1(n)、T3(n)。【例7】 设三个函数f、g、h分别为:f(n)=100n3+n2+100、g(n)=25n3+50n2、h(n)=n1.5+50nlgn,请判断下列关系是否成立:(1)f(n)=O (g(n)(2)h(n)=O (n1.5)(3)h(n)=O (nlgn)分析:(1)lim f(n)/g(n)=lim(100n3+n2+100)/(25n3+50n2)=4,即f(n)和g(n)的数量级相同。所以(1)f(n)= O (g(n) 成立。(2)h(n)的数量级取决于n1.5和nlgn,50是与n无关的常数因子,可以忽略。因为n1.5 的数量级大于lgn,也大于nlgn,即lim h(n)/n1.5=lim (n1.5+50nlgn)/n1.5=1,所以(2)h(n)=O (n1.5)成立。(3)lim h(n)/nlgn=lim(n1.5+50nlgn)/nlgn=,所以(3)h(n)=O (nlgn)不成立。【例8】 将一维数组中的元素逆置的算法如下,试分析其时间频度及时间复杂度。 void exchange (int a,int n) fot (int i=0; i=n/2-1;i+) int t=ai; ai=an-i-1;an-i-1=t; 答:时间频度为T(n)=3n/2,当n充分大时,n的系数3/2可以忽略不计,所以其时间复杂度为O(n)。【例9】 将n个元素按升序排列的算法如下,试分析其时间频度及时间复杂度。 void sort(int a,int n) int i,j,k,t;fot (i=0;in-1;j+) k=i; for (j=i+1;jaj) k=j; if (k!=i) t=ak;ak=ai;ai=t; 答:时间频度为T(n)=1+ (n-1) + (1+2+3+n-1)+3(n-1)=n2/2+7n/2-3,时间复杂度为O(n2)。【例10】 设n为正整数,分析下列程序段中加下划线的语句的程序步数。 int i=1;dofot (int j=1;j=n;j+) i=i+j ; while (i100+n)分析:i=1结束时,i=1+n(n+1)/2i=2结束时,i=(1+n(n+1)/2)+n(n+1)/2=1+2(n(n+1)/2)i=3结束时,i=(1+2(n(n+1)/2)+n(n+1)/2=1+3(n(n+1)/2)一般地,i=k结束时,i=1+k(n(n+1)/2)100+n,求出满足此不等式的k的最大值,语句i=i+j的程序步数为:(k+1)*(n(n+1)/2)1.3 单元练习1解答一判断题答案题目12345678910答案二填空题答案(1)存储结构(2)图形结构(3)非线性结构(4)树形结构 图形结构(5)1(6)任意多个(7)物理结构(8)散列存储(9)一对一(10)一对多(11)多对多(12)算法(或运算)(13)关系(14)有穷指令(15)事后统计法(16)输入规模(17)存储空间(18)O(nl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论