手把手教你拿下空间复杂度【下】(超详细)


前言

这是我第二篇知识点分享向博客,书接上文,这次讲解空间复杂度。

时间复杂度的链接放在这里了手把手教你拿下时间复杂度
与上一篇博客一样,这次我也会用详细的讲解与多个例子带你理解空间复杂度。所以可以先放心的点点免费的赞鼓励鼓励自己。

同学们,我要开始装~了。
在这里插入图片描述


一、空间复杂度是什么?

先看定义:空间复杂度是对于一个算法在运行过程中临时占用的储存空间大小的量度。空间复杂度不是程序占用了多少bytes的空间,而是计算的是变量的个数。空间复杂度计算规则与时间复杂度类似,也使用大O渐进表示法。

在这里我有几点要说明一下:

  1. 为什么不是以bytes为最基础的单位计算。因为复杂度的计算实质上算是一种估算,所以我们一般以变量的个数为基础单位。

char类型变量占8比特,int占32比特,double占64。要是以比特为基础单位,我们每次在进行空间复杂度计算的时候都需要将变量类型转换成比特,这无疑大大增加了工作量。

  1. 大O渐进表示法,是为了选取一个式子中影响结果最大的项的表示法。可以理解为一种估算。
    在这里插入图片描述

  2. 别有太大心理负担接下来会以简单的例子来加深理解的,在这里我们理解空间复杂度以变量为单位计算就行了。

二、几个常见情况(就快结束了呢)

情况一

//计算BubbleSort的空间复杂度
void BubbleSort(int *a,int n)//冒泡排序法,这里有两个变量
{
	for(int end=n;end>0;--end)//这里新增一个变量
	{
		for(int i=0;i<end;i++)//这里新增一个变量
		{
			if(a[i]>a[i+1])
				Swap(&a[i],&a[i+1]);
		}
	}
}

思考一下时间复杂度是多少,这里有几个容易产生疑惑的点:

  1. int *a,这个传过来的形参是一个数组,那为什么不算n格变量呢?因为int *a其实只是传过来了数组的首地址,只能算是一个变量。
  2. 第二个for循环里面的i,明明循环了n次,为什么也只算是一个变量?虽然第二个for循环每次结束都会将i变量的空间进行销毁,但是我们再次使用i变量的时候,系统任然会将同一个内存空间分配给它。

这里的空间复杂度是O(1)。

情况二

long long *Fibonacci ( int n )//一个变量
{
	if(n==0)
		return NULL;
		long long *fib_array= (long long ) malloc((n+1) * sizeof ( long long ));//申请了n+1个空间
		fib_arry[0]= 0 ;
		fib_arry[1]= 1 ;
		for(int i=2;i<=n;i++)
		{
				fib_arry [i] = fib_arry [i-1] + fib_arry [i-2] ;
   		}
}

我们可以得出一共有n+2个变量,用渐进大O表示法得空间复杂度为:O(n)。

情况三(最后一个简简单单)

这是一个递归函数

int Factorial(int n)
{
	return (n < 2)? 1:Factorial(n-1)n;
}

这是递归示意图
在这里插入图片描述

在这里,没向下递归一次都会重新申请一个变量n,而这个n与上一级的n所占的内存空间其实是不一样的,因此,在这里变量的个数是整个递归过程中变量个数的总和。因此时间复杂度也就是O(n)。

写在后面

哥哥姐姐们,为了做出这篇知识分享现在是凌晨三点,如果有幸被你们刷到的话,还是点赞关注支持一下了叭。卑微小码农在线码字。
在这里插入图片描述
,

  • 54
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 64
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一周学八天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值