算法的空间复杂度

本文深入解析了算法的空间复杂度,包括程序自身、输入数据及辅助变量所占空间的分析。通过两个实例,详细阐述了如何计算空间复杂度,并强调了递归算法与非递归算法在空间使用上的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

空间复杂度(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.对于递归算法来说,代码一般都比较简短,算法本身所占用的存储空间较少,但运行时需要占用较多的临时工作单元;
       若写成非递归算法,代码一般可能比较长,算法本身占用的存储空间较多,但运行时将可能需要较少的存储单元。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据Ai指北

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值