渐进时间复杂度的计算

上传人:s****a 文档编号:167337294 上传时间:2022-11-03 格式:DOCX 页数:6 大小:17.84KB
收藏 版权申诉 举报 下载
渐进时间复杂度的计算_第1页
第1页 / 共6页
渐进时间复杂度的计算_第2页
第2页 / 共6页
渐进时间复杂度的计算_第3页
第3页 / 共6页
资源描述:

《渐进时间复杂度的计算》由会员分享,可在线阅读,更多相关《渐进时间复杂度的计算(6页珍藏版)》请在装配图网上搜索。

1、时间复杂度计算首先了解一下几个概念。一个是时间复杂度,一个是渐近时间复杂度。前者是某 个算法的时间耗费,它是该算法所求解问题规模n的函数,而后者是指当问题规 模趋向无穷大时,该算法时间复杂度的数量级。当我们评价一个算法的时间性能时,主要标准就是算法的渐近时间复杂度,因此, 在算法分析时,往往对两者不予区分,经常是将渐近时间复杂度 T(n)=O(f(n) 简称为时间复杂度,其中的f(n) 般是算法中频度最大的语句频度。此外,算法中语句的频度不仅与问题规模有关,还与输入实例中各元素的取值相 关。但是我们总是考虑在最坏的情况下的时间复杂度。以保证算法的运行时间不 会比它更长。常见的时间复杂度,按数量

2、级递增排列依次为:常数阶0(1)、对数阶O(log2n)、 线性阶0(n)、线性对数阶0(nlog2n)、平方阶0(n2)、立方阶0(n3)、k次方 阶 0(n”k)、指数阶 0(2、)。1. 大0表示法定义设一个程序的时间复杂度用一个函数 T(n) 来表示,对于一个查找算法,如下:int seqsearch( int a, const int n, const int x)int i = 0;for (; ai != x & i n ; i+ );if ( i = n) return -1;else return i; 这个程序是将输入的数值顺序地与数组中地元素逐个比较,找出与之相等地元 素

3、。在第一个元素就找到需要比较一次,在第二个元素找到需要比较2次, , 在第n个元素找到需要比较n次。对于有n个元素的数组,如果每个元素被找到 的概率相等,那么查找成功的平均比较次数为:f(n) = 1/n (n + (n-1) + (n-2) + . + 1) = (n+1)/2 = 0(n)这就是传说中的大0函数的原始定义。用大 0 来表述要全面分析一个算法,需要考虑算法在最坏和最好的情况下的时间代价,和在平 均情况下的时间代价。对于最坏情况,采用大 O 表示法的一般提法(注意,这里 用的是“一般提法”)是:当且仅当存在正整数c和n0,使得T(n) = n0都成立。则称该算法的渐进时间复杂度

4、为T(n) = O(f(n)c 这个应该是高等数学里面的第一章极限里面的知识。这里 f(n) = (n+1)/2, 那 么 c * f(n) 也就是一个一次函数。就是在图象上看就是如果这个函数在 c*f(n) 的下面,就是复杂度为 T(n) = O(f(n)。对于对数级,我们用大O记法记为0(log2N)就可以了。规则1) 加法规则T(n,m) = T1(n) + T2(n) = O ( max (f(n), g(m) )2) 乘法规则T(n,m) = T1(n) * T2(m) = O (f(n) * g(m)3) 一个特例在大O表示法里面有一个特例,如果T1(n) = O, c是一个与n无

5、关的任意常 数, T2(n) = O ( f(n) ) 则有T(n) = T1(n) * T2(n) = O ( c*f(n) ) = O( f(n) ).也就是说,在大O表示法中,任何非0正常数都属于同一数量级,记为0(1)。4) 一个经验规则有如下复杂度关系c log2N n n * Log2N n2 n3 2n 3n n!其中c是一个常量,如果一个算法的复杂度为c、log2N、n、n*log2N ,那 么这个算法时间效率比较高,如果是2, 3b,n!,那么稍微大一些的n就会 令这个算法不能动了,居于中间的几个则差强人意.1) 基本知识点:没有循环的一段程序的复杂度是常数,一层循环的复杂度

