算法一:逐步递增型
void Loveyou(int n)//n为问题规模
{
int i=1;
while(i<=n)
{
i++;
printf("I love you %d\n",i);
}
printf("I love you more than %d\n",n);//5
}
int main()
{
Loveyou(3000);
return 0;
}
无论问题规模怎么变,算法运行所需的内存空间都是固定的常量,算法空间复杂度为:S(n)=O(1)
注:S表示“space”
算法原地工作----算法所需内存空间为常量
算法二:
void test(int n)
{
int flag[n];//声明一个长度为n的数组
int i;
//......此处省略很多代码
}
假设一个int变量占4B...则所需内存空间=4+4n+4=4n+8 (只需关注存储空间大小与问题规模相关的变量)
S(n)=O(n)
算法三:
void test(int n)
{
int flag[n][n];//声明一个n*n的二维数组
int i;
//......此处省略很多代码
}
S(n)=O(n*n)
算法四:
void test(int n)
{
int flag[n][n];
other[n];
int i;
//......
}
S(n)=O(n*n)+O(n)+O(4)=O(n*n)
算法五:递归型
void loveyou(int n)
{
int a,b,c;
//...省略代码
if(n>1)
{
loveyou(n-1);
}
printf("I love you %d\n",n);
}
int main()
{
loveyou(5);
}
1+2+3+...+n=[n(1+n)]/2=(1/2)*(n*n+n)
S(n)=O(n*n)