算法的空间复杂度

简介: 算法的空间复杂度

一、空间复杂度定义

空间复杂度是一个数学表达式,是对一个算法在运行过程中临时占用存储空间大小的量度

二、空间复杂度的表示方法

大O渐进表示法

空间复杂度不是计算程序占用了多少字节的空间,因为这种计算没有意义。空间复杂度计算的是程序中变量的个数。

注意:函数运行时多需要的栈空间(存储参数、局部变量、一些寄存器信息等)在编译期间已经确定好了,因此空间复杂度主要通过函数在运行时申请的额外空间来确定

简而言之就是,算法函数的传入的参数不算在空间复杂度的计算中

三、实例代码

实例1

冒泡排序算法中的变量有 i、flag、j、tmp,总共4个,是常数个

空间复杂度:O(1)

//冒泡排序(升序)
void bubble_sort(int* arr, int size)
{
  int i = 0;
  int flag = 0;
  for (i = 0; i < size - 1; i++)
  {
    int j = 0;
    for (j = 0, flag = 0; j < size - 1 - i; j++)
    {
      if (arr[j] > arr[j + 1])
      {
        flag = 1;
        int tmp = 0;
        tmp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = tmp;
      }
    }
    if (flag == 0)
    {
      break;
    }
  }
}
实例2

该算法中额外申请了(n+1)个空间

空间复杂度:O(N)

//返回斐波那契数列的前n项
long long* Fibonacci(size_t n)
{
    if (n == 0)
        return NULL;
    long long* fibArray = (long long*)malloc((n + 1) * sizeof(long long));//申请空间
    fibArray[0] = 0;
    fibArray[1] = 1;
    for (int i = 2; i <= n; i++)
        fibArray[i] = fibArray[i - 1] + fibArray[i - 2];
    return fibArray;
}
实例3(递归的空间复杂度)

尽管函数中并没有明显的定义变量,但是每次函数递归时,会创建函数栈帧,调用多少次函数就创建多少层函数栈帧。

空间复杂度:O(N)

long long Fac(long long n)
{
    if (n == 1)
        return 1;
    else
        return n * Fac(n - 1);
}
实例4(双目递归的空间复杂度)

该函数递归在递归的时候,先调用Fib(N),再调用Fib(N-1),再调用Fib(N-2),……,再调用Fib(2)

左子树调用完了,函数栈帧销毁,再调用右子树,所以该算法最多只创建N-1层函数栈帧

空间复杂度:O(N)

int fibonacci1(int n)
{
  if (n > 2)
    return fibonacci1(n - 1) + fibonacci1(n - 2);
  return 1;
}


目录
相关文章
|
1月前
|
机器学习/深度学习 缓存 算法
Python算法设计中的时间复杂度与空间复杂度,你真的理解对了吗?
【10月更文挑战第4天】在Python编程中,算法的设计与优化至关重要,尤其在数据处理、科学计算及机器学习领域。本文探讨了评估算法性能的核心指标——时间复杂度和空间复杂度。通过详细解释两者的概念,并提供快速排序和字符串反转的示例代码,帮助读者深入理解这些概念。同时,文章还讨论了如何在实际应用中平衡时间和空间复杂度,以实现最优性能。
62 6
|
3月前
|
机器学习/深度学习 算法 程序员
读《趣学算法》:重开算法之门,时间复杂度与空间复杂度
本文是作者阅读《趣学算法》后的笔记,介绍了算法复杂度的基本概念,包括时间复杂度和空间复杂度的不同阶表示,并通过具体例子展示了如何计算和理解算法的效率。
65 2
读《趣学算法》:重开算法之门,时间复杂度与空间复杂度
|
4月前
|
机器学习/深度学习 存储 算法
颠覆认知!Python算法设计中的时间复杂度与空间复杂度,你真的理解对了吗?
【7月更文挑战第22天】在Python算法设计中,时间与空间复杂度是评估算法效能的核心。时间复杂度不仅限于大O表示法,还涵盖平均与最坏情况分析。空间复杂度虽关注额外存储,但也反映内存效率。平衡二者需视场景而定,如利用原地算法减少内存消耗,或牺牲空间加速执行。算法优化技巧,如分治与动态规划,助你在资源与速度间找寻最优解,从而高效应对大数据挑战。
48 3
|
1月前
|
存储 算法
算法的时间复杂度和空间复杂度
本文详细讨论了算法的时间复杂度和空间复杂度,包括它们的概念、计算方法和常见复杂度的对比,并通过多个实例解释了如何计算算法的时间和空间复杂度。
64 0
算法的时间复杂度和空间复杂度
|
1月前
|
机器学习/深度学习 存储 算法
【初阶数据结构】算法效率大揭秘 | 时间与空间复杂度的深度剖析
【初阶数据结构】算法效率大揭秘 | 时间与空间复杂度的深度剖析
|
2月前
|
算法 Python
震惊!Python 算法设计背后,时间复杂度与空间复杂度的惊天秘密大起底!
在 Python 算法设计中,理解并巧妙运用时间复杂度和空间复杂度的知识,是实现高效、优雅代码的必经之路。通过不断地实践和优化,我们能够在这两个因素之间找到最佳的平衡点,创造出性能卓越的程序。
39 4
|
2月前
|
缓存 算法 数据处理
时间&空间复杂度,Python 算法的双重考验!如何优雅地平衡两者,打造极致性能?
在Python算法中,时间与空间复杂度的平衡至关重要。时间复杂度反映算法执行时间随输入规模的变化趋势,空间复杂度则关注额外存储空间的需求。优秀的算法需兼顾两者,如线性搜索时间复杂度为O(n),空间复杂度为O(1);二分查找在时间效率上显著提升至O(log n),空间复杂度保持为O(1);动态规划通过牺牲O(n)空间换取O(n)时间内的高效计算。实际应用中,需根据具体需求权衡,如实时数据处理重视时间效率,而嵌入式系统更关注空间节约。通过不断优化,我们能在Python中找到最佳平衡点,实现高性能程序。
66 3
|
1月前
|
算法 C语言
深入理解算法效率:时间复杂度与空间复杂度
深入理解算法效率:时间复杂度与空间复杂度
|
3月前
|
搜索推荐
九大排序算法时间复杂度、空间复杂度、稳定性
九大排序算法的时间复杂度、空间复杂度和稳定性,提供了对各种排序方法效率和特性的比较分析。
148 1
|
4月前
|
存储 算法 搜索推荐
深度剖析 Python 算法:时间复杂度与空间复杂度的爱恨情仇,你站哪边?
【7月更文挑战第23天】在Python算法设计中,时间复杂度与空间复杂度如影随形,反映算法效率与资源消耗。时间复杂度揭示算法随输入规模增长的计算趋势,空间复杂度关注额外存储需求。找最大值示例中,两种实现均具O(n)时间与O(1)空间复杂度,但在排序等复杂场景下,如冒泡排序与快速排序,或哈希表与二叉树查找,权衡变得关键。实时系统偏好低时间复杂度算法,存储受限环境则需关注空间效率。最佳选择依应用场景而定,掌握二者平衡,方能编写高效代码。
41 10