algorithm

空间复杂度

而根据不同来源,算法使用的内存空间分为三类:

指令空间:

编译后,程序指令所使用的内存空间。

数据空间:

算法中的各项变量使用的空间,包括:声明的常量、变量、动态数组、动态对象等使用的内存空间。

栈帧空间:

程序调用函数是基于栈实现的,函数在调用期间,占用常量大小的栈帧空间,直至返回后释放。如以下代码所示,在循环中调用函数,每轮调用 test() 返回后,栈帧空间已被释放,因此空间复杂度仍为 O(1)O(1) 。

算法中,栈帧空间的累计常出现于递归调用。如以下代码所示,通过递归调用,会同时存在 NN 个未返回的函数 algorithm() ,此时累计使用 O(N)O(N) 大小的栈帧空间。

1
2
3
4
5
6
7
void algorithm(int N) {
int num = 5; // O(1)
int[] nums = new int[10]; // O(1)
if (N > 10) {
nums = new int[N]; // O(N)
}
}

空间复杂度

空间复杂度