パイプラインの問題マシンZexalの2018第2のアルゴリズム:説明

件名の説明:

  

 

例:

 

 

インタプリタを実装します:

最も基本的な組立ラインのスケジューリング問題ではなく、さらに開始と終了の値

知識ポイント:動的プログラミング、パイプラインスケジューリング

インプリメンテーション即ち星は、状態遷移方程式の後に、回線切替の蓄積コストに記憶費やさ様々な時間、T [] [i]はiについて最初の2つのラインの[] [I]を提供向上させることができますF []は[i]は、各行iについての最小コストに格納されています。

私たちは、[] [i]はFごとに次の伝達方程式を持っていなければなりません。

F [0] [1] [0] [1] =。

F [1] [1] [1] [1] =。

F [0] [I] =分(F [0] [I-1] + [0] [I] F [1]〜[I-1] + T [1]〜[I-1] +と[ 0] [I])。

F [1]〜[I] =分(F [1]〜[I-1] +と[1]〜[I] F [0] [I-1] + T [0] [I-1] +と[ 1] [I])。

初期定義の最初の2、2つの具象変換。

分関数は、以前の値がこの行の順方向電流の正面にノードを示し、後者は別の行に、以前の遷移ノードから引き継ぎ、その後、図進むとります。このとき、2つだけの行のみ、これらの二つの状況ように、比較は、ライン位置の最小コストに到達するのを得ることができます。

ソリューション::マルチラインは、を参照することがALSそれは良いこと?(フォローするリンクを追加)

最小コストまでの時間を、ラインの最後のn(最後の家)を比較。

 

ピット:

メモは、アレイの初期化後に複数回入力され、状態遷移方程式を正しく変換することができます。

 

完全なコード:

//基本的な問題パイプラインスケジューラ
の#include <iostreamの> 
使用して名前空間STD; 
int型のmain()
{ 
	(偽の)IOSの:: sync_with_stdio; 
	int型N-; 
	INT FEND; 
	int型私は、
	しばらく(N - >> CIN)
	{ 
		[2] INT N- [+ 1]、T [2] [N - ]; 
		//これは、2本のラインをとるたびに
		(I = 1; I <= N; I ++)ため
			CIN >> [0] [I]、
		のために(I = 1; I <= N - 、Iは++)
			CIN >> [I] [1]; 
			
		過ごした移送ライン時間の// 2つの異なる位置
		のための(I = 1; Iは、N- <; I ++)は
			CIN >> T [0] [I]; 
		(。; I <N-I ++はI = 1)のための
			[1] CIN >> T [I]; 
		
		// 2つのラインの異なる位置で最小の蓄積時間
		F INT [2] [N + 1 ]; 
		//エラーを防止するために初期化する
		。F [0] [1] [0]を= 1];。
		。。。。F [1] [1]〜[し= 1] [1]; 
		
		のための(I = 2; I <= N; I ++)
		{ 
			//状態遷移方程式が得参照具体的な説明を記載している
			([0] [I F場合 [1]〜[I-1] + T [1]〜[I-1] -1] + [0] [i]が<F + A [0] [I])
 				F [0] [I] = F [0] [I-1] + A [0] [I]; 
				F [0] [I] = F [I [1] -1] + Tの[1]〜[I. 1] + A [0] 

			[I]、。。。IF(F [1]〜[I. 1] + [1]〜[I] <F [0] [I. 1- ] + T [0] [I-1] + [1]〜[I])。
				F [1]〜[I] = F [1]〜[I-1] + [1]〜[I]、。。。。
			他の
				Fの[1。 ] [I] = F [0] [-I 1] + T [0] [-I 1] + [1]〜[I];。。。
		} 
		//二行は、それぞれ前回計算され、それは、最小値を取得するのにかかる
		(IF F [0] [N- <F [N-])[1] 
			[0] [N-] = FをFEND; 
		そう
			= F [N-] FEND [1]、
		COUTは<< << '\ N-' FEND; 
	} 
	リターン0; 
}

  

 

おすすめ

転載: www.cnblogs.com/doUlikewyx/p/11700784.html
おすすめ