Você está na página 1de 24

11.

Algoritmos Gulosos

o, poUma escolha gulosa e aquela que maximiza o ganho da pr


oxima iteraca
o ruim ao final do algoritmo.
dendo ou n
ao gerar uma soluca
Ex.: Se voce estiver indo de a ate b, o percurso ate d lhe deixar
a mais perto do
destino que o percurso ate c (escolha gulosa). Porem, o trajeto total ser
a mais
curto indo por c.
d

o o
tima. Neste caso o
Para alguns problema escolhas gulosas fornecem a soluca
o o
tima.
algoritmo e simples, mas precisamos provar que fornece a soluca

Primeira coisa a fazer e identificar o que e uma escolha e o que constitui um


subproblema (problema que resulta ap
os realizar uma escolha).
Hoje veremos como provar utilizando subestrutura o
tima combinada com escolha
gulosa o
oxima aula provaremos com argumento de troca.
tima. Na pr

o gulosa e o
tima, provamos as 2 propriedades abaixo:
Para mostrar que a soluca
tima: qualquer soluca
o o
tima contem a
1) O problema tem subestrutura o
o o
tima de seus subproblemas. Ou seja, podemos construir uma soluca
soluca
o
o
tima utilizando as soluco
es o
timas dos subproblemas.
o
tima: existe soluca
o o
tima que faz a 1a escolha gulosa.
2) Escolha gulosa e
o no tamanho do problema.
Corretude: induca
Caso base: resolvido com uma escolha gulosa.
o o guloso e o
timo para problemas menores.
Por hip
otese de induca
Seja a a 1a escolha gulosa, e S o subproblema resultante da 1a escolha gulosa.
o o
tima O para S.
Por hip
otese o guloso fornece soluca
tima, O {a} e soluca
o o
tima do problema.
Pela subestrutura o

tima e geralmente por contradica


