第1章绪论第6讲-其他情况的算法分析_第1页
第1章绪论第6讲-其他情况的算法分析_第2页
第1章绪论第6讲-其他情况的算法分析_第3页
第1章绪论第6讲-其他情况的算法分析_第4页
第1章绪论第6讲-其他情况的算法分析_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、定义:定义:设设一个算法的输入规模一个算法的输入规模为为n,Dn是所有输入是所有输入的的集合,集合,任任一输入一输入IDn,P(I)是是I出现出现的概率,有的概率,有 ,T(I)是算是算法在输入法在输入I下的执行时间,则算法的下的执行时间,则算法的平均时间复杂平均时间复杂度度为:为:nDIITIPnA)()()(nDIIP1)(1/14例如,例如,10个个110的的整数序列递增整数序列递增排序:排序:n=10I1=1,2,3,4,5,6,7,8,9,10I2=2,1,3,4,5,6,7,8,9,10Im=10,9,8,7,6,5,4,3,2,1构成构成Dn,P(I)=1/m所有可能的初始序列有

2、所有可能的初始序列有m个,个,m=10!2/14IDn算法的算法的最坏时间复杂最坏时间复杂度度为:为:W(n)=MAXT(I)IDn算法的算法的最好时间复杂最好时间复杂度度为:为:B(n)=MINT(I)一种或几种特殊情况3/14 【例例1-8】设计一设计一个个算法,求算法,求含含n个整数元素的序列中前个整数元素的序列中前i(1in)个元素的最大值。并分析算法的平均时间复杂度。)个元素的最大值。并分析算法的平均时间复杂度。解:解:整数序列用数组整数序列用数组a表示,前表示,前i(1in)个个元素为元素为a0.i- -1。4/14解:解:i的取值范围为的取值范围为1n(共(共n种情况),对于种情

3、况),对于求前求前i个元个元素的最大素的最大值值时,需要时,需要元素比较元素比较(i- -1)- -1+1=i- -1次。在次。在等等概率情概率情况(每种情况的概率为况(每种情况的概率为1/n):):该算法的该算法的最坏复杂度最坏复杂度:W(n)=O(n)(当(当i=n时)时)该算法的该算法的最好复杂度最好复杂度:B(n)=O(1)(当(当i=1时)时)= O(n)平均时间复杂度平均时间复杂度5/14递归算法是指算法中出现调用自己的成分。递归算法是指算法中出现调用自己的成分。递归算法分析也称为递归算法分析也称为变长时空分析变长时空分析。非递归算法分析也称为非递归算法分析也称为定长时空分析定长时

4、空分析。6/14 【例例1-9】 有有如下递归算法如下递归算法:调用上述算法的语句调用上述算法的语句为为fun(a,n,0),求,求其时间复杂度。其时间复杂度。void fun(int a,int n,int k) /数组数组a共有共有n个元素个元素 int i; if (k=n-1) for (i=0;in;i+) /n次次 printf(%dn,ai); else for (i=k;in;i+)/n-k次次 ai=ai+i*i; fun(a,n,k+1); 7/14void fun(int a,int n,int k) /数组数组a共有共有n个元素个元素 int i; if (k=n-1)

5、 for (i=0;in;i+) /n次次 printf(%dn,ai); else for (i=k;in;i+)/n-k次次 ai=ai+i*i; fun(a,n,k+1); 递归算法递归算法:错误错误fun(a,n,0)的时间复杂度为的时间复杂度为O(n)。含一重循环含一重循环8/14 则则 T(n) = T1(n,0) = n+T1(n,1) = n+(n- -1)+T1(n,2) = = n+(n- -1)+2+T1(n,n- -1) = n+(n- -1)+ +2+n = O(n2) 解:解:设设fun(a,n,0)的执行时间为的执行时间为T(n),fun(a,n,k)的的执行时间

6、执行时间为为T1(n,k) T(n) = T1(n,0)。所以所以调用调用fun(a,n,0)的时间复杂度为的时间复杂度为O(n2)。9/14T1(n,k) = n 当当k=n- -1时时T1(n,k) = (n- -k)+T1(n,k+1) 其他情况其他情况由由fun()递归算法可知:递归算法可知:void fun(int a,int n,int k) /数组数组a共有共有n个元素个元素 int i; if (k=n-1)for (i=0;in;i+) /n次次 printf(%dn,ai); else for (i=k;in;i+)/n-k次次 ai=ai+i*i; fun(a,n,k+1

7、); 【例例1-11】有如下递归算法,分析调用有如下递归算法,分析调用fun(a,n,0)的空的空间复杂度。间复杂度。 10/14void fun(int a,int n,int k) /数组数组a共有共有n个元素个元素 int i; if (k=n-1)for (i=0;in;i+) /n次次 printf(%dn,ai); else for (i=k;in;i+)/n-k次次 ai=ai+i*i; fun(a,n,k+1); 递归算法:递归算法: 错误错误fun(a,n,0)的空间复杂度为的空间复杂度为O(1)。仅仅定义了一个临时变量仅仅定义了一个临时变量i11/14解:解:设设fun(a,n,0)的空间为的空间为S(n),fun(a,n,k)的空间为的空间为S1(n,k) S(n) = S1(n,0)。则:则: S(n) = S1(n,0) = 1+S1(n,1) = 1+1+S1(n,2) = = 1 + 1 + + 1 = O(n)n个个1所以所以调用

温馨提示

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

评论

0/150

提交评论