| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 数据结构与算法_空间复杂度 -> 正文阅读 |
|
[数据结构与算法]数据结构与算法_空间复杂度 |
同时间复杂度一样,空间复杂度也是数学的函数表达式。 空间复杂度不是程序占用了多少 bytes的空间,因为这个也没太大意义,所以空间复杂度算的是运行的过程中临时的、额外的变量的个数。 空间复杂度计算规则基本跟实践 复杂度类似,也使用大O渐进表示法。 注意:函数运行时所需要的栈空间(存储参数、局部变量、一些寄存器信息等)在编译期间已经确定好了,因此空间复杂度主要通过函数在运行时候显示申请的额外空间来确定。 冒泡排序的空间复杂度请计算BubbleSort的空间复杂度:
这里看起来定义了end、exchange和i三个变量。 虽然是循环n次,但这些变量一直都在用,所以说这里用了三个空间。 是常数次,所以空间复杂度是O(1)。 这就涉及到栈帧的知识了。 在这个函数的栈帧里,编译器先定义一个end,再定义一个i。 当循环结束了之后i被销毁,再循环上来时,又定义了一个i,跟之前的i定义的是同一块空间。 用的是同一块空间!所以用了三个空间。是常数次。
请计算Fibonacci的空间复杂度:
非常明显是O(N)。 从(long long*)malloc((n + 1) * sizeof(long long))中可知开辟了n+1个空间。 在for(int i = 2; i <= n; ++i){fibArray[i] = fibArray[i - 1] + fibArray[i - 2];}中进行计算, 第0个和第1个算出第3个, 第3个和第4个算出第5个, ··· ··· 直到计算出第n个。 计算方法不是特别重要,重要的是开辟了n+1个空间! 那么它的空间复杂度就是O(N)。 这里主要是用数组来求斐波那契数,所以空间较大。 事实上如果只想求第N个数的话,这个算法空间复杂度可以优化成O(1)。 阶乘递归的空间复杂度计算阶乘递归Factorial的空间复杂度?
递归调用了N次,开辟了N个栈帧,每个栈帧使用了常数个空间。
空间复杂度为O(N)。 最后强调一下,空间是可以重复利用、不累计的,时间是一去不复返、累计的。 如斐波那契数递归时,很多空间都是重复利用的,但时间只会向前。 创作不易,求各位老铁三连支持下! |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年2日历 | -2025/2/27 2:00:32- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |