空间复杂度:
算法的存储变量包括:
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,in n){
if(n==0){
System.out.println(a);
}else{
fun(a,n-1)
}
此属于递归算法,每次调用本身都需要分配新的空间,其空间复杂度为O(n).
注意:
1、空间复杂度相比时间复杂度分析要少,
2、递归情况:递归使代码简洁,算法本身所占用的存储空间较少,缺点:效率低下,运行时需要占用较多的临时工作单元
若写成非递归情况,代码一般本身可能比较长,算法本身占用的存储空间较多,但运行将需要较少的存储单元。