Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
naldi@dc.ufscar.br
Agradecimentos
●
Aos professores Mário Felice e Diego Furtado por ceder
parte do material utilizado.
●
Material inspirado nas aulas do prof. Tim Roughgarden
O que são?
●
Algoritmo que iterativamente fazem decisões
míopes
– Geralmente é fácil projetar
– Razoavelmente fácil analisar o tempo de
execução
●
Mas não é fácil projetar um algoritmo guloso
correto
– Muito menos provar sua corretude
Tipo de prova de corretude
●
Por indução no número de iterações
– Mostrando que a escolha gulosa sempre está
correta
●
Por um argumento de troca entre soluções
– Que pode ser por contradição para mostrar
que algo diferente da solução gulosa é pior
– Ou iterativamente, transformando uma
solução qualquer em gulosa sem piorar seu
custo
Problema de Escalonamento
●
Temos uma única unidade de processamento
– E diversas tarefas para realizar
● Cada um com um peso (prioridade) w j >0 e uma
duração lj > 0
●
Uma solução é uma ordem (permutação) de tarefas
– O objetivo é uma solução que minimize a soma
ponderada dos tempos de término, ou seja:
ntarefas
∑ wjcj
j=1
– Onde cj é o tempo em que j-ésima tarefa é concluída
Problema de Escalonamento
∑ wjcj
j=1
Algortimo Guloso para Escalonamento
●
Que tal usar uma abordagem que utiliza generalizações a
partir de casos particulares?
– Caso a) → toda tarefa tem o mesmo peso
– Caso b) → toda tarefa tem a mesma duração
●
Qual seria um bom critério guloso para cada caso?
Algortimo Guloso para Escalonamento
●
Que tal usar uma abordagem que utiliza generalizações a
partir de casos particulares?
– Caso a) → toda tarefa tem o mesmo peso
– Caso b) → toda tarefa tem a mesma duração
●
Qual seria um bom critério guloso para cada caso?
– Caso a) → itens mais curtos antes (pois a duração de
uma tarefa impacta o tempo de término que vem
depois dela)
– Caso b) → itens mais pesados antes (pois o peso
multiplica o tempo de término)
Exemplos
●
1*1 + 1*3 = 4 ●
1*1 + 2*2 = 5
●
1*2 + 1*3 = 5 ●
2*1 + 1*2 = 4
Generalizando e resolvendo conflitos
●
Quando a tarefa é mais curta e mais pesada que
outra, ela certamente deve vir antes
●
Mas o que fazer quando uma tarefa i é mais curta e
outra j é mais pesada, ou seja, li <lj e wi < wj?
– Uma possibilidade é combinar os valores de
duração e peso em uma única pontuação que:
●
Aumenta como peso
●
Diminui com a duração
– E escalonar as tarefas em ordem decrescente de
pontuação
Generalizando e resolvendo conflitos
●
Quais funções atendem esses critérios:
– Duas possibilidades entre várias:
f1(i) = wi – li f2(i) = wi / li
– No máximo um destes critérios está correto!
●
Talvez, nenhum deles!
●
Vamos procurar cenários em que eles tenham
comportamento distinto entre si (e do esperado)
para colocá-los a prova!
– São os chamados contra-exemplos.
Exemplo de cenário
●
Duas tarefas:
– li = 1 w i = 3
– lj = 2, wj = 5
● f1(i) = 3 - 1 = 2 ● f2(i) = 3 / 1 = 3
● f1(j) = 5 - 2 = 3 ● f2(j) = 5 / 2 = 2,5
●
5* 2 + 3*3 = 19 ●
3*1 + 5*3 =18
Generalizando e resolvendo conflitos
●
Vamos fazer a prova usando argumento de troca
– Técnica por contradição
●
Para simplificar, vamos supor que não ocorrem
empates, ou seja, i,j temos f(i) ≠ f (j)
●
Seja σ o escalonamento produzido por nosso
algoritmo
●
Por contradição, suponha que σ* é um
escalonamento ótimo e que ele é diferente de σ
Prova de Corretude
●
Para simplificar a notação, vamos renomear as
tarefas de acordo com a ordem em σ, ou seja:
w1 w 2 w3 wn
> > >…>
l1 l2 l3 ln
●
Como σ* é diferente de σ, deve haver alguma
inversão em algum par de tarefas adjacentes i e j tal
que:
– i está antes de j em σ*
– i > j → wj/lj > wi/li → wjli> wilj
Prova de Corretude
●
Vamos verificar o que acontece com o custo de σ* se
invertemos i com j
1)Nada muda para os itens antes de i e j, pois as
durações destes não afetam os tempos de término
dos primeiros
2) Nada muda para os itens depois de i e j, pois ambas
as durações destes contribuem para os tempos de
término de todos que vem depois, independente da
ordem de i e j
ntarefas min(i , j)−1 ntarefas
●
Agora vamos focar nas contribuições de i e j para a
função objetivo
– Note que a troca faz:
● O tempo de término da tarefa i aumentar de lj
–Pois j passa ser processado antes de i
● O tempo de término da tarefa j diminui de li
Pois i passa a ser processado depois de j
–
– Portanto, a variação da função objetivo após a
troca é:
● wilj - wjli
Prova de Corretude