关闭

时间复杂度和空间复杂度

368人阅读 评论(0) 收藏 举报

时间复杂度的定义:

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


排序算法中的复杂度



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:217434次
    • 积分:2856
    • 等级:
    • 排名:第12943名
    • 原创:39篇
    • 转载:30篇
    • 译文:1篇
    • 评论:12条
    最新评论