Design-and-analysis-of-algorithms-job-sequencing-with-deadline
提供:Dev Guides
DAA-期限付きジョブシーケンス
問題文
ジョブシーケンスの問題の目的は、期限内に完了し、最大の利益をもたらす一連のジョブを見つけることです。
溶液
ジョブが期限までに完了した場合、期限と利益に関連する n の一連のジョブを考えてみましょう。 これらのジョブは、最大の利益が得られるように注文する必要があります。
指定されたすべてのジョブが期限内に完了しない場合があります。
*i ^ th ^* ジョブ *_J〜i〜_* の締め切りは *_d〜i〜_* であり、このジョブから受け取る利益は *_p〜i〜_* であるとします。 したがって、このアルゴリズムの最適なソリューションは、最大の利益を伴う実現可能なソリューションです。
したがって、$ 1 \ leqslant i \ leqslant n $に対して$ D(i)> 0 $です。
最初は、これらのジョブは利益に従って注文されます。 $ p _ \ {1} \ geqslant p _ \ {2} \ geqslant p _ \ {3} \ geqslant \:… \:\ geqslant p _ \ {n} $。
Algorithm: Job-Sequencing-With-Deadline (D, J, n, k)
D(0) := J(0) := 0
k := 1
J(1) := 1 //means first job is selected
for i = 2 … n do
r := k
while D(J(r)) > D(i) and D(J(r)) ≠ r do
r := r – 1
if D(J(r)) ≤ D(i) and D(i) > r then
for l = k … r + 1 by -1 do
J(l + 1) := J(l)
J(r + 1) := i
k := k + 1
分析
このアルゴリズムでは、1つが別のループ内にある2つのループを使用しています。 したがって、このアルゴリズムの複雑さは$ O(n ^ 2)$です。
例
次の表に示すように、与えられたジョブのセットを考えてみましょう。 期限内に完了し、最大の利益をもたらす一連のジョブを見つける必要があります。 各ジョブには、期限と利益が関連付けられています。
Job | J1 | J2 | J3 | J4 | J5 |
---|---|---|---|---|---|
Deadline | 2 | 1 | 3 | 2 | 1 |
Profit | 60 | 100 | 20 | 40 | 20 |
溶液
この問題を解決するために、特定のジョブは利益に従って降順にソートされます。 したがって、ソート後、ジョブは次の表に示すように順序付けられます。
Job | J2 | J1 | J4 | J3 | J5 |
---|---|---|---|---|---|
Deadline | 1 | 2 | 2 | 3 | 1 |
Profit | 100 | 60 | 40 | 20 | 20 |
この一連のジョブから、最初に J〜2〜 を選択します。これは、期限内に完了することができ、最大の利益をもたらすためです。
- 次に、 _ J〜4〜' と比較してより多くの利益が得られるため、 ' J〜1〜_ が選択されます。
- 次のクロックでは、期限が過ぎているため、 _ J〜4〜' を選択できません。したがって、 ' J〜3〜_ は、期限内に実行されるときに選択されます。
- ジョブ J〜5〜 は、期限内に実行できないため破棄されます。
したがって、ソリューションはジョブのシーケンス( J〜2〜、J〜1〜、J〜3〜 )であり、期限内に実行され、最大の利益をもたらします。
このシーケンスの総利益は 100 + 60 + 20 = 180 です。