算法空间复杂度详解

简介: 算法空间复杂度详解

如果您觉得文章不错,期待你的一键三连哦,你的鼓励是我创作的动力之源,让我们一起加油,一起奔跑,让我们顶峰相见!!!

前言

避免在处理大规模问题时出现效率低下,耗费较多资源,所以引入了算法复杂度,算法复杂度可以来衡量算法的效率和算法的可行性,可以帮助选择出最优的算法来解决问题;

空间复杂度的概念

空间复杂度也是一个数学表达式,是对一个算法在运行过程中额外临时占用存储空间大小的量度 。
空间复杂度不是程序占用了多少bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。空间复杂度计算规则基本跟实践复杂度类似,也使用大O渐进表示法。
注意:函数运行时所需要的栈空间(存储参数、局部变量、一些寄存器信息等)在编译期间已经确定好了,因此空间复杂度主要通过函数在运行时候显式申请的额外空间来确定

实例(含分析)

所需知识:大O渐近表示法,如有不懂的请到前一篇文章《时间复杂度》内学习

例一: 计算BubbleSort的空间复杂度?

分析:

该算法是一个排序的算法,所计算的空间复杂度的大小是为了排序所额外开辟的空间;

结果:

根据上面的分析,该算法开辟的空间有3个,是常数个,根据大O渐近表示法,

BubbleSort的空间复杂度为  O(1) 

例二:计算Fibonacci的空间复杂度?返回斐波那契数列的前n项

分析:

结果:

根据上面的分析,该算法开辟的空间有n+2个,根据大O渐近表示法

Fibonacci的空间复杂度为: O(N)

例三:

分析:

结果:每次调用开辟常数个空间,即O(1) ;会调用N次;会开辟N个O(1), 所以根据大O渐近表示法,

阶乘递归Fac的空间复杂度为 :O(N)  ;

例四   计算斐波那契递归Fib的空间复杂度?

分析:首先理解一下时间和空间

时间:是一去不复返的,用了就没了,是累积的;

空间:计算机内给某个变量或则函数开辟的空间,用完之后是会还给操作系统的,然后会被分配给其他人使用;是可以重复利用的:

普通函数是一次调用,而递归是多次调用;

当计算Fib(N)时,并不是同时调用Fib(N-1)  与Fib(N-2)

而是会像上图红色的箭头所示调用;这里调用了N-1次,开辟了N-1次常数大小的空间,空间复杂度为:O(N);当调用完后,又会像上图蓝色箭头所示返回,返回过后,所开辟的栈帧就销毁了,例如上面的Fib(2)的值返回后,为Fib(2)所开辟的空间油还给操作系统了,还给操作系统的空间会继续调用其他的Fib,知道算法结束;

结果:

根据上述的分析:整个算法在执行的过程中,最大值开辟了N-2个常数大小的空间,而为该算法开辟大的这些空间,会重复利用,来实现该算法,所以该算法的空间复杂度为:O(N)

栈帧的复用的理解

如下代码及结果

void Func1()
{
  int a = 10;
  printf("%p\n",&a);
}
void Func2()
{
  int b = 20;
  printf("%p\n",&b);
}
int main()
{
  Func1();
  Func2();
  return 0;
}

分析:


目录
相关文章
|
2月前
|
机器学习/深度学习 存储 缓存
数据结构从入门到精通——算法的时间复杂度和空间复杂度
算法的时间复杂度和空间复杂度是评估算法性能的两个重要指标。时间复杂度主要关注算法执行过程中所需的时间随输入规模的变化情况,而空间复杂度则关注算法执行过程中所需的最大存储空间或内存空间。
143 0
|
2月前
|
机器学习/深度学习 存储 算法
数据结构 | 算法的时间复杂度和空间复杂度【详解】(二)
数据结构 | 算法的时间复杂度和空间复杂度【详解】(二)
|
2月前
|
机器学习/深度学习 存储 算法
数据结构 | 算法的时间复杂度和空间复杂度【详解】(一)
什么是数据结构? 数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。
|
2月前
|
机器学习/深度学习 算法 存储
[数据结构]——算法的时间复杂度和空间复杂度
[数据结构]——算法的时间复杂度和空间复杂度
|
19天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
19天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-1
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
27天前
|
算法
数据结构和算法学习记录——时间复杂度、空间复杂度相关练习题
数据结构和算法学习记录——时间复杂度、空间复杂度相关练习题
13 2
|
2月前
|
算法
说说你对算法中时间复杂度,空间复杂度的理解?如何计算?
该文介绍了算法的基本概念,强调了时间和空间复杂度在衡量算法效率中的重要性。时间复杂度表示算法执行时间与输入规模的增长关系,常用大O符号表示,如O(1), O(log n), O(n), O(nlogn), O(n^2)等。文章指出,最坏情况下的时间复杂度是评估算法性能的上限,并且在实际应用中需要在时间与空间之间找到平衡。
|
27天前
|
存储 机器学习/深度学习 算法
数据结构和算法学习记录——空间复杂度的计算(冒泡排序、阶乘递归、斐波那契数列递归、常见复杂度对比、栈帧、栈溢出)
数据结构和算法学习记录——空间复杂度的计算(冒泡排序、阶乘递归、斐波那契数列递归、常见复杂度对比、栈帧、栈溢出)
14 0
|
2月前
|
存储 算法
算法的时间复杂度和空间复杂度
算法的时间复杂度和空间复杂度