算法一:逐步递增型
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)