開啟章節選單
空間複雜度
常見簡介
空間複雜度(Space Complexity)是指演算法執行時所需的記憶體空間。一般來說,複雜度高的演算法會消耗更多的記憶體空間,反之,複雜度低的演算法則消耗較少的記憶體空間。
不過實際上在任何的競賽獲 APCS 考試中,空間複雜度的重要性通常不如時間複雜度來得高,因為大部分的題目都不會特別太嚴格的限制記憶體空間的使用,不過還是建議在解題時可以稍微了解一下空間複雜度的概念。
計算方式
空間複雜度的計算方式和時間複雜度類似,也是使用 big-O 表示法來表示。不過空間複雜度的計算方式通常比較簡單,只需要計算演算法執行時所需要的額外空間即可。
考慮以下的例子:
cin >> n; vector<int> a(n); // 宣告一個長度為 n 的陣列 for (int i = 0; i < n; i++) { cin >> a[i]; // 讀入 n 個數字 }
這個程式碼的空間複雜度是 ,因為宣告了一個長度為 的陣列,而這個陣列所佔用的空間就是 。
再來考慮以下的程式碼:
cin >> n; vector<vector<int>> a(n, vector<int>(n)); // 宣告一個 n x n 的二維陣列 for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cin >> a[i][j]; // 讀入 n x n 個數字 } }
這個程式碼的空間複雜度是 ,因為宣告了一個 的二維陣列,而這個陣列所佔用的空間就是 。
就是這麼的簡單,只要計算演算法執行時所需要的額外空間即可。