Sei sulla pagina 1di 37

Projeto e Anlise de Algoritmos

Aula 8:
Algoritmos Gulosos (5)

DECOM/UFOP
2012/2 5. Perodo
Anderson Almeida Ferreira
Adaptado do material de Andra
Iabrudi Tavares
BCC241/2012-2
1
Algoritmos Gulosos
Algoritmos mopes
Escolha bvia a cada passo
Escolhe e depois resolve subproblema
recursivamente.
Soluo construtiva.
Quando timo
Melhor deciso local melhor deciso global.
Mostrar que a soluo tima normalmente ajuda
a formular o problema.
Sub-estrutura tima (princpio da otimalidade)


3
BCC241/2011-2
rvores Geradoras Mnimas (AGM)
Conectar computadores por rede, cada link com
um custo de manuteno
4
BCC241/2011-2
Formulao
Propriedades
Guloso AGM: Algoritmo de Kruskal
Adicione sempre a aresta de menor peso que no
forma ciclo (1956).
Guloso AGM: Algoritmo de Kruskal
Adicione sempre a aresta de menor peso que no
forma ciclo.
Est correto, ou seja, timo?????
Kruskal est correto: cortes
Partio (S,V-S) ou
de forma equivalente conjunto de vertices.






7
BCC241/2011-2
Kruskal est correto
Sejam X arestas de alguma AGM. Seja qualquer
subconjunto S de vrtices tal que X no cruze S e
V-S e seja e a aresta mais leve do corte. Ento X U
{e} faz parte de alguma AGM.






8
BCC241/2011-2
Kruskal est correto
Prova
Sejam X arestas de alguma AGM. Seja qualquer subconjunto S de vrtices tal que X no cruze S e
V-S e seja e a aresta mais leve do corte. Ento X U {e} faz parte de alguma AGM.

