時間複雜度(time complexity)和空間複雜度(space complexity)

時間複雜度(time complexity)指的是程式執行時間隨著輸入數據變大而增長的速度。
空間複雜度(space complexity)則是指程式執行所需要的內存空間隨著輸入數據變大而增長的速度。
空間複雜度,是指算法所需的內存空間。舉個簡單的例子,如果你有一個陣列,裡面有n個數字,你需要用一個變量來儲存每個數字,那麼空間複雜度就是O(n)。
另外,如果你使用递归算法,每個遞迴呼叫都需要在堆棧上分配空間,所以空間複雜度也可能是O(n)。
一般來說
「時間複雜度」與「空間複雜度」之間是可以相互 trade off 的!
而相互 trade off 的意思是:
在某些情況底下,我們是可以讓程式多用一些記憶體空間來多記一些資訊,就可以省去一些重複的運算來加速程式的執行時間;或者我們完全沒有多餘的記憶體資源可以使用,也可以透過把一些原本可以靠記憶體存儲的資訊改用重複計算的方式來取得。
一樣是要做排序像 Bubble Sort 就不需要額外的記憶體空間 ( 但是做起來比較久 );Bucket Sort 就需要大量額外的記憶體空間 ( 但是做起來比較快 )。