Benbanfaは、動的計画法アルゴリズムを理解します

ダイナミックプログラミングは広く、我々は大幅にプログラムの複雑さを軽減することができ、動的プログラミングによってプログラミングでは、問題のいくつかの時間に使用されてきました。本質的にはないダイナミックプログラミングアルゴリズムが、問題のアイデアのクラスを解決します。いくつかの非常にシンプルで古典的な問題によって、このブログは、動的プログラミングの一般的なルーチンを理解するために(そのような塔の数、0-1ナップザックフルバックパックとしては、階段問題、最長共通部分列などを取ります)。

間違っている場合は、探求し、へようこそ私を修正してください。

転載の場合は、ソース明記してくださいhttp://www.cnblogs.com/nullzx/を

動的プログラミングの基本的な考え方

私たちはこれらのマイナーな問題への答えを解く際に問題があるか、同じ性質の少ない数に大きな問題は、答えはそのような状況のために大きな問題を解決することは非常に容易であるとき、我々は問題を解決することができた場合明らかに、我々は問題を解決するために再帰的に(またはパーティション)の道をすることができます。あなたはこれらの小さな問題を解決する過程でいくつかのマイナーな問題を発見した場合、我々は計算を何度も繰り返す必要があり、その後、我々は単に問題の解決に答える必要がありますが、テーブルの上に記録するためには小さすぎる、次の出会いこの小さな問題となるよう、私たち唯一の直接の結果を得ることができ、これは説明するための動的プログラミング方言でルックアップするために、テーブルを必要としています。動的なプログラミングの難しさが問題とサブの問題を定義する方法です。

2.厄介なルーチン

あなたが一つに大きな問題があるか、いくつかの小さなサブ問題があることができれば1)、それはこの時点で、我々は最初のプログラムは、再帰の形で書かれたかもしれませんが、再発の関係を見つけること、です。

2)小さな問題を解決するために繰り返した場合、使用再帰を解決するために、サブ問題の現象は、その後、我々は(このテーブルは一つだけのラインを有していてもよい)テーブルを構築し、そこにあるサブ課題を解決繰り返す必要が記録。充填プロセスと方法は逆サブ問題に大きな問題となり、我々は最も簡単なサブ問題からフォームに記入を開始します。今、私たちはこれらの古典的な問題を解決するために、次のルーチンを使用します。

3.日常の問題解決

3.1フィボナッチは、列の数を削減しました

問題の説明:フィボナッチは、Fを規定(N)のF(N-1)カラム+ F(N-2)の数、及びf(1)= 1、(N)(2)= 1、検索F fは=値。フィボナッチ数列は、二つのサブ問題の性質に大きな問題に自分自身を変換するために定義されているので、私たちは、直接再帰的定義の形式で書くことができます。


	パブリックstatic int型再帰(int型n)は{ 
		
		(N <0){場合は
			0を返します。
		} 
		
		もし、(N == 1 || N == 2){ 
			リターン1。
		} 
		
		戻り再帰(N-1)+再帰(N-2)。
	}

(6)例えば、再帰的プロセスは現在描かF我々

clip_image002

このアルゴリズムの効率が非常に低くなるように、私たちは、Fは、(4)を2回、(3)3回、Fを解決するために(2)の4倍(6)、Fを解決する必要がある(1)三回Fを解くFを解いたときにことがわかりましたA。表中のFである(1)、F(2)、F(3)....結果方法の効率を向上させる、あなたは私たちはテーブルから直接うまく取得するときにこれらの質問を計算したい次回は、これがあります動的プログラミングの最も簡単な例。今、私たちは聞いて、最小の子供が十分に充填始めたから、ルーチンに従ってください。


	パブリックstatic int型動的(int型N){ 
		
		INT []テーブル=新しいINT [N + 1]。
		
		表[1] = 1。
		表[2] = 1; 
		
		/ *从小到大填表* / 
		用(INT I = 3; iはtable.length <; iは++){ 
			テーブル[I] =表[I-1] +テーブル[I-2]。
		} 
		
		戻りテーブル[n]は、
	}

なお、この例では、実際には、最適な下部構造の存在ではなく、エントリの一例であり、長さの配列のn +表1を必要とせず、動的として理解することができる2つのだけの変数(する必要があります計画のバージョン)を最適化し、そしてこれは、動的プログラミングの面で誰もが問題を理解することができるようにするだけであるため、我々はその理由を説明します。

おすすめ

転載: www.cnblogs.com/nullzx/p/10991305.html
おすすめ