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