コンピューター, プログラミング
ダイナミックプログラミング、基本原則
実行時に最適なソリューションを選択するにはプログラミング作業は、時にはパソコンのメモリをロードするデータの組み合わせを大量に並べ替えるために必要とされています。 そのような方法は、例えば、「分割ルール」のプログラミング方法を含みます。 この場合、アルゴリズムは、別個のより小さなサブタスクに分離問題を提供します。 この方法では、わずかなサブタスクは、相互に独立しているような場合にも適用可能です。 相互に依存サブタスクであれば、不必要な作業を行う避けるために、50年代にアメリカのR.Bellmanom提案し、動的計画法を使用しています。
方法
動的プログラミングは、彼女のn個の別個のステージを共有し、最適解をn次元の問題を決定することです。 それらのそれぞれは、一つの変数に関しては、サブ作業です。
このアプローチの主な利点は、開発者が一次元の最適化問題に関与していると考えることができる代わりに、n次元の問題のサブタスク、そして私たちの主な目的は、「ボトムアップ」としています。
すなわち、サブタスクが相互に関係しているような場合に動的計画法を適用することをお勧めします 共通モジュールを共有しています。 このアルゴリズムは、かつてのサブタスクのそれぞれの意思決定を提供し、省応答は特別なテーブルで行われます。 これは、彼らが同じサブタスクに再び会ったときの答えを計算しないことが可能となります。
動的なプログラミング作業は 、問題解決 の最適化を。 この方法の著者はR・ベルマン最適性原理により処方した:ステップと、このステップで定義された溶液のそれぞれの初期状態が何であれ、すべてのステップの終わりにシステムを受信する状態に関連して最適に選択するために、次の。
この方法は、変異体、または再帰によって解決タスクのパフォーマンスが向上します。
ビルタスクアルゴリズム
動的プログラミングアルゴリズムは、タスクがそのように、その溶液に、二つ以上のサブタスクに分割されるようなタスクの構築を含むすべてのサブタスクに最適な解決策で構成され、それが含まれています。 また、漸化式を記述する必要があり、全体としてのタスクの最適なパラメータ値を計算します。
時には、第三段階で、各タスクの進捗状況に関するいくつかの追加の背景情報を記憶することです。 これは、戻りストロークと呼ばれています。
申し込み方法
2つの特徴がある場合、動的プログラミングが適用されます。
- サブタスクのために最適。
- 部分問題の重複の問題で存在します。
動的計画法により最適化問題を解決するには、最初の溶液の構造を記述する必要があります。 タスクは、ソリューションは、そのサブタスクの最良の決断で構成されている場合には最適である必要があります。 この場合、動的プログラミングを使用することをお勧めします。
この方法では本質的な問題の第二の特性、 - サブタスクの数が少ないです。 同一の重複サブ問題を使用して、問題の再帰的な解決策は、多くの初期情報の大きさに依存します。 その答えは、特別なテーブルに格納され、プログラムは、このデータを使って、時間を節約できます。
特に効果的なタスクは、基本的に段階的に意思決定を行うために必要とされる動的プログラミングの使用です。 例えば、交換や設備の修理の問題の簡単な例を考えてみましょう。 2つの異なる形式でタイヤを作ると同時に、タイヤの製造のための鋳造機の工場に言ってみましょう。 フォームのいずれかに障害が発生した場合には、機械を分解する必要があります。 時々より有益で交換した場合に、機械を分解するために、第二の形式と、この形式は、次の段階では実行不可能になるためにことがわかります。 特に、それは彼らが失敗を開始する前に、両方の加工形状を交換する方が簡単だから。 搾取の継続的な形態のメリット、マシンのダウンタイムの損失、廃タイヤのコストとより:動的計画法は、アカウントにすべての要因を取って、これらの形態の交換の問題で最善の戦略を決定します。
Similar articles
Trending Now