一丶空间换时间
核心概念:
- 空间换时间的基本概念是通过牺牲额外的内存空间来降低时间复杂度,从而减少程序执行过程中的计算时间。
- 这种优化策略适用于需要快速访问数据、减少计算负担、避免重复计算等场景。
介绍:
1.对象池
通过对象池技术,可以重复利用游戏对象,避免频繁创建和销毁对象所带来的性能开销
①频繁的创建和销毁可能会触发GC垃圾回收机制
②每次创建还会执行一次IO读取
③对象池在一定程度上会占用一定的内存空间,因为池中的对象常驻内存,不会被销毁。
2.数据预处理
在运行时之前,通过预处理数据,将计算结果存储在数据结构中以提高访问速度。
例如,在游戏中,可以提前计算并存储路径信息、光照贴图、碰撞检测结果等
3.缓存机制
使用缓存来存储频繁使用的数据,避免重复计算,以节省计算时间。
4.资源预加载
在游戏开始或加载场景时,提前加载可能需要使用的资源,避免在运行时动态加载资源带来的性能开销
5.静态化
尽量将不会发生变化的数据和对象标记为静态,避免在运行时频繁修改。
举例:
假设你是一个经常忙于工作和日常生活的人,为了更高效地安排时间,你可以使用备忘录来记录重要的事项和计划。
- 场景:你每天有许多任务和约会需要处理,但无法一直记得每个细节。
- 空间换时间:通过将这些任务和约会记录在备忘录中,你可以节省时间和精力,避免频繁地去记忆和查找这些信息。
- 优势:虽然需要一定的空间来记录这些信息,但可以减少忘记重要事项带来的时间损失,并使你的生活更有组织性和高效性。
在这个例子中,使用备忘录来管理日常事务可以被看作是一种空间换时间的策略。虽然需要一些额外的空间来存储这些信息,但可以节省大量时间和精力,使你的生活更加有序和高效。
二丶时间换空间
核心概念:
1.时间换空间的基本概念是通过牺牲计算时间来减少内存空间的使用,以换取更高的执行效率。
2.这种优化策略通常适用于对内存占用有限制或需要降低内存开销的场景,尤其是在处理大规模数据或需要频繁创建和销毁对象时, 例如:地图中的分块加载,不计较大量的计算量,只在乎内存空间的优化
介绍:
1.延迟加载
在需要时才加载资源,而不是一次性加载所有资源,可以节省内存空间,尽管会增加加载资源的时间
2.动态资源管理
动态资源管理技术可以根据场景需求动态加载和释放资源,避免同时加载大量资源导致内存占用过高。
游戏可以根据当前场景的需要,动态加载和卸载资源,以保持内存占用在可控范围内。
整体总结时间换空间与空间换时间,举例:
一个典型的时间换空间的例子是使用动态规划算法来优化路径查找过程。在许多游戏中,包括像迷宫游戏、角色移动和AI路径规划等,需要频繁地查找最短路径或最佳路径。
场景描述:
假设你正在开发一个迷宫游戏,玩家需要通过迷宫找到出口。每次移动都需要计算最短路径,但迷宫的结构不会改变。
解决方案:
-
朴素方法(时间换空间):
- 朴素的方法是每次移动时都重新计算路径,每次都耗费大量的计算资源来找到最短路径,但不需要额外的空间存储中间结果。
-
动态规划(空间换时间):
- 使用动态规划算法,你可以在游戏开始时预先计算并存储从每个位置到出口的最短路径。
- 当玩家移动时,只需查找存储的最短路径,而无需重新计算,从而节省了计算时间,但需要一定的空间来存储这些中间结果。
实现过程:
- 游戏开始时,对迷宫中每个位置到出口的最短路径进行计算,并存储在一个表格或数据结构中。
- 当玩家移动时,只需查找预先计算好的最短路径,而不需要每次都重新计算,从而节省了计算时间。
- 这种方法牺牲了一些额外的空间来存储路径信息,但在游戏运行时提高了路径查找的效率。
结果:
- 通过使用动态规划算法,你在游戏中成功优化了路径查找过程,提高了游戏的性能和流畅度。
- 尽管需要一些额外的空间来存储中间结果,但在实际游戏中,通常会因为节省的计算时间而更加值得。