算法复杂度详解(二)

前言

上次我们介绍复杂度介绍到了时间复杂度,这次我们紧接着上次开始继续讲解空间复杂度,需要了解时间复杂度的小伙伴可以乘坐传送门去看博主上一篇文章。
传送门:算法复杂度详解(一)

文章目录

  • 前言
  • 一、空间复杂度概念
  • 二、实例分析
    • 1.计算BubbleSort的空间复杂度
    • 2.计算Fibonacci的空间复杂度,返回前n项
    • 3.计算阶乘递归Fac的空间复杂度
    • 4.计算斐波那契递归Fib的空间复杂度
  • 三、大O复杂度曲线
  • 四、一些算法的常见复杂度
  • 总结


一、空间复杂度概念

空间复杂度也是一个数学表达式,是对一个算法在运行过程中额外临时占用存储空间大小的量度
空间复杂度计算的是变量的个数,计算规则也与时间复杂度类似,也使用大O渐进表示法
这里要注意:函数运行所需栈空间在编译期间已经确定,所以空间复杂度主要通过函数在运行时显示申请的额外空间来确定


二、实例分析

1.计算BubbleSort的空间复杂度

算法复杂度详解(二)_第1张图片
因为开辟了常数个额外空间,所以这里的空间复杂度为O(1)

2.计算Fibonacci的空间复杂度,返回前n项

算法复杂度详解(二)_第2张图片
要注意,这里的形参n并不是额外变量个数,通过malloc开辟的n+1才是,所以这里的空间复杂度为O(n)

3.计算阶乘递归Fac的空间复杂度

算法复杂度详解(二)_第3张图片

故该题的空间复杂度为O(n)

4.计算斐波那契递归Fib的空间复杂度

算法复杂度详解(二)_第4张图片
这里的空间复杂度为O(n),那为什么不是O(2N)呢,首先如果真是O(2N)极大可能会因为深度太深,而导致栈溢出,其次比如第一步,Fib(n)先递归进行的是Fib(n-1),等Fib(n-1)全部结束了,才会进行Fib(n-2)的进行,所以这一块开辟的空间是重复调用的,故为O(n)

三、大O复杂度曲线

算法复杂度详解(二)_第5张图片

四、一些算法的常见复杂度

算法复杂度详解(二)_第6张图片

总结

到这里我们有关算法复杂度的知识点就讲完了,同学们在理解定义过程中一定要配合着实操进行,否则很难对这类问题有很深的理解

你可能感兴趣的:(算法)