《数据结构与算法》二:空间复杂度

285 阅读1分钟

本系列文章是以笔记的方式进行记录,主要内容均来源于王争老师的《数据结构与算法之美》

空间复杂度

什么是空间复杂度

渐进空间复杂度(asymptotic space complexity),表示算法的存储空间与数据规模之间的增长关系。

void demo(int n) {
  int i = 0;
  int[] a = new int[n];
  for (i; i <n; ++i) {
    a[i] = i + 1;
  }
}

我们可以看到,第 2 行代码中,我们申请了一个空间存储变量 i,但是它是常量阶的,跟数据规模 n 没有关系。第 3 行申请了一个大小为 n 的 int 类型数组,除此之外,剩下的代码都没有占用更多的空间,所以整段代码的空间复杂度就是 T(n) = O(n + 1),又因为常量可以忽略,所以最终空间复杂度为T(n) = O(n)。

我们常见的空间复杂度就是 O(1)、O(n)、O(n2 ),像 O(logn)、O(nlogn) 这样的对数阶复杂度平时都用不到。空间复杂度相对的比较简单。

复杂度的排序

O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(nx)O(1) < O(logn) < O(n) < O(nlogn) < O(n^2 ) < O(n^x)
(借用王争老师的一张图,我太懒了不想画,哈哈哈)

本系列其他文章:
《数据结构与算法》目录
《数据结构与算法》一:时间复杂度