o:
A prova da subestrutura o
o
Dada uma escolha a e o subproblema S resultante de a, assuma por contradica
o o
tima O de S e melhor que O {a}.
que a soluca
o).
Mostre que O {a} e melhor que O (contradica
tima, ainda assim o aluno deve veSe n
ao for exigida a prova da subestrutura o
o do subproblema que est
rificar se a descrica
a fornecendo tem esta propriedade.
o do subproblema, verifique se e possvel que a
Ou seja, ap
os fornecer a descrica
soluca
a escolhido para
o o
tima do subproblema seja incompatvel com o elemento j
entrar na soluca
o.

Para provar a propriedade de escolha gulosa:


o o
tima O qualquer que n
Considere uma soluca
ao contem a 1a escolha gulosa a.
o vi
Mostre que e possvel construir uma soluca
avel trocando a por elementos
o.
de O sem piorar o valor da soluca
Quando estiver procurando uma estrategia gulosa pense ao contr
ario:
Qual criterio de escolha permite que o elemento escolhido sempre possa ser inserido
em uma soluca
o o
tima?

11.2

Ex.: Escalonamento de intervalos

Considere n intervalos. Cada intervalo i tem incio no instante s[i] e termino em


o. Determine um
f [i]. Dois intervalos s
ao compatveis se n
ao possuem interseca
conjunto de intervalos compatveis de tamanho m
aximo.
i 1 2 3 4 5 6 7
s 2 1 4 5 8 6 10
f 6 7 13 11 12 9 14
0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15
1
|_______|
2 |___________|
3
|_____________________|
4
|_____________|
5
|__________|
6
|_____|
7
|____________|

o e um subconjunto de intervalos sem conflitos.


Uma soluca
Escolha: um intervalo a.
Subproblema: ap
os escolher a, removemos do problema o intervalo a e todos
os intervalos n
ao compatveis com a.
tima:
Subestrutura o
o que existe soluca
o o
tima O e um intervalo a de O tq
Assuma por contradica
o de a (e de todos os intervalos n
a remoca
ao compatveis com a) produz um
o o
tima O tq |O| > |O| 1.
subproblema S com soluca
o O {a} e
Como todos os intervalos em O s
ao compatveis com a, a soluca
vi
avel e possui |O| + 1 intervalos.
o o
tima
Porem, |O| + 1 > (|O| 1) + 1 = |O|, o que implica que O n
ao e soluca
(F).

Escolha gulosa: intervalo que comeca primeiro.


|___| |___| |___|
|_____________________| N~
AO FUNCIONA!

Escolha gulosa: menor intervalo.


|____________________| |____________________|
|________|
N~
AO FUNCIONA!

Escolha gulosa: intervalo com menos conflito.


3
4
4
3
|____| |____| |____| |____|
|___| |___| |___|
|___|
2
|___| N~
AO FUNCIONA!
|___|
|___|
4
4

Escolha gulosa: intervalo a que termina primeiro.


Ex.: intervalos 1, 6 e 7.
i 1 2 3 4 5 6 7
s 2 1 4 5 8 6 10
f 6 7 13 11 12 9 14
0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15
1
|_______|
2 |___________|
3
|_____________________|
4
|_____________|
5
|__________|
6
|_____|
7
|____________|
Ex.: Inst
ancias dos exemplos das escolhas gulosas que n
ao funcionam.

Escolha gulosa: intervalo a que termina primeiro.


tima:
Escolha gulosa o
o o
tima que n
Seja a o intervalo que termina primeiro, e O uma soluca
ao
contem a. Seja b o intervalo que termina primeiro em O.
Como todos os intervalos em O {b} s
ao compatveis com b, temos que eles
comecam depois do termino de b, e portanto tambem s
ao compatveis com a.
o o
tima que contem a 1a escolha gulosa.
Trocando b por a obtemos uma soluca

ESCALONAMENTO_INTERVALOS(s[],f[],n):
ordene os intervalos em ordem crescente do vetor f.
S <- {1}
ultimo <- 1
para i <- 2 at
e n
se s[i] >= f[ultimo]
S <- S U {i}
ultimo <- i
retorne S
T (n) = (n lg n + n) = (n lg n).

11.3

tima
Exemplos sem subestrutura o

Escalonamento de intervalos
Subproblema 1: ap
os escolher a, removemos do problema o intervalo a e todos
os intervalos n
ao compatveis com a.
Subproblema 2: ap
os escolher a, removemos do problema o intervalo a.
o esquecemos de remover os incompatveis.
Na 2a definica
1
|_______|
2 |___________|
3
|_____|
4
|____________|
o o
tima O = {1, 3, 4}. Ent
Soluca
ao, O {1} = {3, 4}.
o o
tima O = S.
Subproblema ap
os a escolha de 1: S = {2, 3, 4} com soluca
o o
tima com O e 1, pois 1 e 2 s
N
ao podemos construir soluca
ao incompatveis.

Caminho mais longo em grafos orientados


Caminho simples (sem repetir vertices) com maior n
umero de arestas.
NP-completo. Linear em DAGs: tamanho ate cada vertice em ord. topol
ogica.
a

Caminhos mais longos de a ate c: (a, b, c) ou (a, d, c) (tamanho 2).


o o
tima (a, b, c) e a escolha da aresta (a, b).
Considere a soluca
o o
tima: (b, a, d, c)!
Subproblema: caminho mais longo de b ate c. Soluca
o: remova do subproblema vertices includos no caminho, exceto o u
ltimo.
Soluca
No caminho mais curto basta definir o novo ponto de partida.

Exerccio:
(hot
eis) Voce far
a uma viagem de L km, e deseja fazer o menor n
umero de
es dos possveis hoteis s
paradas em hoteis. As posico
ao fornecidas no vetor
x[1..n] (em ordem crescente). N
ao e permitido viajar mais de D km sem fazer
o 0. Assuma que a dist
uma parada. A viagem comeca na posica
ancia entre hoteis
consecutivos e no m
aximo D, x[1] D e x[n] = L.
o gulosa e o
tima, apresente pseuForneca algoritmo guloso: prove que a soluca
doc
odigo e sua complexidade de tempo.

Captulo 12
tima
Algoritmos Gulosos: escolha gulosa o

12.1

Ex.: Problema da mochila fracion


ario

Mochila de capacidade W e n itens. Cada item i tem valor vi e peso pi.


o de itens na mochila.
Podemos inserir fraca
i
1
2 3
p
6
3 4
v
30 14 16
v/p 5 4.7 4

4
2
9
4.5

W=10

71

Escolha: um produto i e a quantidade si deste produto que ser


a colocada na
mochila.
Subproblema: retiramos do problema o produto i, e reduzimos o tamanho da
mochila para W si.
tima:
Subestrutura o
o que temos a situaca
o abaixo:
Assuma por contradica
o o
tima com quantidade si do produto i.
O e uma soluca
S e o subproblema formado removendo i, e com tam. de mochila W si.
o o
tima O de S e tq v(O) > v(O) si(vi/pi).
A soluca
o do problema original utilizando O e si unidades de i.
Seja S uma soluca
Ent
ao, v(S ) = v(O) + si(vi/pi) > (v(O) si(vi/pi)) + si(vi/pi) = v(O)
tima).
(Falso, pois O e o

Escolha gulosa: utilize o m


aximo possvel do produto i com maior densidade vi/pi.
tima:
Escolha gulosa o
o o
tima que n
Seja O uma soluca
ao utiliza o m
aximo possvel de i, ou seja,
uma quantidade ri de i n
ao foi utilizada, e outros produtos foram utilizados.
Seja um produto qualquer j 6= i com quantidade sj > 0 em O.
Seja uma quantidade qualquer tq 0 < min(ri, sj ).
o que utiliza O, mas troca uma quantidade de j por i.
Seja S uma soluca
Como vi/pi vj /pj , temos que c(S) = c(O) vj /pj + vi/pi c(O).
Portanto n
ao pioramos O trocando parte de um produto em O por i.
o o
tima que utiliza o m
Ent
ao existe soluca
aximo possvel do produto i.

i
1
2 3
4 W=10
p
6
3 4
2
v
30 14 16
9
v/p 5 4.7 4 4.5
SOL. GULOSA: 6 do 1, 3 do 2 e 1 do 4 = 30+14+9/2=48,5

MOCHILA_FRACIONARIO(V[],P[],n,W):
ordene os itens em ordem decrescente V[i]/P[i].
v <- 0
S <- {}
para i <- 1 at
e n
d <- min{W, P[i]}
v <- v + d*V[i]/P[i]
S <- S U {(i,d)}
W <- W - d
se W = 0, retorne (v,S)
retorne (v,S)
T (n) = (n lg n + n) = (n lg n).

o no Cormen ou Vazirani).
Exerccio para casa: C
odigos de Huffman (soluca
Slides: 21 - 29.
Escolha gulosa: Coloque os dois n
os x e y com menor custo como irm
ao, remova
estes n
os, e crie um novo n
o z com frequencia f (z) = f (x) + f (y).

timo, e forneca pseudoc


Prove que o guloso e o
odigo e complexidade.
possvel reduzir complexidade utilizando uma heap (usada no heapsort).
E

tima: Sejam x e y os dois n


Escolha gulosa o
os de menor frequencia, e a e b dois
ltimo nvel.
n
os irm
aos no u
T

T
x
y

y
x

Como dT (x) dT (a) e f (x) f (a),


c(T ) c(T ) = dT (x)f (x) + dT (a)f (a) dT (a)f (x) dT (x)f (a)
= (dT (x) dT (a))(f (x) f (a)) 0
A troca de y com b e similar.

Exerccio: Troco em moedas.


Dispomos de moedas de 1, 5, 10 e 25 centavos. Dado um valor V , pague este
valor utilizando o menor n
umero de moedas.
Ex.: Pagar 24.
Solu
c~
ao
otima: 24 = 4x$1 + 2x$10 (total de 6 moedas)

Você também pode gostar