アルゴリズム学習のための動的プログラミング戦略の紹介

アルゴリズム学習のための動的プログラミング戦略の紹介

1. コンセプト

動的プログラミング戦略、分割統治戦略。貪欲戦略と同様に、通常は最適解問題を解決するために使用されます。分割統治とは、問題をいくつかのサブ問題に分解して解決することです。動的計画法の特徴は、分解されたサブ問題の中から毎回最適な解決策を選択することです(サブ問題はサブ問題に分解できます)。

動的プログラミングの主な特徴は、決定を下す前にすべてのサブ問題の情報を知っていることです。

動的プログラミングの 2 つの重要な要素は次のとおりです。1) ***サブ構造。 2) 重複するサブ問題。

1) ***サブ構造。これは、動的プログラミング戦略を使用して***問題を解決した後に実行される最初のステップです。いわゆる最適なサブ構造とは、問題に対する最適な解決策にサブ問題に対する最適な解決策が含まれている場合、その問題には最適なサブ構造があることを意味します。これは、動的計画法を採用するための十分な条件です(もちろん、この条件は貪欲戦略も満たします)。この条件が発生した場合、動的計画法を検討できます。

通常考慮される要素は次のとおりです。

1.1) ソリューションではいくつのサブ問題を解決する必要がありますか?

1.2) どのサブ問題を使用するかを決定するには、どの程度の選択が必要ですか?

2) 重複するサブ問題とは、再帰的なソリューションにおいて、多数の同一のサブ問題が生成される場合、同じサブ問題が何度も繰り返し計算され、アルゴリズムの効率が大幅に低下することを意味します。この要素は動的プログラミングの利点です。動的プログラミングはこのような問題を解決するために生まれたと言えます(実際、メモリを備えた再帰アルゴリズムでも同様のアルゴリズムの改善を実現できます)。

2. 問題解決戦略

問題を解決するための一般的な考え方は次のとおりです。

1) 問題の解決には、1つ以上のサブ問題を残す選択が必要であることを証明する

2) サブ問題の再帰的記述を設計する(一般的には、問題とアルゴリズムを解決するための鍵となる、転送方程式とも呼ばれる再帰式があります)

3) 元の問題に対する最善の解決策には、すべての部分問題に対する最善の解決策が含まれていることを証明する

4) サブ問題間に重複があることを証明する

1、3、4 は、サブ問題の構築を動的計画法戦略に準拠させることが目的であることがわかります。それらの目的は、合理的で適切なサブ問題を構築できるようにすることです。ただし、異なる問題に対してサブ問題を構築するという考え方は同じではありません。 1.1 と 1.2 の問題を考慮することに加えて、通常は、このサブ問題をできるだけ単純にし、必要に応じて拡張するという、より効果的な方法があります。

3. 例

より古典的な最長共通部分列問題 (LCS) を使用します。

問題は次のように定義されます: 2 つの部分列 S1[1..m] と S2[1..n] について、それらの最長共通部分列を見つける必要があります (部分列は必ずしも連続している必要はありません)。

解決策1: ブルートフォース法

アイデア:

1) S1[1..m]内のすべてのサブシーケンスをチェックします。

2)それがS2[1..n]内の部分列でもあるかどうかを確認します。

3) 各ステップで、サブシーケンス内で見つかった最長のサブシーケンスを記録します。

明らかに、これは非常に非効率的です。各サブシーケンスは O(n) 時間でチェックする必要があり、チェックするサブシーケンスは 2^m 個あるため、時間の計算量は O(n*2^m) になります。

では、どのように改善すればよいのでしょうか? LCS には *** サブ構造があるため、つまり、必要な最長共通サブシーケンスには最長共通サブシーケンスが含まれているため、動的プログラミングを使用して問題を解決できます。

解決策2: 動的プログラミング

問題解決戦略によれば、まず適切なサブ問題を構築する必要があります。2 番目のポイントに従って、できるだけ単純なサブ問題を構築し、それを拡張します。LCS では、次のようになります。

1) まず、最長共通部分列の長さを求めます。

2) 長さを見つけるアルゴリズムを拡張して、最長共通部分列を取得します。

上記から、再帰式を得ることができます。

(c[i,j]は長さiのS1と長さjのS2の最長共通部分列を表す。xiは文字列Sのi番目の文字を表す。)

上記の再帰的演繹は、図を描くことで簡単に得ることができます。

