[アルゴリズム]動的計画法動的計画,DP
🌟 動的計画法動的計画,DP
定義:
複雑な問題を複数の単純な問題に分解する方法
問題をシンプル化し、再利用可能な構造を使用して問題を解決する方法
シンプル化→点火→再帰構造→ソリューション
方法:
問題全体を小さな問題に簡略化
再帰構造を利用した点火式の作成
小さな問題で問題全体を解決する
注記アニメーション:
定義:
動的計画で使用されるポリシーを使用して関数の値を計算し、計算値を配列に格納します.
機能:
必要なときに呼び出さずに、値をすばやく取得できます.
例:
フィボナッチ数列再帰関数を用いたフィボナッチ関数 動的計画法を用いたフィボナッチ関数
fibo(10)の値が求められると、f(10)の値を求めるには、fibo(9)からfibo(1)の値を求めなければならない
f(n) = f(n-1) + f(n-2), f(n-1) = f(n-2) + f(n-3)...
しかし、ダイナミックプランニング法を利用すれば
fibo(10)の値を求めて、fibo(9)、fibo(8)の値だけを必要とします
f(n) = f(n-1) + f(n-2)
配列に以前の値が格納されている場合、重複する値が発生した場合は、再評価する必要はありません.
そしてあなたが貯めたお金を計算します.
これにより、関数の呼び出し回数が減少し、実行効率が向上します.
私はあなたの時間を無駄にしません.
I'll write something that won't waste your time.
定義:
複雑な問題を複数の単純な問題に分解する方法
問題をシンプル化し、再利用可能な構造を使用して問題を解決する方法
シンプル化→点火→再帰構造→ソリューション
問題全体を小さな問題に簡略化
再帰構造を利用した点火式の作成
小さな問題で問題全体を解決する
定義:
動的計画で使用されるポリシーを使用して関数の値を計算し、計算値を配列に格納します.
機能:
必要なときに呼び出さずに、値をすばやく取得できます.
例:
フィボナッチ数列
int fibo(int n){
if(n < 2)
return n;
return fibo(n-1) + fibo(n-2);
}
int fibo(int n){
if(n < 2)
return n;
if(memo[n] != 0){
return memo[n];
}
else{
memo[n] = fibo(n-1) + fibo(n-2);
return memo[n];
}
}
再帰関数を使用するコードでは、fibo(10)の値が求められると、f(10)の値を求めるには、fibo(9)からfibo(1)の値を求めなければならない
f(n) = f(n-1) + f(n-2), f(n-1) = f(n-2) + f(n-3)...
しかし、ダイナミックプランニング法を利用すれば
fibo(10)の値を求めて、fibo(9)、fibo(8)の値だけを必要とします
f(n) = f(n-1) + f(n-2)
配列に以前の値が格納されている場合、重複する値が発生した場合は、再評価する必要はありません.
そしてあなたが貯めたお金を計算します.
これにより、関数の呼び出し回数が減少し、実行効率が向上します.
私はあなたの時間を無駄にしません.
I'll write something that won't waste your time.
Reference
この問題について([アルゴリズム]動的計画法動的計画,DP), 我々は、より多くの情報をここで見つけました https://velog.io/@yulim2/Algorithm-동적계획법-Dynamic-Programming-DPテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol