Documente Academic
Documente Profesional
Documente Cultură
Algoritmos Gulosos
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
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
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).
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).
4
2
9
4.5
W=10
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
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.