6、是 0(n),两层循环的复杂度是0(n2)?(我用2表示平方,同理丫表示立方);2) 二维矩阵的标准差,残差,信息熵,fft2,dwt2,dct2的时间复杂度:标准差 和残差可能0(n), FFT2是0(nlog(n), DWT2可能也是0(nlog(n);信息熵要 求概率,而 dct 的过程和 jpeg 一样。因为和 jpeg 一样, 对二难矩阵处理了.Y=T*X*T,Z=Y. *Mask,这样子,还有分成8*8子图像了 ;3) example:1、设三个函数 f,g,h 分别为 f(n)=100n3+n2+1000 , g(n)=25n3+5000n2 , h(n)=n1.5+5000nl

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

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

9、:T(n)=O(l),这个程序看起来有点吓人,总共循环运行了 1000次,但是 我们看到n没有?没。这段程序的运行是和n无关的,就算它再循环一万年,我 们也不管他,只是一个常数阶的函数。同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效 率。算法分析的目的在于选择合适算法和改进算法。一个算法的评价主要从时间 复杂度和空间复杂度来考虑。1 、时间复杂度(1) 时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能 知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费 的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算

10、法中 语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个 算法中的语句执行次数称为语句频度或时间频度。记为 T(n)。(2) 时间复杂度在刚才提到的时间频度中,n称为问题的规模,当n不断变化时,时间频度T(n) 也会不断变化。但有时我们想知道它变化时呈现什么规律。为此,我们引入时间 复杂度概念。一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n) 表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T (n)/f(n)的极限值 为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n) = O(f(n),称 O(f(n)为算法的渐进时间复

11、杂度,简称时间复杂度。在各种不同算法中,若算法中语句执行次数为一个常数,则时间复杂度为0(1), 另外,在时间频度不相同时,时间复杂度有可能相同,如T(n)=n2+3n+4与 T(n)=4n2+2n+1 它们的频度不同,但时间复杂度相同,都为 O(n2)。按数量级递增排列,常见的时间复杂度有:常数阶0(1),对数阶0(log2n),线性阶0(n),线性对数阶0(nlog2n),平方阶0(n2),立方阶0(n3),.,k次方阶0(nk),指数阶0(2n)。随着问题规模n的不断增大,上述时间复杂度不 断增大,算法的执行效率越低。2、空间复杂度 与时间复杂度类似,空间复杂度是指算法在计算机内执行时所

12、需存储空间的度 量。记作:S(n)=O(f(n)我们一般所讨论的是除正常占用内存开销外的辅助存储单元规模。讨论方法与时 间复杂度类似,不再赘述。(3) 渐进时间复杂度评价算法时间性能 主要用算法时间复杂度的数量级(即算法的渐近时间复杂度)评价一个 算法的时间性能。【例3. 7】有两个算法A1和A2求解同一问题,时间复杂度分别是 T1(n)=100n2,T2(n)=5n3。(1) 当输入量nV20时,有Tl(n)T2(n),后者花费的时间较少。(2) 随着问题规模n的增大,两个算法的时间开销之比5n3/100n2二n/20 亦随着增大。即当问题规模较大时,算法A1比算法A2要有效地多。它们的渐近

13、时间复杂度O(n2)和O(n3)从宏观上评价了这两个算法在时间方 面的质量。在算法分析时,往往对算法的时间复杂度和渐近时间复杂度不予 区分,而经常是将渐近时间复杂度T(n)=O(f(n)简称为时间复杂度,其中 的f(n) 般是算法中频度最大的语句频度。【例3. 8】算法MatrixMultiply的时间复杂度一般为T(n)=O(n3),f(n)=n3 是该算法中语句(5)的频度。下面再举例说明如何求算法的时间复杂度。【例3. 9】交换i和j的内容。Temp=i;i=j;j=temp;以上三条单个语句的频度均为 1,该程序段的执行时间是一个与问题规模n无关的常数。算法的时间复杂度为常数阶,记作T

14、(n)=O(1)。如果算法的执行时间不随着问题规模n的增加而增长,即使算法中有 上千条语句,其执行时间也不过是一个较大的常数。此类算法的时间复杂度 是 O(1) 。【例 3. 10】变量计数之一。(1) 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)=n2,所以该程序段的时间复杂度为 T(n)=O(n2) 。当有若干

15、个循环语句时,算法的时间复杂度是由嵌套层数最多的循环语 句中最内层语句的频度f(n)决定的。【例 311】变量计数之二。(1) x=1;(2) for(i=1;i=n;i+)(3) for(j=1;j=i;j+)(4) for(k=1;k=0&(Ai!=k)(3) i-;(4) return i;此算法中的语句(3)的频度不仅与问题规模n有关,还与输入实例中 A的各元素取值及K的取值有关: 若A中没有与K相等的元素,则语句的频度f(n)二n; 若A的最后一个元素等于K,则语句(3)的频度f(n)是常数0。(5) 最坏时间复杂度和平均时间复杂度 最坏情况下的时间复杂度称最坏时间复杂度。一般不特别

16、说明,讨论的时间复杂度均是最坏情况下的时间复杂度。这样做的原因是:最坏情况下的时间复杂度是算法在任何输入实例上 运行时间的上界,这就保证了算法的运行时间不会比任何更长。【例3. 19】查找算法【例18】在最坏情况下的时间复杂度为T(n)=0(n), 它表示对于任何输入实例,该算法的运行时间不可能大于0(n)。平均时间复杂度是指所有可能的输入实例均以等概率出现的情况下, 算法的期望运行时间。常见的时间复杂度按数量级递增排列依次为:常数0(1)、对数阶 0(log2n) 、线形阶 0(n) 、线形对数阶 0(nlog2n) 、平方阶 0(n2) 立方阶 0(n3)、k次方阶0(nk)、指数阶0(2n)。显然,时间复杂度为指数阶0(2n) 的算法效率极低,当 n 值稍大时就无法应用。类似于时间复杂度的讨论,一个算法的空间复杂度(SpaceComplexity)S(n)定义为该算法所耗费的存储空间,它也是问题规模n的函 数。渐近空间复杂度也常常简称为空间复杂度。算法的时间复杂度和空间复 杂度合称为算法的复杂度。

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!