相比于懒惰计算法,在要求出现之前就完成对应的需求工作,称为__过度热情计算法__。过度热情的计算思路并不与懒惰计算法矛盾,其高效的核心在于优化高频的计算,更高效的处理计算结果,从而降低每次计算时的开销。
最简单的方法就是__缓存__,即__记录未来可能用到的计算结果__。例如,容器中的获取最大值的函数<code>GetMaxNumber</code>频繁的被调用,相比在每次调用时重新计算最大值,建立数据结构跟踪当前的最大值,从而将跟踪的消耗平摊到每次调用上,平均分摊的开销要更小。
另一种方法是__预提取__,即__提前完成未来可能需要做的工作__。以内存池为例:内存的来源最终都是调用<code>malloc</code>,而调用系统API本身就是巨大的开销。因此,在单次调用<code>malloc</code>时就分配一大段相同内存的内存备用,平均分摊的开销比每次需要内存时才分配的要小。
懒惰计算法核心在于__避免不需要用到结果的计算__,而过度热情计算法基于__计算结果总是被需要__,两者并不冲突。通过缓存和预提取的方法分期摊还期望的计算开销,同样需要维护额外的数据结构,但带来时间上的高效,是以空间换时间的方法。