什麼是空間複雜度呢?
空間複雜度是對一個算法在運行過程中佔用內存空間大小的量度,記做S(n)=O(f(n).
利用程序的空間複雜度,可以對程序運行時所需要多少內存有個預先估計。
我這裏來回答兩個常見的相關問題
空間複雜度是考慮程序(可執行文件)的大小麼?
很多同學都會混淆 程序運行時內存大小和程序本身的大小。
這裏我要強調一下空間複雜度是考慮程序運行時佔用內存的大小,而不是可執行文件的大小。
空間複雜度是準確算出程序運行時所佔用的內存麼?
同學們不要以爲空間複雜度就已經精準的掌握了程序的內存使用大小
很有多因素會影響程序真正內存使用大小
例如編譯器的內存對齊,編程語言容器的底層實現等等這些都會影響到程序內存的開銷。
所以空間複雜度是預先大體評估程序內存使用的大小。
說到空間複雜度,我想同學們在leetcode上應該遇到過這種錯誤,就是超出內存限制
leetcode上並沒有說他的限制是多大。 但是我們要知道內存不是無限開闢的。
爲了避免內存超出限制,這也需要我們對算法佔用多大的內存有一個大體的預估。
這就用到了算法空間複雜度的分析。
我們來看一下例子
那麼先來看看什麼時候的空間複雜度是O(1)
看以下代碼:
int j = 0;
for (int i = 0; i < n; i++) {
j++;
}
第一段代碼我們可以看出,隨着n的變化,所需開闢的內存空間並不會隨着n的變化而變化
即此算法空間複雜度爲一個常量,所以表