![数据结构(C语言实现)](https://wfqqreader-1252317822.image.myqcloud.com/cover/699/43806699/b_43806699.jpg)
上QQ阅读APP看书,第一时间看更新
1.5.3 算法空间复杂度
算法的空间复杂度通过计算算法所需的存储空间实现。算法空间复杂度的计算公式记作:
S(n)=O(f(n))
其中,n为问题的规模,f(n)为语句关于n的所占存储空间的函数。一般情况下,一个程序在机器上执行时,除了需要存储程序本身的指令、常数、变量和输入数据外,还需要存储对数据操作的存储单元。若输入数据所占空间只取决于问题本身,和算法无关,这样我们只需要分析该算法在实现时所需的辅助单元即可。若算法执行时所需的辅助空间相对于输入数据量而言是个常数,则称此算法为原地工作,空间复杂度为O(1)。
【例1.5】 以下是一个简单的插入排序算法,分析算法的空间复杂度。
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/22_01.jpg?sign=1738808864-b33SJuoeOICBljiK3PUGMAms8gLqDl8z-0-0353169acb5fb69fb99329e786a4cc26)
该算法借助了变量t,与问题规模n的大小无关,空间复杂度为O(1)。
【例1.6】 以下算法是求n个数中的最大者,分析算法的空间复杂度。
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/22_02.jpg?sign=1738808864-sLQfiuU7HHT1gfgtRoYPSJ7EySIb9l7Z-0-c394e8df7024557434193cf11c9facde)
设FindMax(a,n)占用的临时空间为S(n),由以上算法可得以下占用临时空间的递推式。
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/22_03.jpg?sign=1738808864-1YUAKhkpQ4l0LXnxMObSK2v3YzwULm52-0-2bb78909e5725b4bf75a2835aa66c4db)
则有S(n)=S(n-1)+1=S(n-2)+1+1=…=S(1)+1+1+…+1=O(n)。因此,该算法的空间复杂度为O(n)。