トップダウンとボトムアップの動的プログラミングには根本的な違いがありますか?
特に、ボトムアップでは解決できるがトップダウンでは解決できない問題がありますか?または、ボトムアップアプローチは、トップダウンアプローチの繰り返しを単に解くだけですか?
トップダウンとボトムアップの動的プログラミングには根本的な違いがありますか?
特に、ボトムアップでは解決できるがトップダウンでは解決できない問題がありますか?または、ボトムアップアプローチは、トップダウンアプローチの繰り返しを単に解くだけですか?
回答:
ボトムアップ方式を使用するには、「ボトム」が何であるかを効率的に判断できる必要があります。これは通常、制約の厳しい問題スペースが必要であることを意味します。最下位レベルの計算がどのようになり、依存関係の順序が上向きになるかがわかっている場合は、適切な順序で繰り返し実行し、それらの結果を保存することは理にかなっています。階乗、素朴なフィボナッチ、およびパーティションのオイラー回帰関係はすべて、このアプローチに適した問題の良い例です。
いくつかの問題には、計算のための簡単に決定された最下位または依存関係の順序がありません。たとえば、チェスの位置の評価は、位置によって便利にメモされ、評価スコアが保存されるため、再計算する必要はありません。転置と繰り返しの移動により、検索ツリーの複数のレベルで位置が繰り返される可能性があるため、評価結果を保存する価値があります。しかし、ツリーの最下位レベルの位置が再帰的に下降せずに(そして中間の枝刈りを考慮に入れて)どうなるかを知る方法はないので、トップダウンが実際に唯一の実行可能なアプローチです。
トップダウンアプローチ:これは、問題の再帰定式化の直接的なフォールアウトです。副問題の解を使用して問題の解を再帰的に定式化でき、その副問題が重複している場合、副問題の解をテーブルに簡単にメモまたは保存できます。新しいサブ問題を解決しようとするたびに、最初にテーブルが既に解決されているかどうかを確認します。ソリューションが記録されている場合、それを直接使用できます。それ以外の場合は、サブ問題を解決し、そのソリューションをテーブルに追加します。
ボトムアップアプローチ:サブ問題の観点から問題の解決策を再帰的に定式化したら、ボトムアップ方式で問題の再定式化を試みることができます。まず、サブ問題を解決して、より大きな副次的な問題の解決策を見つけ、それに到達します。これは通常、小さなサブ問題に対するソリューションを使用して、ますます大きなサブ問題に対するソリューションを繰り返し生成することにより、表形式で行われます。たとえば、F41とF40の値がすでにわかっている場合、F42の値を直接計算できます。