GULOSOS
GULOSOS
GULOSOS
mia@cic.unb.br
• Algoritmo guloso não leva sempre a soluções ótimas, mas leva muitos problemas
a soluçoes ótimas.
• Problema de seleção de atividades
- Criar uma agenda dividindo recursos entre várias atividades conflitantes entre si.
- Algoritmo guloso: método simples e elegante para selecionar um conjunto de
tamanho máximo de atividades mutuamente compatı́veis.
- Supor: conjunto S = {1, 2, ..., n} de n atividades que usam um recurso. Ex-
emplo: sala de conferências, que pode ser usado para 1 atividade poe vez. Cada
atividade i tem um tempo de inı́cio si (start) e um tempo de término fi (finish),
onde si ≤ ti . Se for selecionada, a atividade i ocorre durante o intervalo [si ,
fi ). Atividades i e j são compatı́veis se os intervalos [si , fi ) e [sj , fj ) não se so-
brepõem, isto é, i e j são compatı́veis se si ≥ fj ou sj ≥ fi .
- Problema da seleção de atividades: selecionar um conjunto de tamanho máximo
de atividades mutuamente compatı́veis.
→ Correção do algoritmo:
A: armazena atividades selecionadas
j: última atividade inserida em A
Atividades selecionadas em ordem não-decrescente de tempo de término:
fi : maior tempo de término de qualquer atividade em A.
Linhas 2,3: seleciona atividade 1, inicializa A com {1} e inicializa j com 1.
Linhas: 4-7: considera cada atividade i e adiciona i a A se i for compatı́vel com as ativi-
dades já adicionadas a A.
Para verificar se i é compatı́vel com as atividades em A: basta comparar si com fj (tempo
de término da última atividade inserida em A). (∗)
Se i é compatı́vel: i é adicionado a A e j é atualizado para i (linhas 6 e 7).
→ Tempo de execução: n atividades podem ser agendadas em tempo Θ(n), se as
atividades já tiverem sido ordenadas por seus tempos de término.
→ Atividade escolhida por GREEDY - ACTIVITY - SELECTOR: sempre aquela
com o tempo de término menor, que pode ser escolhida.
→ Escolha: ”gulosa” no sentido de que ele deixa o máximo de oportunidades para
as atividades restantes, ou seja, maximiza a disponibilidade de tempo não agendado para
as outras atividades.
→ Algoritmos gulosos não produzem sempre uma solução ótima mas GREEDY
- ACTIVITY - SELECTOR sempre dá solução ótima para uma instância do Problema da
Seleção de Atividades.
Teorema: Algoritmo GREEDY - ACTIVITY - SELECTOR produz soluções de
tamanho máximo para o Problema da Seleção de Atividades.
Prova: Seja S = {1, 2, ..., n} o conjunto de atividades a serem agendadas.
→ Tomar o item 1 para 0 - 1 não funciona porque o ladrão não consegue encher a
mochila na sua capacidade máxima, e este espaço vazio diminui o valor / peso efetivo.
Neste caso, quando incluı́mos um item, devemos comparar a solução incluindo este item,
com uma solução que não inclui este item, antes de incluir o item.
Isto gera muitos problemas que se sobrepõem algoritmo de P. D..