数据结构-从概念到C++实现(第4版)课件 1-5算法分析_第1页
数据结构-从概念到C++实现(第4版)课件 1-5算法分析_第2页
数据结构-从概念到C++实现(第4版)课件 1-5算法分析_第3页
数据结构-从概念到C++实现(第4版)课件 1-5算法分析_第4页
数据结构-从概念到C++实现(第4版)课件 1-5算法分析_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1-5算法分析v第一章绪论算法分析算法设计:面对一个问题,如何设计一个高效的算法算法分析:对已设计的算法,如何评价或判断其优劣检验评估指导改进如何评价算法?易读性健壮(容错)性可维护性可扩展性……效率(速度)——算法的核心和灵魂算法分析算法的时间复杂度学什么?算法的空间复杂度算法分析实例1-5-1算法的时间复杂度v第一章绪论度量算法效率如何度量算法的效率呢?缺点:(1)编写程序实现算法将花费较多的时间和精力

(2)所得实验结果依赖于计算机的软硬件等环境因素

事后统计(定量分析):将算法实现,测算其时间和空间开销事前分析(定性分析):对算法所消耗资源的一种估算方法时间空间对估算方法有什么要求呢?能够刻画效率;与语言环境无关;具有一般性……时间复杂度算法的执行时间=每条语句执行时间之和执行次数×执行一次的时间指令系统、编译的代码质量单位时间每条语句执行次数之和=for(i=1;i<=n;i++)for(j=1;j<=n;j++)x++;基本语句的执行次数问题规模:输入量的大小基本语句:执行次数与整个算法的执行次数成正比的操作指令注意到,几乎所有算法,对于规模更大的输入需要运行更长的时间运行算法所需要的时间

T

是问题规模

n

的函数,记作

T(n)如何表示算法的运行时间函数呢?算法的运行时间=基本语句的执行次数如何计算算法中基本语句的执行次数呢?时间复杂度:当问题规模充分大时,算法中基本语句的执行次数在渐近意义下的阶——关注的是增长趋势问题规模可以是多个变量

多元函数时间复杂度大O记号定义1-1若存在两个正的常数

c和

n0,对于任意

n≥n0,都有T(n)≤c×f(n),则称T(n)=O(f(n))。n0问题规模n执行次数n0之前的情况无关紧要T(n)c×f(n)T(n)和f(n)具有相同的增长趋势,T(n)的增长至多趋同于函数f(n)的增长定理1-1:若T(n)=amnm+am-1nm-1+

+a1n+a0是一个m次多项式,则T(n)=O(nm)关注增长率——忽略所有低次幂和最高次幂的系数大O记号时间复杂度是一种估算技术(信封背面的技术)Ο(1)<(log2n)<(n)<(nlog2n)<(n2)<(n3)<…<(2n)<(n!)常见的时间复杂度:多项式时间,易解问题指数时间,难解问题时间复杂度是在不同数量级的层面上比较算法大O记号估算的局限冰雹猜想(HailstoneSequence,角谷猜想,3n+1问题)1.输入一个正整数n;2.如果n

等于1,结束算法;3.如果n

是奇数,则n

变为3n+1,否则n

变为n/2;4.重新执行步骤2;所有测试的正整数都可以终止,但是至今没有人证明对所有的正整数该过程都能够终止,而且至今没有人能够分析这个简单算法的时间复杂度例如:n=9,有{9,

28,

14,

7,

22,

11,

34,

17,

52,

26,

13,

40,

20,

10,

5,

16,

8,

4,

2,

1}例如:n=27,经过77步变换到达顶峰值9232,又经过32步变换到达谷底值11-5-2算法的空间复杂度v第一章绪论空间分析算法在运行过程中需要哪些存储空间?(1)输入/输出数据占用的空间取决于问题,与算法无关intCommonFactor(intm,intn){}voidBubbleSort(intr[],intn){ }voidEquation(doublea,doubleb,doublec,double*p,double*q){}(2)算法本身占用的空间与算法相关,大小固定intCommonFactor(intm,intn){intr=m%n;while(r!=0){m=n;n=r;r=m%n;}returnn;}(1)输入/输出数据占用的空间取决于问题,与算法无关空间分析算法在运行过程中需要哪些存储空间?(3)执行算法需要的辅助空间与算法相关,体现效率除算法本身和输入输出数据所占用的空间外,算法临时开辟的存储空间空间复杂度:算法在执行过程中需要的辅助空间数量空间复杂度也是问题规模的函数,通常记作:S(n)=O(f(n))(2)算法本身占用的空间与算法相关,大小固定(1)输入/输出数据占用的空间取决于问题,与算法无关空间分析算法在运行过程中需要哪些存储空间?空间复杂度voidBubbleSort(intr[],intn){ intj,temp,bound,exchange=n; while(exchange!=0){

bound=exchange;exchange=0;for(j=1;j<bound;j++)if(r[j]>r[j+1]){temp=r[j];r[j]=r[j+1];r[j+1]=temp;exchange=j;}}}voidMerge(intr[],ints,intm,intt){intr1[n];inti=s,j=m+1,k=s;while(i<=m&&j<=t){if(r[i]<=r[j])r1[k++]=r[i++];elser1[k++]=r[j++];}while(i<=m)r1[k++]=r[i++];while(j<=t)r1[k++]=r[j++];for(i=s;i<t;i++)r[i]=r1[i];}O(1)O(n)就地(原地)算法:空间复杂度为O(1),辅助空间是常数1-5-3算法分析实例v第一章绪论非递归算法例1++x;例2for(i=1;i<=n;++i)++x;O(1)常数阶O(n)线性阶例3for(i=1;i<=n;++i)for(j=1;j<=n;++j)++x;O(n2)平方阶例4for(i=1;i<=n;++i)for(j=1;j<=n;++j){c[i][j]=0;for(k=1;k<=n;++k)c[i][j]+=a[i][k]*b[k][j];}O(n3)立方阶例5for(i=1;i<=n;++i)for(j=1;j<=i-1;++j)++x;分析的策略是从内部(或最深层部分)向外展开例6for(i=1;i<=n;i=2*i) ++x;O(log2n)对数阶分析的策略是设其执行次数为T(n),则有2T(n)≤n,即T(n)≤log2nO(n2)T(n)=O(log2n)=O(logn)非递归算法递归算法分析的策略是根据递归过程建立递推关系式并求解(求和表达式)例7分析递推式

的时间复杂度假定

n=2k各种情况基本语句的执行次数是否只和问题规模有关?例8在一维整型数组A[n]中顺序查找与给定值k相等的元素

intFind(intA[],intn,intk)

{for(i=0;i<n;i++)if(A[i]==k)break;returni; }如果算法的时间代价与输入数据有关,则需要分析最好情况、

温馨提示

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

评论

0/150

提交评论