スチールバーカッティングイシュー:
同社は販売が短い鋼棒をカットし、長い鋼棒を、購入します。切断プロセス自体は、コストではありません。同社の経営陣は、最高の切削プログラムを知っていただきたいと思います。私たちは会社がパイのための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];
}