
上QQ阅读APP看书,第一时间看更新
1.5.3 算法空间复杂度
算法的空间复杂度通过计算算法所需的存储空间实现。算法空间复杂度的计算公式记作:
S(n)=O(f(n))
其中,n为问题的规模,f(n)为语句关于n的所占存储空间的函数。一般情况下,一个程序在机器上执行时,除了需要存储程序本身的指令、常数、变量和输入数据外,还需要存储对数据操作的存储单元。若输入数据所占空间只取决于问题本身,和算法无关,这样我们只需要分析该算法在实现时所需的辅助单元即可。若算法执行时所需的辅助空间相对于输入数据量而言是个常数,则称此算法为原地工作,空间复杂度为O(1)。
【例1.5】 以下是一个简单的插入排序算法,分析算法的空间复杂度。

该算法借助了变量t,与问题规模n的大小无关,空间复杂度为O(1)。
【例1.6】 以下算法是求n个数中的最大者,分析算法的空间复杂度。

设FindMax(a,n)占用的临时空间为S(n),由以上算法可得以下占用临时空间的递推式。

则有S(n)=S(n-1)+1=S(n-2)+1+1=…=S(1)+1+1+…+1=O(n)。因此,该算法的空间复杂度为O(n)。