算法的空间复杂度

空间复杂度(Space Complexity))
       算法的存储量包括:
       1.程序本身所占空间
       2.输入数据所占空间;
       3.辅助变量所占空间
       输入数据所占空间只取决于问题本身,和算法无关,则只需要分析除输入和程序之外的辅助变量所占额外空间。
       
       空间复杂度是对一个算法在运行过程中临时占用的存储空间大小的量度,一般也作为问题规模n的函数,以数量级形式给出,记作:
       S(n) = O(g(n))
     
空间复杂度分析1:
int fun(int n){  
       int i,j,k,s;
           s=0;
           for (i=0;i<=n;i++)          
                     for (j=0;j<=i;j++)          
                                 for (k=0;k<=j;k++)    
                                     s++;
           return(s);
}
由于算法中临时变量的个数与问题规模n无关,所以空间复杂度均为S(n)=O(1)。

空间复杂度分析2:
void fun(int a[],int n,int k)
  //数组a共有n个元素
{        int i;
       if (k==n-1)
          for (i=0;i                  printf("%d\n",a[i]);  //执行n次
       else
       {  for (i=k;i                a[i]=a[i]+i*i;          //执行n-k次
          fun(a,n,k+1);
       }
}

此属于递归算法(后续讲解),每次调用本身都要分配空间,fun(a,n,0)的空间复杂度为O(n)。

注意:
1.空间复杂度相比时间复杂度分析要少
2.对于递归算法来说,代码一般都比较简短,算法本身所占用的存储空间较少,但运行时需要占用较多的临时工作单元;
       若写成非递归算法,代码一般可能比较长,算法本身占用的存储空间较多,但运行时将可能需要较少的存储单元。

你可能感兴趣的:(数据结构与算法)