コード:

  1. charb[50][50]; //LCS出力を容易にするためにパス図を記録する 
  2. intc[50][50]; //c[i][j]は長さiのx文字列と長さjのy文字列のLCSの長さを格納します 
  3. charx[50], y[50]; //x,yは比較する2つの文字列を格納する 
  4. voidLCS()
  5. {
  6. intm = strlen(x+1);
  7. intn = strlen(y+1);
  8.   //初期化 
  9.   (int i = 1; i <= m; ++i)の場合
  10. c[i][0] = 0;
  11.   (intj=1;j<=n;++j)の場合
  12. c[0][j] = 0;
  13.   (int i = 1; i <= m; ++i)の場合
  14.   (intj=1;j<=n;++j)の場合
  15. {
  16.   (x[i] == y[j])の場合
  17. {
  18. c[i][j] = c[i-1][j-1] + 1;
  19. b[i][j] = '\' ;
  20. }
  21. そうでない場合(c[i-1][j] >= c[i][j-1])
  22. {
  23. c[i][j] = c[i-1][j];
  24. b[i][j] = '|' ;
  25. }
  26.   それ以外 
  27. {
  28. c[i][j] = c[i][j-1];
  29. b[i][j] = '-' ;
  30. }
  31. }
  32. }
  33.   // 出力LCS  
  34. void printLCS(inti, intj)
  35. {
  36.   (i == 0|| j == 0)の場合
  37.   戻る;
  38.   b[i][j] == '\'場合
  39. {
  40. printLCS(i-1, j-1);
  41. x[i] + ""を印刷します
  42. }
  43. そうでない場合は(b[i][j] == '|' )
  44. printLCS(i-1, j);
  45.   それ以外 
  46. printLCS(i, j-1);
  47. }

IV. 要約

LCS には、最長増加/減少サブシーケンス、編集距離など、さまざまなバリエーションがあります。

動的プログラミングの鍵となるのは、上で述べた 2 つの重要な要素、すなわち *** サブ構造と繰り返されるサブ問題です。*** 問題に関連情報がある場合、またはそのような問題に変換できる場合は、動的プログラミングを使用してみることができます。ただし、サブ問題の構築には、再帰方程式の構築という、ある程度の思考が必要です。

ただし、動的プログラミングは最も「賢明な」決定を下すことができますが、それを行う前にすべてを知る必要があり、明らかに「保守的」であるため、すべての問題に適用できるわけではありません。現時点では、他の最適化アルゴリズムを検討することができます。

オリジナルリンク: http://www.cnblogs.com/Quains/archive/2011/11/09/2241879.html

【編集者のおすすめ】

  1. PHP+MySQL アプリケーションで XOR 暗号化アルゴリズムを使用する
  2. これまで見たことのないアルゴリズムのダンス(ビデオ)
  3. PHP 5 におけるガベージコレクションアルゴリズムの進化についての簡単な説明
  4. JavaScript におけるいくつかの一般的なソートアルゴリズムの共有
  5. プログラマーが知っておくべき 20 世紀の 10 大アルゴリズム

<<:  百度、検索エンジンアルゴリズムを調整して微博コンテンツのインデックスを強化

>>:  XML暗号化アルゴリズムが破られ、W3CはXML暗号化標準を改訂する必要がある

推薦する

大規模言語モデルの最大のボトルネック:レート制限

マット・アセイ企画 | ヤン・ジェン制作:51CTO テクノロジースタック(WeChat ID:bl...

現代の製造業におけるマシンビジョンと人工知能の重要な役割

競争が激化し規制が厳しくなる環境において、マシン ビジョン (MV) ソリューションは製造業者にとっ...

Metaverse と Web3 は似ていますが、最も重要な違いは何でしょうか?

現在、ビジネス テクノロジーの世界では、2 つの流行語が頻繁に登場しています。 1つはWeb3、もう...

...

2020年のIoTイベントトップ10を振り返る。アプリケーションの加速

今日では、それはもはや高尚な概念ではありません。スマートカーやスマートホームから、企業の資産管理機器...

AIが普及するにつれ、テクノロジー企業には「最高バイアス責任者」が必要だ

王立歴史協会は最近、人工知能アルゴリズムを使用した初の研究で、英国の労働力に「大きな性差別」があるこ...

...

人工知能は製品のサービスとサポートの方法を変える

私は、IoT を活用して現場サービスと顧客サポートの効率性を向上させることを目指す機器メーカーのクラ...

自動運転のフードデリバリーが利用可能に、Meituanがすぐにあらゆるものを配達

北京、首鋼冬季オリンピック公園。最近、「MAI Shop」という小売店がここにオープンし、すぐにネッ...

機械学習の決定木とランダムフォレストモデル

[[206785]]決定木導入決定木は機械学習において非常に一般的な分類方法です。すべてのアルゴリズ...

...

...

...