时间复杂度和空间复杂度

原创 2015年07月07日 14:24:26

时间复杂度的定义:

一 般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大 时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n))为算法的渐进 时间复杂度(O是数量级的符号),简称时间复杂度。

计算方法:

1) 算法的基本操作重复执行的次数是模块n的某一个函数f(n),因此,算法的时间复杂度记做:T(n)=O(f(n)),随着模块n的增大,算法执行的时间的增长率和f(n)的增长率成正比,所以f(n)越小,算法的时间复杂度越低,算法的效率越高。

2) 在计算时间复杂度的时候,先找出算法的基本操作,然后根据相应的各语句确定它的执行次数,再找出T(n)的同数量级(它的同数量级有以下:1,Log2n,n ,nLog2n ,n的平方,n的三次方,2的n次方,n!),找出后,f(n)=该数量级,若T(n)/f(n)求极限可得到一常数c,则时间复杂度 T(n)=O(f(n))

3) 对于f(n),忽略其常量、低次幂和最高次幂的系数,得到最高次幂的数量级即可。更简便的方法是找最内层循环语句执行次数的数量级。

例:

<span style="font-size:12px;">  for(i=1;i<=n;++i)
  {
	  for(j=1;j<=n;++j)
	  {
		  c[ i ][ j ]=0; //该步骤属于基本操作执行次数:n^2(n的平方)
		  for(k=1;k<=n;++k)
		  	c[ i ][ j ]+=a[ i ][ k ]*b[ k ][ j ]; //该步骤属于基本操作 执行次数:n^3
	  }
  }</span>

根据上面的方法,我们可以确定 n^3 为T(n)的同数量级,则该算法的 时间复杂度:T(n)=O(n^3)


空间复杂度的定义:

类似于时间复杂度的讨论,一个算法的空间复杂度(SpaceComplexity)S(n)定义为该算法所耗费的存储空间,它也是问题规模n的函数。渐近空间复杂度也常常简称为空间复杂度。记作S(n)=O(f(n)),其中n为问题的规模,S(n)表示空间复杂度。

计算方法:

当 一个算法的空间复杂度为一个常量,即不随被处理数据量n的大小而改变时,可表示为O(1);当一个算法的空间复杂度与以2为底的n的对数成正比时,可表示 为0(10g2n);当一个算法的空I司复杂度与n成线性比例关系时,可表示为0(n).若形参为数组,则只需要为它分配一个存储由实参传送来的一个地址 指针的空间,即一个机器字长空间;若形参为引用方式,则也只需要为其分配存储一个地址的空间,用它来存储对应实参变量的地址,以便由系统自动引用实参变量。


排序算法中的复杂度



快速排序 及其时间复杂度和空间复杂度

快速排序是排序算法中效率相对较高的,但使用的人却是比较少,大家一般信手拈来的排序算法就是冒泡排序。因为冒泡排序主观,容易理解,而快速排序使用到了递归,大家可能就有点不知所措了。 算法分析...
  • qfikh
  • qfikh
  • 2016年10月20日 11:51
  • 897

常见排序算法及对应的时间复杂度和空间复杂度

排序算法经过了很长时间的演变,产生了很多种不同的方法。对于初学者来说,对它们进行整理便于理解记忆显得很重要。每种算法都有它特定的使用场合,很难通用。因此,我们很有必要对所有常见的排序算法进行归纳。...
  • Gane_Cheng
  • Gane_Cheng
  • 2016年09月25日 00:14
  • 15407

关于计算时间复杂度和空间复杂度

相信学习编程的同学,或多或少都接触到算法的时间复杂度和空间复杂度了,那我来讲讲怎么计算。        常用的算法的时间复杂度和空间复杂度 一,求解算法的时间复杂度,其具体步骤是:   ⑴ 找出算法...
  • yangwei282367751
  • yangwei282367751
  • 2016年09月04日 00:09
  • 15433

一文搞懂算法的时间复杂度与空间复杂度

时间复杂度分析 空间复杂度
  • u010402786
  • u010402786
  • 2016年05月17日 14:52
  • 3089

算法的空间复杂度于时间复杂度的关系

算机在完成一个任务的时候有两个指标,时间和所有内存(也就是空间)。这两者是负相关的。也就是说,当你设计一个特定程序时,你可以选择使用更多的内存,这样可以达到提高程序运行速度的目的,也就是减少程序运行时...
  • sunstars2009918
  • sunstars2009918
  • 2011年09月07日 10:53
  • 5557

什么是时间复杂度和空间复杂度

先简要介绍一下: 算法复杂度分为时间复杂度和空间复杂度。其作用:时间复杂度是指执行这个算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。时间和空间(即寄存器)都是计算机资源的重要...
  • leikun153
  • leikun153
  • 2018年01月23日 20:30
  • 22

数据结构之时间复杂度和空间复杂度

算法复杂度分为时间复杂度和空间复杂度,一个好的算法应该具体执行时间短,所需空间少的特点。      随着计算机硬件和软件的提升,一个算法的执行时间是算不太精确的。只能依据统计方法对算法进行估算。...
  • lg_gyh
  • lg_gyh
  • 2016年09月06日 18:45
  • 2871

排序算法之 归并排序 及其时间复杂度和空间复杂度

在排序算法中快速排序的效率是非常高的,但是还有种排序算法的效率可以与之媲美,那就是归并排序;归并排序和快速排序有那么点异曲同工之妙,快速排序:是先把数组粗略的排序成两个子数组,然后递归再粗略分两个子数...
  • YuZhiHui_No1
  • YuZhiHui_No1
  • 2015年03月12日 16:16
  • 18242

约瑟夫环时间复杂度O(n)解法

O(n)解约瑟夫环问题
  • Michael__Jack
  • Michael__Jack
  • 2017年10月20日 00:18
  • 234

数据结构时间复杂度和空间复杂度

数据结构时间复杂度
  • qq_36411874
  • qq_36411874
  • 2017年02月25日 12:00
  • 267
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:时间复杂度和空间复杂度
举报原因:
原因补充:

(最多只允许输入30个字)