削除された内容 追加された内容
MoreNet (会話 | 投稿記録)
編集の要約なし
MoreNet (会話 | 投稿記録)
20行目:
 
== 適用条件 ==
[[最適化問題]]に適用する場合、最低限一般的に、以下の2つが適用する問題に成立していないといけない<ref name="ai"/>。(厳密には成立しなくても動的計画法の定義は満たせる)
* '''部分構造最適性'''({{lang-en-short|optimal substructure}})や'''最適性原理'''({{lang-en-short|principle of optimality}})
* '''部分問題重複性'''({{lang-en-short|overlapping subproblems}})
27行目:
# 部分問題も同じ最適化問題が成立している
# 部分問題間が独立している
部分問題を解き、それを利用して、全体の最適化問題を解く戦略のため、部分構造最適性が動的計画法には必である。部分構造最適性の例として、[[最短経路問題]]では、A → B → C という最短経路において、A → B や B → C も最短経路でないといけない(このことは[[背理法]]により証明可能)。また、部分問題間が独立であるためには、部分問題で資源の共有があってはならない。最短経路問題では A → B と B → C で同じ辺が出現しないため(同じく背理法により証明可能)、資源の共有が発生していない。[[貪欲法]]においても厳密解を求めるのなら部分構造最適性は必要である。
 
部分問題重複性とは、同一の部分問題が繰り返し出現することである。動的計画法では重複する部分問題の計算結果を記録し再利用する事により計算量を削減する。
 
厳密なことを書くと、全体問題と部分問題は完全に同一である必要性はなく、また、部分問題間が独立でなくても、それらが何らかの計算式により依存関係を解決し結合させる方法があれば、部分構造最適性が成立しなくても動的計画法の定義を満たすアルゴリズムは作れる。しかし、そのような実用例は少ない。
 
== 例題 ==