空间复杂度

空间复杂度

空间复杂度是对程序执行过程中临时占用空间大小度量的指标,一般空间复杂度表示为S(n) = O(f(n)),其中n表示输入规模,fn表示一段程序代码。

空间复杂度和时间复杂度的有类似的情形如下

常量空间

常量空间的意思是该场景空间复杂度和输入规模n无关,那么常量空间的空间复杂度就可以表示为S(n) = O(1),类似如下代码

 public void methond1(int n){     int m = 3; }

线性空间

线性空间一般和数组有关,如下代码,存在一个一维数组,那么该数组的大小和输入规模n成正比,所以该场景空间复杂度可以表示为S(n) = O(n)。

 public void methond2(int n){     String[] arr = new String[n]; }

二维空间

当程序的内存占用为一个二维数组,如下代码,该二维数组和输入规模n是平方的关系,空间复杂度可以表示为S(n) = O(n2)。

 public void methond3(int n){     String[][] arr = new String[n][n]; }

递归空间

以JAVA语言为例,在程序运行过程中会给当前运行的线程开辟一片内存空间,称为栈,方法调用过程就是压栈操作和出栈操作的过程,而递归简而言之就是当进入方法开始压栈,当方法返回就开始出栈,代码如下

 public void methond4(int n){     if (n<=1){         return;     }     methond4(n-1); }

所以该场景的空间复杂度就是栈的深度,也就是输入规模n那么这里的空间复杂度可以表示为S(n) = O(n)。

空间复杂度和时间复杂度的取舍

空间复杂度和时间复杂度虽然都是衡量一个算法好坏的标准,但是空间复杂度在这个硬件飞速发展的时代显然没有时间复杂度那么的关键,因为内存空间越来越便宜,在时间复杂度和空间复杂度对比下上明显会偏重于时间复杂度。

所以我们在工作中往往会给程序多分配一些内存空间,也要提升程序的执行速度。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值