DAA - Sequenza dei lavori con scadenza
Dichiarazione problema
Nel problema della sequenza dei lavori, l'obiettivo è trovare una sequenza di lavori che venga completata entro le scadenze e dia il massimo profitto.
Soluzione
Consideriamo un insieme di ndeterminati lavori associati a scadenze e profitto viene guadagnato, se un lavoro viene completato entro la scadenza. Questi lavori devono essere ordinati in modo tale da ottenere il massimo profitto.
Può accadere che tutti i lavori forniti non vengano completati entro le scadenze.
Supponiamo, scadenza del ith lavoro Ji è di e il profitto ricevuto da questo lavoro è pi. Quindi, la soluzione ottimale di questo algoritmo è una soluzione fattibile con il massimo profitto.
Quindi, $ D (i)> 0 $ per $ 1 \ leqslant i \ leqslant n $.
Inizialmente, questi lavori sono ordinati in base al profitto, cioè $ 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
Analisi
In questo algoritmo, stiamo usando due loop, uno all'interno dell'altro. Quindi, la complessità di questo algoritmo è $ O (n ^ 2) $.
Esempio
Consideriamo un insieme di lavori dati come mostrato nella tabella seguente. Dobbiamo trovare una sequenza di lavori, che saranno completati entro le scadenze e daranno il massimo profitto. Ad ogni lavoro è associata una scadenza e un profitto.
Lavoro | J1 | J2 | J3 | J4 | J5 |
---|---|---|---|---|---|
Scadenza | 2 | 1 | 3 | 2 | 1 |
Profitto | 60 | 100 | 20 | 40 | 20 |
Soluzione
Per risolvere questo problema, i lavori forniti vengono ordinati in base al loro profitto in ordine decrescente. Quindi, dopo l'ordinamento, i lavori vengono ordinati come mostrato nella tabella seguente.
Lavoro | J2 | J1 | J4 | J3 | J5 |
---|---|---|---|---|---|
Scadenza | 1 | 2 | 2 | 3 | 1 |
Profitto | 100 | 60 | 40 | 20 | 20 |
Da questo insieme di lavori, prima selezioniamo J2, poiché può essere completato entro la sua scadenza e contribuisce al massimo profitto.
Il prossimo, J1 è selezionato in quanto dà più profitto rispetto a J4.
Nel prossimo orologio, J4 non può essere selezionato poiché la sua scadenza è scaduta, quindi J3 è selezionato mentre viene eseguito entro la scadenza.
Il lavoro J5 viene scartato in quanto non può essere eseguito entro la scadenza.
Quindi, la soluzione è la sequenza di lavori (J2, J1, J3), che vengono eseguiti entro la loro scadenza e danno il massimo profitto.
Il profitto totale di questa sequenza è 100 + 60 + 20 = 180.