持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情
前言
我们了解了时间复杂度的分析之后,对于空间复杂度分析的学习相对来说就会比较简单的。我们今天就来分析一下空间复杂度
空间复杂度
空间复杂度称作渐进空间复杂度。表示的就是存储的空间与数据规模之间的增长关系。我们按照惯例通过一个代码的例子来说明。
1 public void printNumber(int n) {
2 int i = 0;
3 int arr = new int[n];
4 for (; i<n; i++) {
5 arr[i] = i*i;
6 }
7
8 for (i = n-1; i>=0; i--) {
9 System.out.println(arr[i]);
10 }
11 }
我们采用跟时间复杂度的分析一样的方式,一个单位的存储空间,使用UnitSpace来表示,第一行代码定义一个i变量,耗费1个UnitSpace。第二行代码通过n来定义一个数组变量,耗费n个UnitSpace,第4到5行代码使用for循环对arr数组进行赋值操作,因为数组在第二行处已经定义出来了。所以这个for循环就不耗费存储空间了。第8到9行同理,只是进行打印操作,同样的也不耗费存储空间了。所以整段代码的耗费公式为f(n) = n + 1,存储空间与变量n呈现正比关系,也就是说明空间复杂度为O(n)。
我们常见的空间复杂度就是O(1),O(n),O(n^2),像时间复杂度中的对数层次的表示方式比较少遇到的。通过我们以上的这段代码的分析加上时间复杂度的完整分析的思路应用到空间复杂度的分析中,基本就不会存在什么大问题的。
总结
通过以上四篇的时间复杂度和空间复杂度的分析的学习,我们现在基本可以应对大多数的分析情况。对于时间复杂度的分析,我们需要在日常生活中多练。