前言
在上一篇文章中,耀哥給大家介紹了時間復雜度的概念,這一次耀哥將會給大家介紹評價算法優劣的另一個評測標準---空間復雜度。
一. 空間復雜度的概念
空間復雜度(Space Complexity),是對一個算法在運行過程中臨時占用存儲空間大小的量度。值得注意的是,時間復雜度不是用來計算程序具體耗時的,空間復雜度也不是用來計算程序所占的具體內存大小,它們都只是一個量度而已。
二. 常見的空間復雜度
常數階O(1)
int sum = 0;
for(int i=0;i<n;i++){< p="">
sum=sum+i;
}
此例中,不管n變得多大,都只有2個變量占用內存,內存的占用是一個常數,記住O(1)即可。
O(n)
int sum = 0;
for(int i=0;i<n;i++){< p="">
sum=sum+i;
int m = sum;
}
我們注意看此案例中,在for循壞中,變量m一共被聲明了n次,再加上sum與i的聲明,一共分配的內存有n+2次。其中,2可以忽略,所以算法的空間復雜度為O(n)
O(Log2N)
另一個常見的空間復雜度是O(Log2N),我們來看看下面這段代碼,它的空間復雜度就是O(Log2N),大家自己考慮一下是不是這樣?
int sum = 0;
for(int i=0;i<n;i++){< p="">
sum=sum+i;
int m = sum;
i= 2*i;
}
三. 結語
經過以上幾個案例,耀哥大致給同學們介紹了一下常見的幾種空間復雜度。值得注意的是,隨著計算機行業的迅速發展,計算機的存儲容量已經達到了很高的程度。所以我們如今已經不再需要特別關注一個算法的空間復雜度,大多數時候都是用空間換取時間。但如果是某些存儲容量比較小的微控制器,例如單片機等,還是需要考慮一下空間復雜度的。