算法复杂度分析

上传人:re****.1 文档编号:510752291 上传时间:2023-04-18 格式:DOCX 页数:18 大小:57.96KB
返回 下载 相关 举报
算法复杂度分析_第1页
第1页 / 共18页
算法复杂度分析_第2页
第2页 / 共18页
算法复杂度分析_第3页
第3页 / 共18页
算法复杂度分析_第4页
第4页 / 共18页
算法复杂度分析_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《算法复杂度分析》由会员分享,可在线阅读,更多相关《算法复杂度分析(18页珍藏版)》请在金锄头文库上搜索。

1、1、算法复杂度的分析方法及其运用算法复杂度是在数据结构这门课程的第一章里出现的,因为它稍微涉及到一些数学问题, 所以很多同学感觉很难,加上这个概念也不是那么具体,更让许多同学复习起来无从下手, 下面我们就这个问题给各位考生进行分析。首先了解一下几个概念。一个是时间复杂度,一个是渐近时间复杂度。前者是某个算法的时 间耗费,它是该算法所求解问题规模n的函数,而后者是指当问题规模趋向无穷大时,该 算法时间复杂度的数量级。当我们评价一个算法的时间性能时,主要标准就是算法的渐近时间复杂度,因此,在算法分 析时,往往对两者不予区分,经常是将渐近时间复杂度T(n)=O(f(n)简称为时间复杂度,其 中的f(

2、n) 一般是算法中频度最大的语句频度。此外,算法中语句的频度不仅与问题规模有关,还与输入实例中各元素的取值相关。但是我 们总是考虑在最坏的情况下的时间复杂度。以保证算法的运行时间不会比它更长。常见的时间复杂度,按数量级递增排列依次为:常数阶0(1)、对数阶O(log2n)、线性阶O(n)、 线性对数阶O(nlog2n)、平方阶0何人2)、立方阶0何人3)、k次方阶0(nW)、指数阶0(25)。下面我们通过例子加以说明,让大家碰到问题时知道如何去解决。1、设三个函数 f,g,h 分别为 f(n)=100nA3+nA2+1000 , g(n)=25nA3+5000nA2 , h(n)=nA1.5+

