DS01-概论-陈越主编-数据结构_第1页
DS01-概论-陈越主编-数据结构_第2页
DS01-概论-陈越主编-数据结构_第3页
DS01-概论-陈越主编-数据结构_第4页
DS01-概论-陈越主编-数据结构_第5页
已阅读5页,还剩20页未读, 继续免费阅读

下载本文档

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

文档简介

第1章概论,【定义】“数据结构是计算机中存储、组织数据的方式。精心选择的数据结构可以带来最优效率的算法。”,1/25,1引子,例1.1该如何摆放书,才能让读者很方便地找到你手里这本数据结构?,第1章概论,【分析】,2/25,1引子,方法1随便放任何时候有新书进来,哪里有空就把书插到哪里。,方法2按照书名的拼音字母顺序排放。,方法3把书架划分成几块区域,每块区域指定摆放某种类别的图书;在每种类别内,按照书名的拼音字母顺序排放。,放书方便,但查找效率极低!,查找方便,但插入新书很困难!,查找、插入方便,但每种类型的书不知道有多少本,有可能造成空间的浪费!,第1章概论,1引子,例1.2写程序实现一个函数PrintN,使得传入一个正整数为N的参数后,能顺序打印从1到N的全部正整数。,voidPrintN(intN)inti;for(i=1;i0,使得当nn0时有T(n)cf(n),例1.3中秦九韶算法的时间复杂度是O(n),而简单直接法的时间复杂度是O(n2)。,定义1.2T(n)=(g(n)表示存在常数c0,n00,使得当nn0时有T(n)cg(n),3.3复杂度的渐进表示法,定义1.3T(n)=(h(n)表示T(n)=O(h(n)同时T(n)=(h(n),16/25,第1章概论,常用函数增长表,3.3复杂度的渐进表示法,17/25,第1章概论,3.3复杂度的渐进表示法,18/25,n,第1章概论,3.3复杂度的渐进表示法,19/25,第1章概论,对给定的算法做渐进分析时,有几个小窍门:,(1)若两段算法分别有复杂度T1(n)=O(f1(n)和T2(n)=O(f2(n),那么两段算法串联在一起的复杂度:T1(n)+T2(n)=max(O(f1(n),O(f2(n),那么两段算法嵌套在一起的复杂度:T1(n)T2(n)=O(f1(n)f2(n),3.3复杂度的渐进表示法,(2)若T(n)是关于n的k阶多项式,那么T(n)=(nk),(3)一个循环的时间复杂度等于循环次数乘以循环体代码的复杂度。例如下面循环的复杂度是O(N):for(i=0;iN;i+)x=y*x+z;k+;,(1)若干层嵌套循环的时间复杂度等于各层循环次数的乘积再乘以循环体代码的复杂度。例如下列2层嵌套循环的复杂度是O(N2):for(i=0;iN;i+)for(j=0;jN;j+)x=y*x+z;k+;,(2)if-else结构的复杂度取决于if的条件判断复杂度和两个分支部分的复杂度,总体复杂度取三者中最大。即对结构:if(P1)/*P1的复杂度为O(f1)*/P2;/*P2的复杂度为O(f2)*/elseP3;/*P3的复杂度为O(f3)*/总复杂度为max(O(f1),O(f2),O(f3)。,20/25,问题给定n个整数(可以是负数)的序列a1,a2,an,求函数f(i,j)=max(0,)的最大值。,若全部整数都是负数,则最大子列和为0.,算法1,intMaxSubsequenceSum(constintA,intN)intThisSum,MaxSum,i,j,k;/*1*/MaxSum=0;/*初始化最大子列和*/*2*/for(i=0;iMaxSum)/*如果刚得到的这个子列和更大*/*8*/MaxSum=ThisSum;/*则更新结果*/*i,j循环结束*/*9*/returnMaxSum;,T(N)=O(N3),教材p.15有分析.,第1章概论,4应用实例:最大子列和问题,21/25,举例给定序列:-2,11,-4,13,-5,-2,其最大子列为:11,-4,13,和为20。,算法2,intMaxSubsequenceSum(constintA,intN)intThisSum,MaxSum,i,j;/*1*/MaxSum=0;/*初始化最大子列和*/*2*/for(i=0;iMaxSum)/*如果刚得到的这个子列和更大*/*7*/MaxSum=ThisSum;/*则更新结果*/*j循环结束*/*i循环结束*/*8*/returnMaxSum;,T(N)=O(N2),第1章概论,4应用实例:最大子列和问题,22/25,算法3,分治法,治,分,4,5,6,2,6,8,11,T(N/2),T(N/2),O(N),T(N)=2T(N/2)+cN,T(1)=O(1),=22T(N/22)+cN/2+cN,=2kO(1)+ckN此处N/2k=1,=O(NlogN),结论对N2k同样正确,程序在教材p.16-17,第1章概论,4应用实例:最大子列和问题,23/25,该算法的核心思想是基于下面的事实:如果整数序列a1,a2,an的最大和子列是ai,ai+1,aj,那么必定有对任意ilj都成立。因此,一旦发现当前子列和为负,则可以重新开始考察一个新的子列。,算法4,“在线”算法,intMaxSubsequenceSum(constintA,intN)intThisSum,MaxSum,j;/*1*/ThisSum=MaxSum=0;/*2*/for(j=0;jMaxSum)/*5*/MaxSum=ThisSum;/*6*/elseif(ThisSum0)/*7*/ThisSum=0;/*endfor-j*/*8*/returnMaxSum;,T(N)=O(N),序列A仅需扫描一遍!,1,3246,任何时刻,“在线”

温馨提示

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

评论

0/150

提交评论