DAA - Jobsequenzierung mit Frist
Problemstellung
Bei Jobsequenzierungsproblemen besteht das Ziel darin, eine Sequenz von Jobs zu finden, die innerhalb ihrer Fristen abgeschlossen wird und maximalen Gewinn bietet.
Lösung
Betrachten wir eine Reihe von ngegebene Jobs, die mit Fristen und Gewinn verbunden sind, werden verdient, wenn ein Job innerhalb seiner Frist abgeschlossen ist. Diese Jobs müssen so bestellt werden, dass ein maximaler Gewinn erzielt wird.
Es kann vorkommen, dass nicht alle angegebenen Aufträge innerhalb ihrer Fristen ausgeführt werden.
Angenommen, Frist von ith Job Ji ist di und der Gewinn aus diesem Job ist pi. Daher ist die optimale Lösung dieses Algorithmus eine praktikable Lösung mit maximalem Gewinn.
Somit ist $ D (i)> 0 $ für $ 1 \ leqslant i \ leqslant n $.
Zu Beginn werden diese Jobs nach Gewinn sortiert, dh $ 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
Analyse
In diesem Algorithmus verwenden wir zwei Schleifen, eine befindet sich in einer anderen. Daher ist die Komplexität dieses Algorithmus $ O (n ^ 2) $.
Beispiel
Betrachten wir eine Reihe gegebener Jobs, wie in der folgenden Tabelle gezeigt. Wir müssen eine Reihe von Jobs finden, die innerhalb ihrer Fristen abgeschlossen werden und maximalen Gewinn bringen. Jeder Job ist mit einer Frist und einem Gewinn verbunden.
Job | J1 | J2 | J3 | J4 | J5 |
---|---|---|---|---|---|
Frist | 2 | 1 | 3 | 2 | 1 |
Profitieren | 60 | 100 | 20 | 40 | 20 |
Lösung
Um dieses Problem zu lösen, werden die angegebenen Jobs in absteigender Reihenfolge nach ihrem Gewinn sortiert. Daher werden die Jobs nach dem Sortieren wie in der folgenden Tabelle gezeigt sortiert.
Job | J2 | J1 | J4 | J3 | J5 |
---|---|---|---|---|---|
Frist | 1 | 2 | 2 | 3 | 1 |
Profitieren | 100 | 60 | 40 | 20 | 20 |
Aus diesen Jobs wählen wir zuerst aus J2, da es innerhalb seiner Frist abgeschlossen werden kann und maximalen Gewinn beiträgt.
Nächster, J1 wird ausgewählt, da es im Vergleich zu mehr Gewinn bringt J4.
In der nächsten Uhr J4 kann daher nicht ausgewählt werden, da die Frist abgelaufen ist J3 wird ausgewählt, wenn es innerhalb seiner Frist ausgeführt wird.
Die Arbeit J5 wird verworfen, da es nicht innerhalb seiner Frist ausgeführt werden kann.
Die Lösung ist also die Reihenfolge der Jobs (J2, J1, J3), die innerhalb ihrer Frist ausgeführt werden und maximalen Gewinn bringen.
Der Gesamtgewinn dieser Sequenz beträgt 100 + 60 + 20 = 180.