前面有几篇博客说了说时间复杂度的分析,今天来说一说空间复杂度吧
下面这个是我前一段时间看的一篇有关于空间复杂度的一片文章,感觉写的很好今天来给大家分享一下。
类比于时间复杂度的讨论,一个算法的空间复杂度是指该算法所耗费的存储空间,计算公式计作:S(n) = O(f(n))。其中 n 也为数据的规模,f(n) 在这里指的是 n 所占存储空间的函数。
一般情况下,我们的程序在机器上运行时,刨去需要存储程序本身的输入数据等之外,还需要存储对数据操作的「存储单元」。
如果输入数据所占空间和算法无关,只取决于问题本身,那么只需要分析算法在实现过程中所占的「辅助单元」即可。如果所需的辅助单元是个常数,那么空间复杂度就是 O(1)。
空间复杂度其实在这里更多的是说一下这个概念,因为当今硬件的存储量级比较大,一般不会为了稍微减少一点儿空间复杂度而大动干戈,更多的是去想怎么优化算法的时间复杂度。
所以我们在日常写代码的时候就衍生出了用「空间换时间」的做法,并且成为常态。
比如我们在求解斐波那契数列的时候我们可以直接用公式去递归求,用哪个求哪个,同样也可以先把很多结果都算出来保存起来,然后用到哪个直接调用,这就是典型的用空间换时间的做法,但是你说这两种具体哪个好,伟大的马克思告诉我们「具体问题具体分析」。