DAA - Sequenciamento de Trabalho com Prazo
Declaração do Problema
No problema de sequenciamento de tarefas, o objetivo é encontrar uma sequência de tarefas, que seja concluída dentro do prazo e que dê o máximo de lucro.
Solução
Vamos considerar um conjunto de ndeterminados trabalhos que estão associados a prazos e lucro é obtido, se um trabalho for concluído dentro do seu prazo. Esses trabalhos precisam ser ordenados de forma que haja lucro máximo.
Pode acontecer que todos os trabalhos fornecidos não sejam concluídos dentro dos seus prazos.
Suponha, prazo de ith trabalho Ji é di e o lucro recebido por este trabalho é pi. Portanto, a solução ótima desse algoritmo é uma solução viável com lucro máximo.
Assim, $ D (i)> 0 $ para $ 1 \ leqslant i \ leqslant n $.
Inicialmente, esses trabalhos são ordenados de acordo com o lucro, ou seja, $ 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
Análise
Neste algoritmo, estamos usando dois loops, um dentro do outro. Portanto, a complexidade desse algoritmo é $ O (n ^ 2) $.
Exemplo
Vamos considerar um conjunto de trabalhos fornecidos, conforme mostrado na tabela a seguir. Temos que encontrar uma sequência de trabalhos, que serão concluídos dentro dos prazos e darão o máximo de lucro. Cada trabalho está associado a um prazo e lucro.
Trabalho | J1 | J2 | J3 | J4 | J5 |
---|---|---|---|---|---|
Data limite | 2 | 1 | 3 | 2 | 1 |
Lucro | 60 | 100 | 20 | 40 | 20 |
Solução
Para resolver esse problema, os empregos fornecidos são classificados de acordo com seu lucro em ordem decrescente. Portanto, após a classificação, os trabalhos são ordenados conforme mostrado na tabela a seguir.
Trabalho | J2 | J1 | J4 | J3 | J5 |
---|---|---|---|---|---|
Data limite | 1 | 2 | 2 | 3 | 1 |
Lucro | 100 | 60 | 40 | 20 | 20 |
Deste conjunto de trabalhos, primeiro selecionamos J2, pois pode ser concluído dentro do seu prazo e contribui com o lucro máximo.
Próximo, J1 é selecionado porque dá mais lucro em comparação com J4.
No próximo relógio, J4 não pode ser selecionado porque seu prazo acabou, portanto J3 é selecionado à medida que é executado dentro de seu prazo.
O emprego J5 é descartado porque não pode ser executado dentro do prazo.
Assim, a solução é a sequência de jobs (J2, J1, J3), que estão sendo executados dentro do prazo e dão lucro máximo.
O lucro total desta sequência é 100 + 60 + 20 = 180.