← Back to library
アルゴ AIに質問関連 1 問題

Dynamic Programming

動的計画法

概要

重複する部分問題を一度だけ解いて結果をメモすることで、指数時間の全探索を多項式時間に削減する手法。トップダウン(メモ化再帰)とボトムアップ(テーブル充填)の 2 形式がある。適用可能条件は「最適部分構造」と「重複部分問題」の 2 つ。コイン問題では dp[i]dp[i] を金額 ii を作る最小枚数として定義し、dp[i]=minccoinsdp[ic]+1dp[i] = \min_{c \in \text{coins}} dp[i-c] + 1 で遷移する。

計算量

操作平均最悪
一般(状態数×遷移数)

学習メモ

実装前に必ず紙で dp[i]dp[i] の定義と遷移を書く。「状態=何を表すか」が曖昧なまま書き始めると大抵バグる。