无论问题规模怎么变,算法运行内存空间都是固定的常量,算法空间复杂度S(n)=O(1)
即算法原地工作。
eg:
#include <stdio.h>
void LoveYou(int n){ //n为问题规模
int i = 1; //1
while (i<=n)
{
i++;//1
printf("Happy!",i);
}
printf("Happy to you!",n);
}
有的与问题规模有关
eg:
void test(int n){
int flag[n];
int i;
...
}
S(n)=4+4n+4=4n+8
(类似时间复杂度,只需关注存储空间大小与规模相关的变量)
S(n)=O(n)
eg2:
void test(int n){
int flag[n][n];
int i;
//...
}
S(n)=O(n^2)
eg3:
void test(int n){
int flag[n][n];
int other[n];
int i;
//...
}
与时间复杂度加法规则类似
S(n)=O(n^2)
eg3:
void recursion(int n){
int a,b,c;
//...省略代码
if(n>1){
recursion(n-1);
}
printf("第 %d\n",n);
}
int main(){
recursion(5);
}
每一阶递归调用,都要K B,
so S(n)=O(n) 空间复杂度=递归调用深度
eg4:小改一下
void recursion(int n){
int flag[n];
//...省略代码
if(n>1){
recursion(n-1);
}
printf("第 %d\n",n);
}
int main(){
recursion(5);
}
1+2+3+ ....+n=n(n+1)/2
S(n)=O(n^2)