固定部分,这部分空间的大小与输入/输出的数据的个数多少、数值无关。主要包括指令空间(即代码空间)、数据空间(常量、简单变量)等所占的空间。这部分属于静态空间。
可变空间,这部分空间主要包括动态分配的空间,以及递归栈所需的空间等,这部分的空间大小与算法有关。
常见的空间复杂度就是 O(1)、O(n) 像是 O(logn)、O(nlogn) 对数阶的复杂度平时都用不到,而且空间复杂度分析比时间复杂度分析要简单很多。
空间复杂度为O(1):有的算法只需要占用少量的临时工作单元,而且不随问题规模的大小而改变,我们称这种算法是“就地”执行的,是节省存储的算法,空间复杂度为 O(1)。
空间复杂度为 O(n):有的算法需要占用的临时工作单元与解决问题的规模n有关,它随着 n 的增大而增大,当n较大时,将占用较多的存储单元,例如快速排序和归并排序算法就属于这种情况。
以下用几个实例代码来说明: