内存珍贵:空间效率探索
在软件开发中,内存的高效利用一直是一个重要的议题。本文将深入探讨几种不同的内存使用方案,分析它们的空间和时间复杂度,以及在不同场景下的应用。
1. Memory3 实现分析
Memory3 基于两个普通数组实现,数组大小分别与容器数量和组数量相等。以下是其在不同场景下的内存需求:
| 场景 | 大小(计算) | 大小(字节) | 参考占比 |
| ---- | ---- | ---- | ---- |
| 1000 个孤立容器 | 4 + 16 + 1000 * 4 + 4 + 16 + 1000 * 4 | 8040 | 7% |
| 100 组,每组 10 个容器 | 4 + 16 + 1000 * 4 + 4 + 16 + 100 * 4 | 4440 | 7% |
移除容器对象能大幅节省内存,且在渐近复杂度方面不会损失性能。但在实际应用中, connect 和 addWater 方法需要遍历所有容器,而之前的实现只需遍历正在处理的组。此外, newContainer 方法由于调用 Arrays.copyOf ,需要线性时间,而之前版本的构造函数是常数时间。
2. Memory4 实现分析
Memory4 是本章的最终实现,每个额外容器仅使用 4 字节,但时间复杂度较高。它使用一个静态数组,每个容器对应一个单元格,具有双重用途:对于某些索引,数组存储同一组中下一个容器的索引;对于没有下一个容器的情况,数组存储该容器(以及同一组中每个容器)的水量。 <
超级会员免费看
订阅专栏 解锁全文
700

被折叠的 条评论
为什么被折叠?



