简单的理解空间复杂度(学习记录)

空间复杂度

1、百度词条给的解释:空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。比如直接插入排序的时间复杂度是O(n^2),空间复杂度是O(1) 。而一般的递归算法就要有O(n)的空间复杂度了,因为每次递归都要存储返回信息。一个算法的优劣主要从算法的执行时间和所需要占用的存储空间两个方面衡量。

2、目前见过比较多的解释:算法的空间复杂度通过计算,算法所需的存储空间实现,算法的空间复杂度的计算公式记作:S(n)=O(f(n)),其中,n为问题的规模,f(n)为语句关于n所占存储空间的函数。

这上面的定义都有点抽象下面是关于我自己的一点理解

3、关于我自己的一点理解,让我们先来分别看两段段代码:
代码一如下:
int[] arr=new int[n];
for(int i=0;i<arr,length;i++){
System.out.println(arr[i]);
}

代码二如下:
public void fun(int n){
for(int i=0;i<n;i++){
System.out.println(n);
}
}

分析代码一:
在代码一中arr数组的大小并不确定,所以该数组所占用的空间大小是所有元素之和,那么也就是说它的空间复杂度为n,记为O(n)。它的时间复杂度为n,记为O(n);

分析代码二:
在该方法中的代码并没有发生额外的分配空间的情况,不论输入值的大小空间的复杂度始终为1,所以记为O(1)。而时间复杂度为n,记为O(n)。

小结:
1、经过两段代码的分析,可以得出第一段代码数组的大小为n,也就是说程序为数内的元素分配了n个空间,那么空间复杂度就是O(n);
2、第二段代码中可以看出,在执行过程中其并没有发生任何的分配空间的情况,因此我们可以认为它的空间复杂度是常数级别的,就是O(1)
3、如果需要输入n个数据,每个数据因为需要和其他n个数据联系,所以要分配n*n个空间,或者说n的平方的空间,我们就说O(n²)个空间复杂度,这也是因为n是未知的,这个说明的经典的例子就是二维数组

	小白一枚如果有误希望老哥们指点一下老弟
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值