空間複雜度分析
阿新 • • 發佈:2021-02-06
前面我講過,時間複雜度的全稱是漸進時間複雜度,表示演算法的執行時間與資料規模之間的增長關係。類比一下,空間複雜度全稱就是漸進空間複雜度(asymptotic space complexity),表示演算法的儲存空間與資料規模之間的增長關係。
void print(int n) {
int i = 0;
int[] a = new int[n];
for (i; i <n; ++i) {
a[i] = i * i;
}
for (i = n-1; i >= 0; --i) {
print out a[i]
}
}
跟時間複雜度分析一樣,我們可以看到,第 2 行程式碼中,我們申請了一個空間儲存變數 i,但是它是常量階的,跟資料規模 n 沒有關係,所以我們可以忽略。第 3 行申請了一個大小為 n 的 int 型別陣列,除此之外,剩下的程式碼都沒有佔用更多的空間,所以整段程式碼的空間複雜度就是 O(n)。
我們常見的空間複雜度就是 O(1)、O(n)、O(n2 ),像 O(logn)、O(nlogn) 這樣的對數階複雜度平時都用不到。而且,空間複雜度分析比時間複雜度分析要簡單很多。所以,對於空間複雜度,掌握剛我說的這些內容已經足夠了。