動的プログラミングとは何ですか?
ダイナミックプログラミングは、コンピューターサイエンスの分野を参照する場合、問題をより小さな問題のセットに分解することで複雑な問題を解決するための同様のコンピューターアルゴリズムのグループを説明します。 1950年代にリチャードベルマンによって最初に作成された動的プログラミングは、サブ問題または最適な下部構造の重複のいずれかである問題を伴います。動的なプログラミングの仕組みを理解するために、これら2つの用語の背後にある概念を理解することが最善です。
重複するサブ問題は、より小さな方程式のセットに分解すると、より小さな方程式の部分を複数回再利用して回答に到達する複雑な方程式を説明します。たとえば、数値のセットを使用してすべての可能な結果を計算するように指示された数学的方程式は、他の結果を1回だけ計算しながら、同じ結果を何度も計算することができます。動的プログラミングは、結果を計算した後、最初にその結果を保存し、答えをにプラグインすることがこの問題を伝えるでしょう。式は再度計算する代わりに後で。長い複雑なプロセスと方程式を扱うとき、これにより時間を節約し、はるかに少ないステップを使用してより高速なソリューションを作成します。
最適なサブ構造は、すべてのサブ問題に対する最良の答えを見つけて、最良の全体的な答えを作成することにより、ソリューションを作成します。複雑な問題をより小さな問題に分解した後、コンピューターは数学システムを使用して、各問題の最良の答えが何であるかを判断します。小さい回答から元の問題に対する答えを計算します。このプロセスには欠陥があります。最良の数学的に機能するソリューションを提供しますが、問題の種類とそれが現実の世界にどのように関連するかに応じて、実生活で最良の解決策である場合とそうでない場合があります。
これらの操作のいずれかで、動的プログラミングアルゴリズムはソリューションへの最短パスを見つけようとします。の1つを取ることができますこれを行うための2つのアプローチ。トップダウンアプローチは、方程式をより小さな方程式に分割し、必要に応じてこれらの方程式の答えを再利用します。ボトムアップアプローチは、方程式を破った後、最小数学的値を解決しようとし、そこから最大のものに向かって進みます。どちらのアプローチも時間を節約しますが、動的プログラミングは、元の問題がある時点で式を解くために再利用される小さな方程式に分解できる場合にのみ機能します。