空间复杂度
概念
空间复杂度(space complexity)用于衡量算法占用内存空间随着数据量变大时的增长趋势。这个概念与时间复杂度非常类似,只需将“运行时间”替换为“占用内存空间”。
使用的内存空间
算法运行过程中使用的内存空间包括:
- 输入空间:存储输入数据
- 暂存空间:存储变量\对象\函数调用等
- 输出空间:存储输出数据
其中暂存空间进一步划分为:
- 暂存数据:保存常量\变量\对象
- 栈帧空间:保存调用函数的上下文数据,系统在每次调用函数时都会在栈顶部创建一个栈帧,函数返回后,栈帧空间会被释放
- 指令空间:用于保存编译后的程序指令,在实际统计中通常忽略不计
示例:
use std::rc::Rc;
use std::cell::RefCell;
/* 结构体 */
struct Node {
val: i32,
next: Option<Rc<RefCell<Node>>>,
}
/* 创建 Node 结构体 */
impl Node {
fn new(val: i32) -> Self {
Self { val: val, next: None }
}
}
/* 函数 */
fn function() -> i32 {
// 执行某些操作...
return 0;
}
fn algorithm(n: i32) -> i32 { // 输入数据
const a: i32 = 0; // 暂存数据(常量)
let mut b = 0; // 暂存数据(变量)
let node = Node::new(0); // 暂存数据(对象)
let c = function(); // 栈帧空间(调用函数)
return a + b + c; // 输出数据
}
推算方法
与时间复杂度类似