空间复杂度(SpaceComplexity)是对一个算法在运行过程中临时占用存储空间大小的量度。
一个算法的 空间复杂度只考虑在运行过程中为 局部变量分配的 存储空间的大小,它包括为参数表中 形参变量分配的存储空间和为在 函数体中定义的局部变量分配的存储空间两个部分。若一个算法为 递归算法,其 空间复杂度为递归所使用的 堆栈空间的大小,它等于一次调用所分配的临时 存储空间的大小乘以被调用的次数(即为 递归调用的次数加1,这个1表示开始进行的一次非递归调用)。
算法的 空间复杂度一般也以数量级的形式给出。如当一个算法的 空间复杂度为一个 常量,即不随被处理数据量n的大小而改变时,可表示为O(1);当一个算法的空间复杂度与以2为底的n的对数成正比时,可表示为O(log2n);当一个算法的空间复杂度与n成线性比例关系时,可表示为O(n).
时间与空间复杂度的比较
对于一个算法,其 时间复杂度和 空间复杂度往往是相互影响的。当追求一个较好的 时间复杂度时,可能会使 空间复杂度的性能变差,即可能导致占用较多的 存储空间;反之,当追求一个较好的空间复杂度时,可能会使 时间复杂度的性能变差,即可能导致占用较长的运行时间。另外,算法的所有性能之间都存在着或多或少的相互影响。因此,当设计一个算法(特别是大型算法)时,要综合考虑算法的各项性能,算法的使用频率,算法处理的数据量的大小,算法描述语言的特性,算法运行的机器系统环境等各方面因素,才能够设计出比较好的算法。算法的时间复杂度和 空间复杂度合称为算法的复杂度。