3、5000nlgn请判断下列关系是否成立:(1) f(n)=0(g(n)(2) g(n)=0(f(n)(3) h(n)=0(nA1.5)(4) h(n)=O(nlgn)这里我们复习一下渐近时间复杂度的表示法T(n)=O(f(n),这里的O是数学符号,它的严 格定义是若T(n)和 f(n)是定义在正整数集合上的两个函数,则T(n)=O(f(n)表示存在正的常 数C和n0,使得当nn0时都满足0T(n)C?f(n)o 用容易理解的话说就是这两个函数当整 型自变量n趋向于无穷大时,两者的比值是一个不等于0的常数。这么一来,就好计算了 吧。 (1)成立。题中由于两个函数的最高次项都是nA3,因此当n一8

4、时,两个函数的比值是一 个常数,所以这个关系式是成立的。 (2)成立。与上同理。 (3)成立。与上同理。 (4)不成立。由于当n一8时nA1.5比nlgn递增的快,所以h(n)与 nlgn的比值不是常 数,故不成立。2、设n为正整数,利用大O记号,将下列程序段的执行时间表示为n的函数。1; k=0while(i1while (x=(y+1)*(y+1)y+;解答:T(n)=n1/2,T(n)=O(n1/2),最坏的情况是y=0,那么循环的次数是n1/2次,这是一个按平方根阶递增的函数。(3) x=91; y=100;while(y0)if(x100)x=x-10;y-;else x+;解答:T

5、(n)=O(1),这个程序看起来有点吓人,总共循环运行了 1000次,但是我们看到n 没有?没。这段程序的运行是和n无关的,就算它再循环一万年,我们也不管他,只是一 个常数阶的函数2、算法复杂度编辑算法复杂度,即算法在编写成可执行程序后,运行时所需要的资源,资源包括时间资 源和内存资源。中文名算法复杂度影响效率分类时间复杂度和空间复杂度关键输入量相关时间复杂度应用数学目录1简介2时间复杂度 3空间复杂度 4复杂度分析简介编辑同一问题可用不同算法解决而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。一个算法的评价主要从时间复杂度和空间复 杂度来考虑。时间复

6、杂度编辑(1)时间频度一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例, 哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度 或时间频度。记为T(n)。算法的时间复杂度是指执行算法所需要的计算工作量。(2) 时间复杂度在刚才提到的时间频度中,n称为问题的规模,当n不断变化时,时间频度T(n)也会 不断变化。但有时我们想知道它变化时呈现什么规律。为此,我们引入时间复杂度概念。一般情况下,

7、算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示, 若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则 称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n),称O(f(n)为算法的渐进时间复杂度,简 称时间复杂度。在各种不同算法中,若算法中语句执行次数为一个常数,则时间复杂度为0(1),另外, 在时间频度不相同时,时间复杂度有可能相同,如T(n)=nA2+3n+4与T(n)=4nA2+2n+1它 们的频度不同,但时间复杂度相同,都为0何人2)。按数量级递增排列,常见的时间复杂度有:常数阶0(1),对数阶O(log2n)(

8、以2为底n的对数,下同),线性阶0(n),线性对数阶O(nlog2n),平方阶02),立方阶03),.,k次方阶O(nAk),指数阶0(2An)。随着问题规模n的不断增大,上述时间复杂度不断增 大,算法的执行效率越低。算法的时间性能分析(1)算法耗费的时间和语句频度一个算法所耗费的时间=算法中每条语句的执行时间之和每条语句的执行时间=语句的执行次数(即频度(Frequency Count)、语句执行一次所需 时间算法转换为程序后,每条语句执行一次所需的时间取决于机器的指令性能、速度以及 编译所产生的代码质量等难以确定的因素。若要独立于机器的软、硬件系统来分析算法的时间耗费,则设每条语句执行一次

9、所需 的时间均是单位时间,一个算法的时间耗费就是该算法中所有语句的频度之和。求两个n阶方阵的乘积C=A、B,其算法如下:# define n 100 / n可根据需要定义,这里假定为100void MatrixMultiply(int Aa, int B nn,int Cnn)( /右边列为各语句的频度int i ,j ,k;(1) for(i=0; in;i+) n+1(2) for (j=0;jn;j+) ( n(n+1)(3) Cij=0; n2(4) for (k=0; kn; k+) n2(n+1)(5) Cij=Cij+Aik*Bkj;n3)该算法中所有语句的频度之和(即算法的时间

10、耗费)为:T(n)=2n3+3n2+2n+1 (1.1)分析:语句(1)的循环控制变量i要增加到n,测试到i=n成立才会终止。故它的频度是n+1。 但是它的循环体却只能执行n次。语句(2)作为语句(1)循环体内的语句应该执行n次,但语 句(2)本身要执行n+1次,所以语句(2)的频度是n(n+1)。同理可得语句(3),(4)和(5)的频度 分别是n2, n2(n+1)和n3算法MatrixMultiply的时间耗费T(n)是矩阵阶数n的函数。(2) 问题规模和算法的时间复杂度算法求解问题的输入量称为问题的规模(Size), 一般用一个整数表示。矩阵乘积问题的规模是矩阵的阶数。一个图论问题的规模

11、则是图中的顶点数或边数。一个算法的时间复杂度(Time Complexity,也称时间复杂性)T(n)是该算法的时间耗费, 是该算法所求解问题规模n的函数。当问题的规模n趋向无穷大时,时间复杂度T(n)的数 量级(阶)称为算法的渐进时间复杂度。算法MatrixMultiply的时间复杂度T(n)如(1.1)式所示,当n趋向无穷大时,显然有 T(n)O(nA3);这表明,当n充分大时,T(n)和 nA3之比是一个不等于零的常数。即T(n)和门人3是同 阶的,或者说T(n)和 nA3的数量级相同。记作T(n)=O(nA3)是算法MatrixMultiply的渐近时 间复杂度(3) 渐进时间复杂度评

12、价算法时间性能主要用算法时间复杂度的数量级(即算法的渐近时间复杂度)评价一个算法的时间性能。算法MatrixMultiply的时间复杂度一般为T(n)=O(nA3),f(n)=nA3是该算法中语句(5) 的频度。下面再举例说明如何求算法的时间复杂度。交换i和j的内容。Temp=i;i=j;j=temp;以上三条单个语句的频度均为1,该程序段的执行时间是一个与问题规模n无关的常 数。算法的时间复杂度为常数阶,记作T(n)=O(1)。注意:如果算法的执行时间不随着问题规模n的增加而增长,即使算法中有上千条语 句,其执行时间也不过是一个较大的常数。此类算法的时间复杂度是O(1)。变量计数之一:(1)

13、 x=0;y=0;(2) for(k-1;k=n;k+)(3) x+;(4) for(i=1;i=n;i+)(5) for(j=1;j=n;j+)(6) y+;一般情况下,对步进循环语句只需考虑循环体中语句的执行次数,忽略该语句中步长 加1、终值判别、控制转移等成分。因此,以上程序段中频度最大的语句是(6),其频度为 f(n)=nA2,所以该程序段的时间复杂度为T(n)=Q(nA2)o当有若干个循环语句时,算法的时间复杂度是由嵌套层数最多的循环语句中最内层语 句的频度f(n)决定的。变量计数之二:(1) x=1;(2) for(i=1;i=n;i+)(3) for(j=1;j=i;j+) fo

14、r(k=1;k=0&(Ai!=k)(3) i-;(4) return i;此算法中的语句(3)的频度不仅与问题规模n有关,还与输入实例中A的各元素取值及 K的取值有关: 若A中没有与K相等的元素,则语句(3)的频度f(n)=n; 若A的最后一个元素等于K,则语句(3)的频度f(n)是常数0。3空间复杂度编辑与时间复杂度类似,空间复杂度是指算法在计算机内执行时所需存储空间的度量。记 作:S(n)=Q(f(n)算法执行期间所需要的存储空间包括3个部分:算法程序所占的空间;输入的初始数据所占的存储空间;算法执行过程中所需要的额外空间。在许多实际问题中,为了减少算法所占的存储空间,通常采用压缩存储技术。复杂度分析编辑通常一个算法的复杂度是由其输入量决定的,随着输入的增加,不同算法的复杂度增长速度如右图所示:为了降低算法复杂度,应当同时考虑到输入量,设计较好的算法。3、算

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号