• 空间复杂度(数据结构)


    概念:

      空间复杂度也是一个数学表达式,是对一个算法在运行过程中临时占用存储空间大小的量度 。
    空间复杂度不是程序占用了多少bytes的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。空间复杂度计算规则基本跟实践复杂度类似,也使用大O渐进表示法。


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

    实例1:

    1. // 计算BubbleSort的空间复杂度?
    2. void BubbleSort(int* a, int n)
    3. {
    4. assert(a);
    5. for (size_t end = n; end > 0; --end)
    6. {
    7. int exchange = 0;
    8. for (size_t i = 1; i < end; ++i)
    9. {
    10. if (a[i-1] > a[i])
    11. {
    12. Swap(&a[i-1], &a[i]);
    13. exchange = 1;
    14. }
    15. }
    16. if (exchange == 0)
    17. break;
    18. }
    19. }

    实例2:

    1. // 计算Fibonacci的空间复杂度?
    2. // 返回斐波那契数列的前n项
    3. long long* Fibonacci(size_t n)
    4. {
    5. if(n==0)
    6. return NULL;
    7. long long * fibArray = (long long *)malloc((n+1) * sizeof(long long));
    8. fibArray[0] = 0;
    9. fibArray[1] = 1;
    10. for (int i = 2; i <= n ; ++i)
    11. {
    12. fibArray[i] = fibArray[i - 1] + fibArray [i - 2];
    13. }
    14. return fibArray;
    15. }

    实例3:

    1. // 计算阶乘递归Fac的空间复杂度?
    2. long long Fac(size_t N)
    3. {
    4. if(N == 0)
    5. return 1;
    6. return Fac(N-1)*N;
    7. }

    实例答案及分析:

    1. 实例1使用了常数个额外空间,所以空间复杂度为 O(1)
    2. 实例2动态开辟了N个空间,空间复杂度为 O(N)
    3. 实例3递归调用了N次,开辟了N个栈帧,每个栈帧使用了常数个空间。空间复杂度为O(N)

    这个博客如果对你有帮助,给博主一个免费的点赞就是最大的帮助

    欢迎各位点赞,收藏和关注哦

    如果有疑问或有不同见解,欢迎在评论区留言哦

    后续我会一直分享双一流211西北大学软件(C,数据结构,C++,Linux,MySQL)的学习干货以及重要代码的分享

  • 相关阅读:
    JAVA赋值不使用引用的办法
    简单介绍24种设计模式
    python实现熵权法
    SpringBoot2.0集成WebSocket,多客户端
    源码分析基础
    软技能2阅读有感--给生活一个更好的支点
    第五站:操作符(终幕)(一些经典的题目)
    基于JAVA砂石矿山管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
    C#入门(2): namespace、类
    攻防世界WEB练习-favorite_number
  • 原文地址:https://blog.csdn.net/m0_73751295/article/details/136605442