問題の動的プログラミング(dp)戦略が機能するかどうかをどのように証明できますか?貪欲なアルゴリズムの場合、サブ問題がマトロイド特性を示すことを証明することで証明できます。 dpアルゴリズムにそのような方法はありますか?
原則として、stateの正しい概念を思い付くことができる場合、動的プログラミングを使用して多段階最適化問題を解決できます。どのクラスの問題に取り組んでいるかについては触れていないため、一般的なガイドラインを示すことは困難です。ここでは、次のことを前提としています。
このような問題を動的プログラミングで解決するには、状態状態を考え出す必要がありますん次のプロパティを満たします:
状態n + 1= function(stateん、決定ん)
そして
報酬ん= function(stateん、決定ん)
これらの条件が満たされている場合、動的計画法が最適なソリューションを提供します。最初にvalue関数を定義します
Vん(状態ん)=最大決定ん[報酬ん+ Vn + 1(状態n + 1)]
これらの値関数を逆方向に再帰的に解決します。
[〜#〜]注[〜#〜]:これらは、動的プログラミングを使用して解決できる問題の最も単純なクラスです。詳細については、動的プログラミングに関する標準の書籍を参照してください(例: Berksekas )。
一般に、ダイナミックプログラミングソリューションは、ソリューションがOptimal Substructureプロパティを示すことを証明することで証明できます。
基本的に、実際の問題を小さな副問題で構成されるものとして定式化し、ソリューションを組み合わせて最終的な回答を取得します。組み合わせる場合、問題のサイズが大きくなっても、組み合わせが実際に機能するためには、小さい副問題の解が最適である必要があります。
たとえば、グラフでAとCの間の最短経路を見つけようとしていて、その経路が中間点Bを通過していることを(どういうわけか)すでに知っていて、Aからへの最短経路がすでにわかっている場合BからBからCに到達するための最短の方法を見つけるだけで済みます。AからCに至るまで新しい方法を見つけることを心配する必要はありません。これが最適な部分構造プロパティの意味です。動的プログラミングの正確さを証明するには、このプロパティを証明するだけで、アプローチが正しいことを示すことができます。
彼らはあなたが貪欲アルゴリズムをマトロイド構造が正しいことを示すことを示すことによって証明する方法ですが、それは常に機能するとは限りません。一部の貪欲なアルゴリズムはMatroid構造を表示しませんが、それでも正しい貪欲アルゴリズムです。たとえば、ハフマンエンコーディングスキームは貪欲なアプローチですが、マトロイド構造を示しません。
貪欲なアルゴリズムを証明するには、一般的に、ソリューションが-1)DPと同様に最適な部分構造プロパティを示し、2)貪欲なアプローチによる選択が最適ではない(基本的に最適または1つであることを示す)ことを示す必要があります。その時点で行うことができる最適な選択の)