一般に
貪欲なアルゴリズムを使用して最適化問題を解決できることを証明するには、問題に次の要素があることを証明する必要があります。
例
古典的な活動選択問題を考えてみましょう。n 個の活動の集合Sがあり、それぞれに開始時刻と終了時刻があります。選択によって重複しないイベントの数が最大になるように、S のサブセットを選択します。s[i]
e[i]
この問題は貪欲なアルゴリズムを使用して解決できますが、それをどのように証明できますか?
それが示すことを示す必要があります:
大域的最適解に含まれる一般的な活動aを考えてみましょう。S = {A', a, A''}
S
A'
A''
問題に部分構造の最適なプロパティがある場合、部分問題の最適解はグローバル最適解に含まれる必要がありA'
ますA''
S
。
これは本当ですが、なぜですか?
部分問題の最適解A'
が にないとしS
ます。A'
次に、最適な を に、たとえばS'
に置き換えて、A
よりも優れた新しいグローバル最適解を得ることができS
ます。しかしS
、グローバルな最適解でした! 矛盾。
貪欲な選択 (最初に終了するアクティビティを選択する) が正しいことを証明する必要があります。
B
部分問題としましょう。最初に終了する部分問題のアクティビティを b とすると、bは(最初の) 貪欲な選択です。の最適解にbが含まれていることを証明する必要があります。B
B
X
を部分問題 の最適解としますB
。最初に終了するアクティビティを x とします。X
b = xの場合、bは にX
あり、 の最適解でB
あり、貪欲な選択が最適解に含まれることを示しました。
b != xの場合、確かにそれがありend_time[b] < end_time[x]
ます。
bは私たちの貪欲な選択 (すなわち、部分問題 で最初に終了するアクティビティ) であったため、別の最適解を取得するためにb inにB
置き換えることができます。のアクティビティの数が同じであるため最適であり、最適でした。この場合、bは にあり、 の最適解です。x
X
X' = (X \ {x}) U {b}
X'
X
X
X'
B
したがって、私たちの貪欲な選択b
は、いずれかの場合の最適解に含まれB
ます。
マトロイド
さらに、場合によっては、特定の問題が貪欲なアプローチで解決できることを機械的に証明するために使用できる強力な数学的理論があります。
簡単に言うと:
matroidという名前の特定の組み合わせ構造を定義できます。
一部の賢い人は、これらのマトロイドが最適部分構造プロパティと貪欲な選択プロパティを持っていることを過去に証明しました。
これは、最適化問題に対して貪欲なアルゴリズムを実行できることを意味し、最適解を見つけます。問題がマトロイドのような構造で定義されていることを確認するだけで済みます。
詳細については、こちらを参照してください。