×
アルゴリズムとデータ構造

動的計画法 | 応用情報技術者試験

動的計画法とは

動的計画法(DP:Dynamic Programming)とは、大きな問題を解くために、それを小さな問題に分割して解き、その「途中の計算結果」をメモリなどに記録(メモ化)しておき、後で同じ計算が必要になったときに再利用するアルゴリズムの設計手法です。
同じ計算を何度も繰り返す無駄を省くことで、処理時間を劇的に短縮することができます。通常、再帰呼び出しと呼ばれる手法などでは、過去に解いたはずの同じ問題を何度もゼロから計算し直してしまいますが、動的計画法では一度計算した結果を「テーブル(表)」に保存しておき、二回目以降はそこから数値を呼び出すだけで済むようにします。

具体例

「フィボナッチ数列(前の2つの数字を足していく数列:1, 1, 2, 3, 5, 8, ...)」の10番目の数字を求めるプログラムを作る場合です。普通に計算すると「8番目を求めるために7番目と6番目を計算し、さらにその7番目のために6番目と5番目を計算し...」と同じ計算が何度も発生します。動的計画法では、1番目から順に計算結果を配列に保存していくため、同じ項の計算を一度も重複して行うことなく、最短で答えを求められます。

もう少し詳しく