9
BCC241/2011-2
10
BCC241/2011-2
Guloso AGM: Algoritmo de Kruskal
Complexidade depende de qual operao?
11
BCC241/2011-2
ciclo sem } , { X v u
Guloso AGM: Algoritmo de Kruskal

12
BCC241/2011-2
Conjuntos Disjuntos
Mesmo componente em log(n)
13
BCC241/2011-2
Algoritmo para componentes disjuntos
Propriedade 1: ( ) ( ) ( ) x x t rank rank <
Propriedade 2: rank da raiz k, pelo
menos 2
k

14
BCC241/2011-2
8 7
A
H
B C
I
G F
D
E
4
9
10
14
8
11
2
7
6
1
4
2
15
BCC241/2011-2
A
H
B C
I
G F
D
E
4
8 7
9
10
14
8
11
2
7 6
1
4
2
16
BCC241/2011-2
Guloso AGM: Algoritmo de Kruskal
Complexidade?
17
BCC241/2011-2
( )
( ) ( ) n n n T n n
n m n T
log ) ( log
log ) (
2
O s s O
O =
Guloso AGM: Algoritmo de Prim
Cresa a rvore, colocando sempre a menor
aresta que liga X aos vrtices que faltam
(1930 Jarnik, 1957 Prim, 1959 Dijkstra)
18
BCC241/2011-2
Guloso AGM: Algoritmo de Prim

19
BCC241/2011-2
Guloso Menor caminho: Dijkstra
20
BCC241/2011-2

21
BCC241/2011-2

22
BCC241/2011-2
Ateno: apesar de ser
linear nesse exemplo,
representa qualquer
rvore.
prev:
permite
recuperar
rvore
Outro exemplo:
http://en.wikipedia.org/wiki/Prim%27s_algorithm
http://en.wikipedia.org/wiki/Kruskal%27s_algorithm

23
BCC241/2011-2
Fila Prioridades x Complexidade
24
BCC241/2011-2
A
H
B C
I
G F
D
E
4
8 7
9
10
14
8
11
2
7 6
1
4
2
27
BCC241/2011-2
A
H
B C
I
G F
D
E
4
8 7
9
10
14
8
11
2
7 6
1
4
2
A
H
B C
I
G F
D
E
4
8 7
9
10
14
8
11
2
7 6
1
4
2
28
BCC241/2011-2
rvores podem
ser diferentes,
mas tm o
mesmo peso!
Um problema de seleo de atividades
Seja S={a
1
, a
2
, ..., a
n
} um conjunto de atividades
propostas que desejam usar um recurso, que s
pode ser usado por uma atividade de cada vez.
Cada atividade a
i
tem um tempo de inicio si e
um tempo de termino f
i
, onde 0ss
i
<f
i
<.
As atividades a
i
e a
j
so compatveis se s
i
> f
j
ou
s
j
> f
i
.
Problema: Selecionar um subconjunto de
tamanho mximo de atividades mutuamente
compatveis.
Exemplo
i 1 2 3 4 5 6 7 8 9 10 11
s
i
1 3 0 5 3 5 6 8 8 2 12
f
i
4 5 6 7 8 9 10 11 12 13 14
Subestrutura tima
Seja S
ij
={a
k
e S | f
i
s s
k
< f
k
s s
j
}, ou seja, o
subconjunto de atividades que podem comear aps
a
i
terminar e que terminam aps a atividade a
j

comear.
Acrescentamos duas atividades fictcias a
0
e a
n+1
,
onde f
0
=0 e s
n+1
=.
Logo, S = S
0 n+1
Se uma soluo para s
ij
inclui a
k
, ento a
k
gera dois
subproblemas s
ik
e s
kj
c s
ij
.
Logo, se h uma soluo tima para s
ij
que inclui a
k
,
as solues para s
ik
e s
kj
usadas dentro da soluo
tima de s
ij
tambm devem ser timas.

Teorema
Uma soluo tima para S
ij
seria
A
ij
= A
ik
{a
k
} A
kj
A
0 n+1
seria a soluo para o problema inteiro.
Teorema: Considere qualquer subproblema no
vazio S
ij
e seja a
m
a atividade em S
ij
com trmino
mais antigo. Ento,
1. A atividade a
m
usada em algum subconjunto de
tamanho mximo de atividades mutuamente
compatveis de S
ij
.
2. O subproblema S
im
vazio, de forma e a escolha de
a
m
deixa o subproblema S
mj
como nico que pode
ser no vazio.
Teorema
2. Suponha que exista algum a
k
S
im
. Ento f
i
s
k

< f
k
s
m
< f
m
f
k
< f
m
.
Ento a
k
S
i j
e ele tem f
k
< f
m
. Contradio.
1. Seja A
i j
um subconjunto de tamanho mximo de
atividades mutuamente compatveis em S
i j
.
Ordene as atividade em A
i j
em ordem crescente
de tempo de trmino.
Seja a
k
a primeira atividade em A
i j
.
Se a
k
= a
m
, pronto.
Caso contrrio, construa A
i j
= A
i j
{a
k
} {a
m
} .
Algoritmo
Recursive-Active-Selector(s,f,i,j)
m i + 1
while m<j and s
m
<f
i
m m + 1
if m < j
Return {am} Recursive-Active-Selector(s,f,m,j)
return C

Iteractive-Active-Selector(s,f)
n = comprimento(s)
A = {1}
i = 1
for m=2..n:
If s
m
> f
i
A = A {a
m
}
i = m
Exemplo
i 1 2 3 4 5 6 7 8 9 10 11
s
i
1 3 0 5 3 5 6 8 8 2 12
f
i
4 5 6 7 8 9 10 11 12 13 14
Estratgia gulosa
Moldar o problema de otimizao como um
problema no qual fazemos uma escolha e ficamos
com um nico subproblema para resolver.
Provar que sempre existe uma soluo tima para o
problema original que contm a escolha gulosa.
Demonstrar que, tendo feita escolha gulosa, o que
resta um subproblema com a propriedade de que,
se combinarmos uma soluo tima para o
subproblema com a escolha gulosa que fizemos,
chegamos a uma soluo tima para o problema
original.
Problema da mochila
Knapsack problem
H n itens, onde o i-simo item vale v
i
e pesa w
i

quilos.
Deve-se colocar uma carga to valiosa quanto
possvel em uma mochila, mas ela comporta no
mximo w quilos.
Problema da mochila
Problema da mochila 0-1
Subestrutura tima: Para a carga mais valiosa que
pese no mximo w quilos, se removermos o item j,
a carga restante deve ser a mais valiosa que pese w
w
j
.
Problema da mochila fracionada
Se removermos um peso w de um item j da carga
tima, a carga restante deve ser mais valiosa que
pese no mximo W-w que o ladro pode levar dos
n-1 itens originais, mais w
j
-w do item j.

Problema da mochila
Fracionada
Estratgia gulosa
Divida v
i
/w
i
para cada item
Pega o mximo do item de maior valor por quilo
Se o suprimento deste item esgotar e puder levar
mais, pega o mximo possvel do prximo item com
maior valor por quilo.
Exemplo:
Mochila 50 quilos
Item 1 10 quilos, $60
Item 2 20 quilos, $100
Item 3 30 quilos, $120

Potrebbero piacerti anche