时间换空间,空间换时间
“时间换空间”和“空间换时间”是程序设计中两个非常重要的优化思想,主要用于描述程序在时间效率和内存使用之间的权衡关系。它们体现的是“时间复杂度”和“空间复杂度”之间的取舍。
时间复杂度:表示算法执行所需的基本操作次数,即随着输入规模𝑛的增大,程序运行时间增长的趋势。
空间复杂度:表示算法在运行过程中占用的内存空间的增长趋势,也用 𝑂 表示。
一、时间换空间(用空间提升速度)
含义:程序多用一些内存(空间),来减少计算时间,提高执行效率。
示例:
1.缓存(记忆化搜索 / 动态规划):比如斐波那契数列,使用数组把已经计算过的结果保存下来,避免重复计算。
int fib[100]; // 用空间记录计算结果
int fibonacci(int n) {
if (n <= 1) return n;
if (fib[n] != 0) return fib[n];
return fib[n] = fibonacci(n - 1) + fibonacci(n - 2);
}
2.哈希表查找代替遍历:用哈希表快速查找是否存在某个元素,代替遍历整个数组,提高速度。
二、空间换时间(用时间节省空间)
含义:程序少用内存(节省空间),但可能会牺牲一些运行时间。
| 策略 | 优点 | 缺点 | 应用场景 |
|---|---|---|---|
| 时间换空间 | 提高运行速度 | 占用更多内存 | 查询频繁、数据量适中 |
| 空间换时间 | 节省内存资源 | 执行速度可能较慢 | 内存有限、数据重复性小、场景简单 |
| 方式 | 用途 | 空间复杂度 | 时间复杂度 |
|---|---|---|---|
| 时间换空间 | 用哈希表快速查找 | O(N) | O(N) |
| 空间换时间 | 暴力枚举所有组合 | O(1) | O(N²) |
空间换时间其他案例:输入输出缓冲区,CPU效率得到了提高

浙公网安备 33010602011771号