天天看點

18 分期攤還期望的計算

相比于懶惰計算法,在要求出現之前就完成對應的需求工作,稱為__過度熱情計算法__。過度熱情的計算思路并不與懶惰計算法沖突,其高效的核心在于優化高頻的計算,更高效的處理計算結果,進而降低每次計算時的開銷。

最簡單的方法就是__緩存__,即__記錄未來可能用到的計算結果__。例如,容器中的擷取最大值的函數<code>GetMaxNumber</code>頻繁的被調用,相比在每次調用時重新計算最大值,建立資料結構跟蹤目前的最大值,進而将跟蹤的消耗平攤到每次調用上,平均分攤的開銷要更小。

另一種方法是__預提取__,即__提前完成未來可能需要做的工作__。以記憶體池為例:記憶體的來源最終都是調用<code>malloc</code>,而調用系統API本身就是巨大的開銷。是以,在單次調用<code>malloc</code>時就配置設定一大段相同記憶體的記憶體備用,平均分攤的開銷比每次需要記憶體時才配置設定的要小。

懶惰計算法核心在于__避免不需要用到結果的計算__,而過度熱情計算法基于__計算結果總是被需要__,兩者并不沖突。通過緩存和預提取的方法分期攤還期望的計算開銷,同樣需要維護額外的資料結構,但帶來時間上的高效,是以空間換時間的方法。

繼續閱讀