您的位置:首页 > 其它

时间复杂度和空间复杂度

2015-07-07 14:24 197 查看
时间复杂度的定义:

一 般情况下,算法中基本操作重复执行的次数是问题规模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).若形参为数组,则只需要为它分配一个存储由实参传送来的一个地址 指针的空间,即一个机器字长空间;若形参为引用方式,则也只需要为其分配存储一个地址的空间,用它来存储对应实参变量的地址,以便由系统自动引用实参变量。

排序算法中的复杂度

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: