ダイナミックプログラミング - カット鋼の問題

 スチールバーカッティングイシュー:

       同社は販売が短い鋼棒をカットし、長い鋼棒を、購入します。切断プロセス自体は、コストではありません。同社の経営陣は、最高の切削プログラムを知っていただきたいと思います。私たちは会社がパイのためのI-インチ鋼棒の価格のための長さを売却することを知っていると(私は1,2,3 =、....)鋼棒の長さは整数です。ここではサンプル価格表です

長さI 1 2 3 4 5 6 7 8 9 10価格Piの1 5 8 9 10 17 17 20 24 30

       まず、我々は問題を分析します。その目的は、あなたの長い鋼棒を与えるために必要とされる、非常に簡単です、あなたは異なる長さをカットして、販売することができますが、前提は、利益を最大化することです。

 

彼の法則を見つけるために、またはこの部門は、プロセスを解決するかを理解するためです。

我々は4メートル長い鋼棒に得られていることを前提としています。

長い間、我々は方法の8種類の合計を分割長い鋼棒、上の4メートルがあります。

部門は利益を最大化することができます場合、私はこのケースでは、それを分割する必要があり、なぜ最初:?は、分割されていない、私たちの利益は$ 900です

第二:1および3メートルスプリット。当社は、当社の収益は、1 + 8 = $ 900である、チャートからそれを得ることができます

第三:2メートルと2メートルに分けます。私たちは、チャートからそれを得ることができ、収益は$ + 500 5 = 10

第四には:1メートルと3メートルを分割します。我々は、チャートからそれを得ることができ、当社の収益は$ 8 + 1 = 9でした

第1 M、2メートルと1メートルを分割します。当社は、当社の収益は、1 + 1 + 5 = $ 700で、チャートからそれを得ることができます

第1 M、2メートルと1メートルを分割します。当社は、当社の収益は1 + 5 + 1 = $ 700で、チャートからそれを得ることができます

第七:2メートル、1メートルと1メートルに分かれ。当社は、当社の収益は5 + 1 + 1 = $ 700で、チャートからそれを得ることができます

第八:分割1M、1M、1M、mです。当社は、当社の収益は、1 + 1 + 1 + 1 = $ 400、チャートからそれを得ることができます

まとめると:私たちは4メートルの長い鋼棒の場合に描くことができ、最大の利益は$ 10です。

 

ここでは、このプロセスの分析を開始します:

まず、その長い長い鋼棒Nメートル、可能な組み合わせの数の事実を理解する必要がありますか?4メートルの長さが長いため棒鋼が、これはそれを計算する方法である8回に分けることができますがありますか?

ここでは、この式を推定し始めます。

 唯一の種(0および9):nは切断されていない鋼棒の長さが長いため

1際に切断Cn1を= N種

図2は、Cn2を切削= N(N-1)/ 2種

...

CNN = 1 n回の切断時間の種類があります

我々は、式、N長い鋼棒の長さに来るように、それはCn1を+ Cn2を+ CNN = 2 ^ N-1に分割されてもよいです

全てのn = 4の場合は、分割数は2 ^ 3 = 8であります

 

下これを理解し、我々は次続けるの分析に基づいて。

我々は、鋼帯がk個のセグメントに切断される場合と仮定することができる式(1 <= K <= N)、最適解は、あります

最適なソリューションは、セグメント化方式を得ることができる:N = I1 + I2 + I3 + ... + IK。

すべてとしても最大の利益を得ることができます:RN = Pi1とPi2地磁気+ + ...ピック。

 

Rnに、我々はそれを記述するための短い鋼棒で最高のリターンをカットすることができます。

RN = MAX(PN、R1 + RN-1、R 2 + RN-2、...、RN-1 + R1)

心配しないで、これはおそらく、動的プログラミングの原則の中核であるため、この式のために、私は、この式には何があるかどうかわからない、いくつかの説明を行う必要があります。

それは何を意味するのでしょうか?

我々は理解することができますのための4メートルの長い鋼棒を。我々は、1と3との最適解を表す2,2又は最適解を分割することなく、0と4で表されるように最適解は、同様に、表現されることができます。

鋼帯のそれぞれには、二つの短い我々分割、例えば、鋼棒9メートルは、我々は彼に4,5メートルを分割することができます。唯一の最適解と4メートルで、5メートルで最適なソリューションを知っている必要があり、我々は9メートルが4メートルと最適解の5メートルに分割されている場合を知ることができます。しかし、この時間は、我々はまた、他のプログラム部門をしなければならないので、この部門は、4,5-最適解でなければならないことを保証することはできません。しかし、また、状況の他のプログラムの下で最適なソリューションを取得します。決勝。私たちは、この問題に対する最適なソリューションを知ることができ、それは、これらの最適なサブ最適のソリューションを生成しなければなりません。

PN:未分割の代わりに場合、

R1 + RN-1:ケース1における最適解に代表、N-1であります

...

RN-1 + R1:最適解は、のN-1,1-代わりに分割されている場合に

ただ、これらの最終的な最適ソリューション、必然的に基づいて、最適なソリューションの最大値を取得します。最適なサブ構造:問題のこれらのサブ最適なソリューションは、特別な用語があります。   

我々は、この再帰的な方法で、暴力の後、使用することを解決した場合。T(N)= 1 + T(1)+ T(2)+···T(N-1)= 2 ^ N:私たちの単純な計算では、時間の複雑さがあることを知ることができます

インデックス・レベルのアルゴリズムの場合、それは言うことができるだけで悪いアルゴリズムであり、私が使用している値がないと思います。

 

幸いなことに、我々は簡単に指数関数的にこの問題を解決することができ、動的プログラミングアルゴリズムを持っています。その複雑さは、n ^ 2まで低減することができます

 

まず。ような悪い効率暴力の法律があり、なぜ私たちは分析しますか?

我々は示しています。

スチールバーの長さ8メートルの長さは+ 72 + 63 + 54 + 4に分解することができる場合

対応するときに最適なソリューションの前に計算されなければならない1,2,3,4,5,6,7

9メートル長い鋼帯1の長さは、2 + 73 + 8 + 64 + 5に分解することができるため

前の時間に対応した最適なソリューションを計算する必要があります1,2,3,4,5,6,7,8-

 

私はあなたに9メートルの鋼棒を与える場合:

あなたは時に最適解を計算する必要が1,2,3,4,5,6,7,8

最適解が8再帰で計算されたときは、最適なソリューションであることを持っているとき1,2,3,4,5,6,7計算されなければなりません

...

あなたは、あまりにも多くのオプションをダブルカウント

この時点で、あなたは1で開始した場合、

最適解は、配列a [1]とああを算出して保存します

最適解2は、その後、(2,0)、(1,1)の組み合わせを用いて、計算されます

直接読み取る価格表などの組み合わせ(2,0)の場合

アレイ1から直接組み合わせ(1,1)の読み出しすでに配列a [1]に格納されているので、最適解は、描画することができるされています 

最適解は、この方向に...配列A [2]に格納され、このとき2で計算されます。現在のすべての問題に対する最終的な最適ソリューションは、以前の結果(最適な部分構造配列)を取ることによって計算することができ、このアルゴリズムの条件の下で、我々は量の最大の可能な削減、そして我々の計算の最大使用可能性を計算します、非常にダイナミックプログラミングの強力な場所であり、計算を削減し、効率を向上させることができます。

int Best_Value(int p[],int n){
	int a[100];//初始化一个数组,其目的就是为了保存子结构的最优解
	int i,j;
	int temp;
	a[0] = 0;
	for(i = 1 ; i <= n ; i++) {
		temp = -1;
		for(j = 0 ; j < i ; j++) {
			if(temp < a[j]+p[i-j-1]) {
				temp = a[j]+p[i-j-1];
			}
		}
		a[i] = temp;
	}
     return a[n];
}

 

公開された42元の記事 ウォン称賛13 ビュー20000 +

おすすめ

転載: blog.csdn.net/qq_39395805/article/details/102291229