メモ化とは?
めもか
メモ化とは、関数の計算結果を保存しておき、同じ引数で再度呼び出されたときにキャッシュを返す最適化技法です。
メモ化(Memoization)とは、関数の呼び出し結果を記録(キャッシュ)しておき、同じ引数で再度呼び出された際に再計算せずに保存済みの結果を返す最適化技法です。「記憶化」とも呼ばれます。
メモ化が効果を発揮するのは、同じ入力に対して常に同じ出力を返す(参照透過な)関数に対してです。副作用のない純粋関数であれば、結果を安全にキャッシュできます。重複した計算を省くことで、処理速度を劇的に改善できます。
最もよく知られる例はフィボナッチ数の再帰計算です。素朴な再帰では同じ値が指数的に何度も計算されますが、メモ化によってすでに計算済みの値を再利用することで、計算量をO(2ⁿ)からO(n)に削減できます。
メモ化の主な用途と特徴は以下のとおりです。
- 動的計画法:メモ化はトップダウンDPの実装手法として広く使われる
- フロントエンド:ReactのuseMemo・useCallback、Vue.jsのcomputedなどでUIの不要な再計算を防ぐ
- APIレスポンスのキャッシュ:同じパラメータへのリクエスト結果をメモ化してネットワーク通信を削減
- コンパイラ最適化:コンパイラが自動的にメモ化を適用することもある
注意点として、メモ化はキャッシュのためにメモリを消費します。また、引数がオブジェクトや配列の場合はキーの同一性判定に工夫が必要です。適切な範囲で使うことで、パフォーマンスとメモリ使用量のバランスを保てます。
使い方・例文
Reactコンポーネントで useMemo(() => heavyCalc(data), [data]) と書くことで、dataが変わらない限り重い計算結果を再利用し、描画のたびに再計算する無駄を省けます。
この用語をシェア
最終更新: