算法的空间复杂度

空间复杂度(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<n;i++)  
                 printf("%d\n",a[i]);  //执行n次
       else
       {  for (i=k;i<n;i++)
               a[i]=a[i]+i*i;          //执行n-k次
          fun(a,n,k+1);
       }
}

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

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

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值