空间复杂度

2021-11-20  本文已影响0人  sweetBoy_9126

是什么?

案例

  1. 常量空间
    O(1)
let i = 0;
i += 1;

原因:只声明了单个变量,单个变量所占用的内存永远是1

  1. 线性空间
    当算法分配的空间是一个线性的集合(如数组),并且集合大小 和输入规模n成正比时,空间复杂度记作O(n)。
    O(n)
const list = []
for (let i = 0; i < n; i++) {
  list.push(i)
}

原因:我们声明了一个数组,给这个数组里 push 了 n 个 i,所以就占了 n 个

  1. 二维空间
    当算法分配的空间是一个二维数组集合,并且集合的长度和宽度 都与输入规模n成正比时,空间复杂度记作O(n^2)。
    O(n^2)
const matrix = [];
for (let i = 0; i < n; i++) {
  matrix.push([]);
  for (let j = 0; j < n; j++) {
    matrix[i].push(j)
  }
}

matrix 里 push 了 n 个,每一个里又 push 了 n 个,所以就是 n^2

  1. 递归空间
    O(n)
function fun4(n) {
  if (n <= 1) {
    return;
  }
  fun4(n-1);
  ...
}
fun4(5)

执行递归操作所需 要的内存空间和递归的深度成正比。纯粹的递归操作的空间复杂度也 是线性的,如果递归的深度是n,那么空间复杂度就是O(n)。

上一篇下一篇

猜你喜欢

热点阅读