Sunteți pe pagina 1din 17

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.
soluca
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.
tima, esta e soluca
o o
tima.
Pela escolha gulosa o
o que o algoritmo guloso fornece soluca
o o
tima
Assuma por hip. de induca
para problemas menores.
Seja a a 1a escolha gulosa, e S o subproblema resultante da 1a escolha gulosa.
tima, podemos combinar a com a soluca
o o
tima de S (ob Pela subestrutura o
o o
tima do problema original.
tida pelo alg. guloso) para obter a soluca

Ex.: (escalonamento de intervalos) Considere n intervalos. Cada intervalo i


tem incio no instante s[i] e termino em f [i]. Dois intervalos s
ao compatveis se
o. Determine um conjunto de intervalos compatveis de
n
ao possuem interseca
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
|____________|

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).

Ex.: (problema da mochila fracion


ario)
Mochila de capacidade W e n itens. Cada item i tem valor vi e peso pi. Podemos
o de itens na mochila.
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

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 em 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
o do produto i, e com tamanho
S e o subproblema formado pela remoca
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 do
Seja S uma soluca
produto i.
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 do produto i
com maior densidade vi/pi, ou seja, uma quantidade ri do produto 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 do produto j
Seja S uma soluca
pelo produto i.
Como vi/pi vj /pj , temos que
c(S) = c(O) vj /pj + vi/pi c(O).
o o
tima trocando parte de um produto
Conclumos que n
ao pioramos a soluca
qualquer pelo produto 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).

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.

S-ar putea să vă placă și