空间复杂度分析
概念讲解
常见空间复杂度
| 复杂度 | 示例 |
|---|---|
| O(1) | 常数个变量 |
| O(n) | 一维数组 |
| O(n²) | 二维数组 |
| O(log n) | 递归栈(二分) |
存储单位
| 类型 | 大小 |
|---|---|
| int | 4 字节 |
| long long | 8 字节 |
| double | 8 字节 |
| char | 1 字节 |
| bool | 1 字节 |
内存计算
int a[1000][1000]
= 1000 * 1000 * 4 字节
= 4,000,000 字节
≈ 4 MB考点分析
初赛考查方式
- 选择题: 空间计算
- 填空题: 内存占用
常见考点
- 数组空间计算
- 递归栈空间
- 内存限制判断
例题精讲
例题 1:空间计算
题目: int a[1000] 占多少字节?
解答:
字节
例题 2:内存限制
题目: 内存限制 256MB,能开 int a[10^7] 吗?
解答:
字节 ≈ 40MB < 256MB,可以。
练习题
long long a[100000]占多少字节?
查看答案
800000 字节(约 0.76 MB)
字节
- 递归深度为 n 的空间复杂度是多少?
查看答案
O(n)
每次递归调用会在栈上分配空间,深度为 n 时,栈空间为 O(n)。
- 256MB 能开多大的 int 数组?
查看答案
约 6700 万个 int 元素
实际可用约 6 × 10⁷ 个元素(需要留一些空间给其他变量和栈)。
易错点
⚠️ 注意:
- 1MB = 1024KB = 1048576B
- 递归有栈空间开销
- 全局数组在堆上,局部数组在栈上
- 竞赛通常内存限制 256MB 或 512MB