加重間隔スケジューリングの問題は次のとおりです。加重間隔のセットが与えられた場合、合計加重が最大になるように重複しない間隔のセットを選択します。加重間隔 x は、トリプル x = (s, f, v) で表すことができます。ここで、s=x の開始時間、f=x の終了時間、v=x の重みまたは値 これらの加重間隔は、次のように表すことができます。トリプル (0,3,3) (1,4,2) (0,5,4) (3,6,1) (4,7,2) (3,9,5) (5,10,2) ) (8,10,1) 加重間隔スケジューリング問題の解を計算するプログラムを書きなさい。ここにグラフの写真があります: http://imgur.com/vZn04xn
プログラムは、最適解の合計重みの値と選択された区間のインデックスを出力する必要があります。上記の場合、出力は次のようになります (この出力は正しくありません) 最適値: 7 間隔シーケンス: 2 5 プログラムは再帰を使用する必要があります。
最適値を計算するアルゴリズムは次のとおりです。 入力: n, s1,...,sn , f1,...,fn , v1,...,vn
f1 > f2 >... > fn となるようにジョブを終了時刻で並べ替えます。p(1)、p(2)、...、p(n) を計算します。ここで、p(j) = 最大インデックス i < j で、ジョブ i は j と互換性があります。
for j = 1 to n
M[j] = empty <-- solution table
M[j] = 0
M-Compute-Opt(j) {
if (M[j] is empty)
M[j] = max(wj + M-Compute-Opt(p(j)), M-Compute-Opt(j-1))
return M[j]
}
start、finish、weight の 3 つの int を持つクラス Job を作成しました。サイズ 8 の配列の各スポットに異なる間隔のそれぞれを持つタイプのジョブの配列があります。質問: 各ジョブ間隔の p を計算するにはどうすればよいですか?