Vous êtes sur la page 1sur 609

Buscas em grafos

Busca: um processo sistemtico (algoritmo)


utilizado para percorrer (visitar) os vrtices e
arestas de um grafo.
A ideia explorar o grafo de modo a resolver
um problema ou extrair informaes de sua
estrutura.
Buscas que estudaremos:
Busca em profundidade (depth-first search)
Busca em largura (breadth-first search)
Busca em profundidade
I nicializao
t 0 -- t o relgio ou tempo global
para todo vrtice v em V(G) faa
PE(v) 0 -- PE(v) a profundidade de entrada de v
PS (v) 0 -- PS(v) a profundidade de sada de v
pai(v) null -- ponteiros que definem a rvore de profundidade
Chamada Externa
escolher um vrtice qualquer v em V(G) -- este vrtice chamado raiz da busca
executar P(v)
Busca em profundidade
Procedimento recursivo de busca
procedimento P(v)
t t + 1
PE(v) t
para todo vrtice w em N(v) faa
se PE(w) = 0
visitar aresta vw (aresta azul da rvore de profundidade T )
ento pai(w) v (v o pai de w na rvore de profundidade T)
executar P(w)
seno se PS(w) = 0 e w pai(v) (se w no saiu da busca e no pai de v)
ento visitar aresta vw (aresta vermelha de retorno)
fim-para
t t + 1
PS(v) t
fim-do-procedimento
Busca em profundidade
a b
c d
f e
g
G
Busca em profundidade
a b
c d
f e
g
G
v a b c d e f g
PE(v) 0 0 0 0 0 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
v a b c d e f g
PE(v) 0 0 0 0 0 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
P(e)
v a b c d e f g
PE(v) 0 0 0 0 0 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
P(e)
v a b c d e f g
PE(v) 0 0 0 0 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
P(e)
e
T
v a b c d e f g
PE(v) 0 0 0 0 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
P(e) N(e) = {c, d, f, g}
e
T
v a b c d e f g
PE(v) 0 0 0 0 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
P(e) N(e) = {c, d, f, g}
e
T
v a b c d e f g
PE(v) 0 0 0 0 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
P(e) N(e) = {c, d, f, g}
e
T
v a b c d e f g
PE(v) 0 0 0 0 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
v a b c d e f g
PE(v) 0 0 0 0 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c)
v a b c d e f g
PE(v) 0 0 0 0 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c)
v a b c d e f g
PE(v) 0 0 0 0 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c)
v a b c d e f g
PE(v) 0 0 2 0 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
v a b c d e f g
PE(v) 0 0 2 0 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
v a b c d e f g
PE(v) 0 0 2 0 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
v a b c d e f g
PE(v) 0 0 2 0 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
v a b c d e f g
PE(v) 0 0 2 0 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a)
v a b c d e f g
PE(v) 0 0 2 0 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a)
v a b c d e f g
PE(v) 0 0 2 0 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a)
v a b c d e f g
PE(v) 3 0 2 0 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
v a b c d e f g
PE(v) 3 0 2 0 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
v a b c d e f g
PE(v) 3 0 2 0 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
v a b c d e f g
PE(v) 3 0 2 0 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
v a b c d e f g
PE(v) 3 0 2 0 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b)
v a b c d e f g
PE(v) 3 0 2 0 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b)
v a b c d e f g
PE(v) 3 0 2 0 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b)
v a b c d e f g
PE(v) 3 4 2 0 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
v a b c d e f g
PE(v) 3 4 2 0 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
v a b c d e f g
PE(v) 3 4 2 0 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
v a b c d e f g
PE(v) 3 4 2 0 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
v a b c d e f g
PE(v) 3 4 2 0 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
v a b c d e f g
PE(v) 3 4 2 0 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
v a b c d e f g
PE(v) 3 4 2 0 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
v a b c d e f g
PE(v) 3 4 2 0 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
v a b c d e f g
PE(v) 3 4 2 0 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d)
v a b c d e f g
PE(v) 3 4 2 0 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d)
v a b c d e f g
PE(v) 3 4 2 0 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d)
v a b c d e f g
PE(v) 3 4 2 5 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
v a b c d e f g
PE(v) 3 4 2 5 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
v a b c d e f g
PE(v) 3 4 2 5 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
v a b c d e f g
PE(v) 3 4 2 5 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
v a b c d e f g
PE(v) 3 4 2 5 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
v a b c d e f g
PE(v) 3 4 2 5 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
v a b c d e f g
PE(v) 3 4 2 5 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
v a b c d e f g
PE(v) 3 4 2 5 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
v a b c d e f g
PE(v) 3 4 2 5 1 0 0
PS(v) 0 0 0 0 0 0 0
Busca em profundidade
a b
c d
f e
g
G
e
T
c
v a b c d e f g
PE(v) 3 4 2 5 1 0 0
PS(v) 0 0 0 6 0 0 0
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
Busca em profundidade
a b
c d
f e
g
G
e
T
c
v a b c d e f g
PE(v) 3 4 2 5 1 0 0
PS(v) 0 7 0 6 0 0 0
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
Busca em profundidade
a b
c d
f e
g
G
e
T
c
v a b c d e f g
PE(v) 3 4 2 5 1 0 0
PS(v) 0 7 0 6 0 0 0
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
Busca em profundidade
a b
c d
f e
g
G
e
T
c
v a b c d e f g
PE(v) 3 4 2 5 1 0 0
PS(v) 8 7 0 6 0 0 0
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
Busca em profundidade
a b
c d
f e
g
G
e
T
c
v a b c d e f g
PE(v) 3 4 2 5 1 0 0
PS(v) 8 7 0 6 0 0 0
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
Busca em profundidade
a b
c d
f e
g
G
e
T
c
v a b c d e f g
PE(v) 3 4 2 5 1 0 0
PS(v) 8 7 0 6 0 0 0
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
Busca em profundidade
a b
c d
f e
g
G
e
T
c
v a b c d e f g
PE(v) 3 4 2 5 1 0 0
PS(v) 8 7 0 6 0 0 0
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
Busca em profundidade
a b
c d
f e
g
G
e
T
c
v a b c d e f g
PE(v) 3 4 2 5 1 0 0
PS(v) 8 7 9 6 0 0 0
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
Busca em profundidade
a b
c d
f e
g
G
e
T
c
v a b c d e f g
PE(v) 3 4 2 5 1 0 0
PS(v) 8 7 9 6 0 0 0
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
Busca em profundidade
a b
c d
f e
g
G
e
T
c
v a b c d e f g
PE(v) 3 4 2 5 1 0 0
PS(v) 8 7 9 6 0 0 0
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
Busca em profundidade
a b
c d
f e
g
G
e
T
c
v a b c d e f g
PE(v) 3 4 2 5 1 0 0
PS(v) 8 7 9 6 0 0 0
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
Busca em profundidade
a b
c d
f e
g
G
e
T
c
v a b c d e f g
PE(v) 3 4 2 5 1 0 0
PS(v) 8 7 9 6 0 0 0
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
f
Busca em profundidade
a b
c d
f e
g
G
e
T
c
v a b c d e f g
PE(v) 3 4 2 5 1 0 0
PS(v) 8 7 9 6 0 0 0
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
f
P(f )
Busca em profundidade
a b
c d
f e
g
G
e
T
c
v a b c d e f g
PE(v) 3 4 2 5 1 0 0
PS(v) 8 7 9 6 0 0 0
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
f
P(f )
Busca em profundidade
a b
c d
f e
g
G
e
T
c
v a b c d e f g
PE(v) 3 4 2 5 1 10 0
PS(v) 8 7 9 6 0 0 0
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
f
P(f )
Busca em profundidade
a b
c d
f e
g
G
e
T
c
v a b c d e f g
PE(v) 3 4 2 5 1 10 0
PS(v) 8 7 9 6 0 0 0
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
f
P(f ) N(f ) = {e, g}
Busca em profundidade
a b
c d
f e
g
G
e
T
c
v a b c d e f g
PE(v) 3 4 2 5 1 10 0
PS(v) 8 7 9 6 0 0 0
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
f
P(f ) N(f ) = {e, g}
Busca em profundidade
a b
c d
f e
g
G
e
T
c
v a b c d e f g
PE(v) 3 4 2 5 1 10 0
PS(v) 8 7 9 6 0 0 0
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
f
P(f ) N(f ) = {e, g}
Busca em profundidade
a b
c d
f e
g
G
e
T
c
v a b c d e f g
PE(v) 3 4 2 5 1 10 0
PS(v) 8 7 9 6 0 0 0
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
f
P(f ) N(f ) = {e, g}
Busca em profundidade
a b
c d
f e
g
G
e
T
c
v a b c d e f g
PE(v) 3 4 2 5 1 10 0
PS(v) 8 7 9 6 0 0 0
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
f
P(f ) N(f ) = {e, g}
g
Busca em profundidade
a b
c d
f e
g
G
e
T
c
v a b c d e f g
PE(v) 3 4 2 5 1 10 0
PS(v) 8 7 9 6 0 0 0
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
f
P(f ) N(f ) = {e, g}
g
P(g)
Busca em profundidade
a b
c d
f e
g
G
e
T
c
v a b c d e f g
PE(v) 3 4 2 5 1 10 0
PS(v) 8 7 9 6 0 0 0
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
f
P(f ) N(f ) = {e, g}
g
P(g)
Busca em profundidade
a b
c d
f e
g
G
e
T
c
v a b c d e f g
PE(v) 3 4 2 5 1 10 11
PS(v) 8 7 9 6 0 0 0
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
f
P(f ) N(f ) = {e, g}
g
P(g)
Busca em profundidade
a b
c d
f e
g
G
e
T
c
v a b c d e f g
PE(v) 3 4 2 5 1 10 11
PS(v) 8 7 9 6 0 0 0
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
f
P(f ) N(f ) = {e, g}
g
P(g) N(g) = {e, f}
Busca em profundidade
a b
c d
f e
g
G
e
T
c
v a b c d e f g
PE(v) 3 4 2 5 1 10 11
PS(v) 8 7 9 6 0 0 0
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
f
P(f ) N(f ) = {e, g}
g
P(g) N(g) = {e, f}
Busca em profundidade
a b
c d
f e
g
G
e
T
c
v a b c d e f g
PE(v) 3 4 2 5 1 10 11
PS(v) 8 7 9 6 0 0 0
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
f
P(f ) N(f ) = {e, g}
g
P(g) N(g) = {e, f}
Busca em profundidade
a b
c d
f e
g
G
e
T
c
v a b c d e f g
PE(v) 3 4 2 5 1 10 11
PS(v) 8 7 9 6 0 0 0
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
f
P(f ) N(f ) = {e, g}
g
P(g) N(g) = {e, f}
Busca em profundidade
a b
c d
f e
g
G
e
T
c
v a b c d e f g
PE(v) 3 4 2 5 1 10 11
PS(v) 8 7 9 6 0 0 0
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
f
P(f ) N(f ) = {e, g}
g
P(g) N(g) = {e, f}
Busca em profundidade
a b
c d
f e
g
G
e
T
c
v a b c d e f g
PE(v) 3 4 2 5 1 10 11
PS(v) 8 7 9 6 0 0 12
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
f
P(f ) N(f ) = {e, g}
g
P(g) N(g) = {e, f}
Busca em profundidade
a b
c d
f e
g
G
e
T
c
v a b c d e f g
PE(v) 3 4 2 5 1 10 11
PS(v) 8 7 9 6 0 13 12
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
f
P(f ) N(f ) = {e, g}
g
P(g) N(g) = {e, f}
Busca em profundidade
a b
c d
f e
g
G
e
T
c
v a b c d e f g
PE(v) 3 4 2 5 1 10 11
PS(v) 8 7 9 6 0 13 12
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
f
P(f ) N(f ) = {e, g}
g
P(g) N(g) = {e, f}
Busca em profundidade
a b
c d
f e
g
G
e
T
c
v a b c d e f g
PE(v) 3 4 2 5 1 10 11
PS(v) 8 7 9 6 14 13 12
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
a
P(a) N(a) = {b, c}
b
P(b) N(b) = {a, c, d}
d
P(d) N(d) = {b, c, e}
f
P(f ) N(f ) = {e, g}
g
P(g) N(g) = {e, f}
Busca em profundidade
Esgotar o filho antes de esgotar o pai
A prxima aresta a ser visitada parte sempre do
vrtice mais recente na busca
Busca em profundidade
Complexidade da busca em profundidade:
O(n + m)
( onde n = V(G) e m = E(G) )
Busca em profundidade
Se o grafo for desconexo, a busca alcanar
apenas os vrtices que esto conectados ao
vrtice-raiz da busca por caminhos!!
Alternativa:
modificar a chamada externa para alcanar todo o grafo
enquanto existe v em V(G) tal que PE(v) = 0 faa
executar P(v)
Busca em profundidade
Uma rvore um grafo conexo e acclico (sem ciclos).
Se o grafo de entrada G conexo, a rvore de
profundidade T uma rvore geradora de G(isto ,
uma rvore que alcana todos os vrtices de G); neste
caso, todos os vrtices de G so alcanados pela busca e
ficam com uma PE diferente de zero no final da mesma.
Somente as arestas azuis (ligando pai e filho)
pertencem arvore de profundidade T. As arestas
vermelhas (arestas de retorno) no pertencem a T.
Busca em profundidade
Propriedades das arestas de retorno
Toda aresta de retorno fecha um ciclo.
Toda aresta de retorno liga um vrtice v a um de seus
ancestrais na rvore de profundidade T.
Busca em profundidade
t 1 2 3 4 5 6 7 8 9 10 11 12 13 14
a
b
c
d
e
f
g
v a b c d e f g
PE(v) 3 4 2 5 1 10 11
PS(v) 8 7 9 6 14 13 12
Intervalos de vida dos vrtices: v descendente de w na rvore de profundidade T se e
somente se o intervalo de vida de v est contido no intervalo de vida de w.
Isto : PE(v) > PE(w) e PS(v) < PS(w) ( v entra depois e sai antes de w ).
Busca em profundidade
Aplicao 1: Dado um grafo G, verificar se G conexo.
Soluo: Rodar o lao abaixo.
c 0
enquanto existe v em V(G) tal que PE(v) = 0 faa
c c + 1
executar P(v)
fim-enquanto
No final da execuo, a varivel c igual ao nmero de
componentes conexas de G (subgrafos conexos maximais
que compem G).
Busca em profundidade
Aplicao 2: Dado um grafo G e dois vrtices v, w de G,
verificar se existe um caminho de v a w em G.
Soluo: Basta executar uma nica vez o procedimento
P(v). No final da execuo, se PE(w) = 0 ento w no foi
alcanado pela busca com raiz v, isto , w est em uma
componente conexa diferente da de v, e portanto no existe
caminho de v a w em G. Caso contrrio, se PE(w) 0,
ento w foi alcanado, e existe um caminho de v a w em G;
neste caso, w ser descendente de v na rvore de
profundidade T, e para determinar o caminho basta rodar o
algoritmo a seguir.
Busca em profundidade
Aplicao 2: Dado um grafo G e dois vrtices v, w de G,
verificar se existe um caminho de v a w em G.
Soluo (continuao):
x w
C x
enquanto x v faa
x pai(x)
colocar x esquerda em C
fim-enquanto
imprimir C Obs: C no necessariamenteo melhor
Busca em profundidade
Aplicao 3: Dado um labirinto, determinar um caminho
da entrada at a sada (se existir).
Busca em profundidade
Aplicao 3 - Soluo: Montar o grafo correspondente ao
labirinto e usar a soluo da aplicao anterior.
Busca em profundidade
Aplicao 3 - Soluo: Montar o grafo correspondente ao
labirinto e usar a soluo da aplicao anterior.
Busca em profundidade
Aplicao 3 - Soluo: Montar o grafo correspondente ao
labirinto e usar a soluo da aplicao anterior.
Busca em profundidade
Aplicao 3 - Soluo: Montar o grafo correspondente ao
labirinto e usar a soluo da aplicao anterior.
v
w
Busca em profundidade
Aplicao 4: Dado um grafo G, encontrar um ciclo de G
ou concluir que G acclico.
Soluo: Executar uma busca em profundidade em G.
Teremos dois casos:
A busca no gerou nenhuma aresta de retorno.
Ento, G acclico, e as arestas azuis formam uma
floresta geradora (um conjunto de rvores, uma
para cada componente conexa).
A busca gerou uma aresta de retorno vw. Ento, v
descendente de w na rvore, e um ciclo C formado.
Para determinar C, basta rodar o algoritmo a seguir:
Busca em profundidade
Aplicao 4: Dado um grafo G, encontrar um ciclo de G
ou concluir que G acclico.
Soluo (continuao):
x v
C x
enquanto x w faa
x pai(x)
colocar x direita em C
fim-enquanto
colocar v direita em C (para fechar o ciclo)
imprimir C
Busca em profundidade
Aplicao 5: Dado um grafo G, decidir se G 2-colorvel.
Um grafo G 2-colorvel (ou bipartido) se podemos
colorir os vrtices de G com duas cores de modo que
vrtices vizinhos no recebam a mesma cor.
Teorema: G 2-colorvel se e somente se G no
contm um ciclo mpar (ciclo com nmero mpar de
arestas.
Busca em profundidade
Aplicao 5: Dado um grafo G, decidir se G 2-colorvel.
a b
c d
f e
g
G
a' b'
c' d'
f ' e'
g'
H
2-colorvel
h h'
no2-colorvel
?
Busca em profundidade
Aplicao 5: Dado um grafo G, decidir se G 2-colorvel.
Soluo: Atribuir cor 0 raiz da busca e rodar:
procedimento P(v)
t t + 1; PE(v) t
para todo vrtice w em N(v) faa
se PE(w) = 0
ento visitar vw;
pai(w) v; cor(w) 1 cor(v);
executar P(w)
seno se PS(w) = 0 e w pai(v)
ento se cor(w) cor(v)
ento visitar vw
seno pare: ciclo mpar! (imprimir como na Aplic.4)
fim-para
t t + 1; PS(v) t
Busca em profundidade
Exerccio: Elaborar um mtodo (algoritmo) para resolver a
seguinte questo: Dado um grafo conexo G e uma rvore
geradora T de G, decidir se T uma rvore de profundidade
para G. Isto , decidir se existe uma busca em profundidade
em G que produza T como rvore de profundidade.
Busca em profundidade
Aplicao 6: Dado um grafo G, determinar as articulaes
e os blocos de G.
Uma articulao de um grafo conexo G um vrtice
v cuja remoo desconecta G.
Se v articulao ento (Gv) > (G), isto , o
nmero de componentes conexas de Gv maior do
que o nmero de componentes conexas de G.
Busca em profundidade
Aplicao 6: Dado um grafo G, determinar as articulaes
e os blocos de G.
Uma bloco de um grafo G um subgrafo maximal H
de G com a seguinte propriedade: H (considerado
isoladamente) conexo e no contm articulaes.
Em alguns casos, um bloco pode ser formado por
uma nica aresta. Esta aresta ser chamada ponte.
Em todo bloco quenosejaumaponte, existem
dois caminhos internamente disjuntos entre qualquer
par de vrtices. Neste caso, o bloco um subgrafo
maximal biconexo.
a
Busca em profundidade
Aplicao 6: Dado um grafo G, determinar as articulaes
e os blocos de G.
b
c d
f e
g
G
a
Busca em profundidade
Aplicao 6: Dado um grafo G, determinar as articulaes
e os blocos de G.
b
d
f e
g
G
a
Busca em profundidade
Aplicao 6: Dado um grafo G, determinar as articulaes
e os blocos de G.
b
c d
f e
g
G
a
Busca em profundidade
Aplicao 6: Dado um grafo G, determinar as articulaes
e os blocos de G.
b
c d
f
g
G
a
Busca em profundidade
Aplicao 6: Dado um grafo G, determinar as articulaes
e os blocos de G.
b
c d
f e
g
G
a
Busca em profundidade
Aplicao 6: Dado um grafo G, determinar as articulaes
e os blocos de G.
b
c d
f e
g
G
articulao
a
Busca em profundidade
Aplicao 6: Dado um grafo G, determinar as articulaes
e os blocos de G.
b
c d
f e
g
G
articulao
bloco
a
Busca em profundidade
Aplicao 6: Dado um grafo G, determinar as articulaes
e os blocos de G.
b
c d
f e
g
G
articulao
bloco
ponte
a
Busca em profundidade
Aplicao 6: Dado um grafo G, determinar as articulaes
e os blocos de G.
b
c d
f e
g
G
articulao
bloco
ponte
A remoo de uma
ponte desconecta o
grafo!
Busca em profundidade
Aplicao 6: Dado um grafo G, determinar as articulaes
e os blocos de G.
Os blocos de um grafo G determinam naturalmente
uma partio do conjunto de arestas de G, isto ,
cada aresta pertence a um e apenas um bloco de G.
O mesmo no ocorre em relao aos vrtices:
se v pertence a mais de um bloco ento v
uma articulao
se v pertence a um nico bloco ento v no
uma articulao
Busca em profundidade
Aplicao 6: Dado um grafo G, determinar as articulaes
e os blocos de G.
Considerando o grafo como uma rede
articulaes so ns crticos
pontes so conexes crticas
Busca em profundidade
Aplicao 6: Dado um grafo G, determinar as articulaes
e os blocos de G.
Definio:
Seja T uma rvore de profundidade para o grafo G.
back(v) = PE do vrtice w mais prximo da raiz de T que
pode ser alcanado a partir de v usando 0 ou mais arestas
de T para baixo e, a seguir, no mximo uma aresta de
retorno.
Busca em profundidade
a b
c d
f e
g
G
e
T
c
v a b c d e f g
PE(v) 3 4 2 5 1 10 11
PS(v) 8 7 9 6 14 13 12
back(v) 2 2 2 2 1 1 1
a
b
d
f
g
Busca em profundidade
Aplicao 6: Dado um grafo G, determinar as articulaes
e os blocos de G.
Como calcular back(v)
back(v) = min( { PE(v) } U
{ back(w) | w filho de v em T } U
{ PE(w) | vw aresta de retorno } )
Busca em profundidade
Aplicao 6: Dado um grafo G, determinar as articulaes
e os blocos de G.
procedimento P(v) -- com clculo de back(v)
t t + 1; PE(v) t; back(v) PE(v); => inicializao
para todo vrtice w em N(v) faa
se PE(w) = 0
ento visitar vw; pai(w) v;
executar P(w)
back(v) min( back(v), back(w) )
seno se PS(w) = 0 e w pai(v)
ento visitar vw
back(v) min( back(v), PE(w) )
fim-para
t t + 1; PS(v) t
Busca em profundidade
Aplicao 6: Dado um grafo G, determinar as articulaes
e os blocos de G.
Como usar os valores back(v) para determinar as
articulaes
Teorema: Seja T uma rvore de profundidade para um
grafo G. Suponha que os valores PE(v) e back(v) estejam
calculados. Seja v um vrtice qualquer de G.
Se v a raiz de T ento v articulao sss v possui
dois ou mais filhos em T.
Se v no a raiz de T ento v articulao sss existe
pelo menos um filho w de v com back(w) PE(v).
Busca em profundidade
Aplicao 6: Dado um grafo G, determinar as articulaes
e os blocos de G.
procedimento P(v) -- com clculo de back(v) e dos blocos (idia: usar uma pilha)
t t + 1; PE(v) t; back(v) PE(v); => inicializao
para todo vrtice w em N(v) faa
se PE(w) = 0
ento visitar vw; empilhar vw; pai(w) v
executar P(w)
seback(w) PE(v) entodesempilhar e imprimir tudo at vw
back(v) min( back(v), back(w) )
seno se PS(w) = 0 e w pai(v)
ento visitar vw; empilhar vw
back(v) min( back(v), PE(w) )
fim-para
t t + 1; PS(v) t
Busca em profundidade
Aplicao 6: Dado um grafo G, determinar as articulaes
e os blocos de G.
Algumas questes:
Se a busca em profundidade se iniciar por um vrtice
que no articulao, ento a raiz da rvore de
profundidade ter apenas um filho! (veja o Teorema)
Exerccio: Simular a execuo para observar o
comportamento da pilha de arestas.
Exerccio: Fazer pequenos acrscimos no cdigo para
determinar as articulaes e as pontes.
Busca em profundidade
Aplicao 6: Dado um grafo G, determinar as articulaes
e os blocos de G.
Observao:
Um filho w de v que satisfaa back(w) PE(v)
chamado de demarcador de v.
Exerccio: Verificar se cada bloco possui o seu prprio
demarcador. (Se isto for verdade, ento o nmero de
demarcadores igual ao nmero de blocos.)
Busca em profundidade p/ digrafos
I nicializao
t 0 -- t o relgio ou tempo global
para todo vrtice v em V(G) faa
PE(v) 0 -- PE(v) a profundidade de entrada de v
PS (v) 0 -- PS(v) a profundidade de sada de v
pai(v) null -- ponteiros que definem a floresta de profundidade T
Chamada Externa
enquanto existe v em V(G) tal que PE(v) = 0 faa
executar P(v) -- nova raiz da busca
Busca em profundidade p/ digrafos
Procedimento recursivo de busca p/ digrafos
procedimento P(v)
t t + 1; PE(v) t
para todo vrtice w em N
out
(v) faa
se PE(w) = 0 (se w ainda no foi alcanado pela busca)
marcar vw como aresta azul da floresta de profundidade T
ento pai(w) v
executar P(w)
se PS(w) = 0 (se w ainda no saiu da busca)
ento marcar vw como aresta vermelha de retorno
seno seno se PE(v) < PE(w) (se v entrou antes de w na busca)
ento marcar vw como aresta amarela de avano
seno marcar vw como aresta verde cruzamento
fim-para
t t + 1; PS(v) t
fim-do-procedimento
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 0 0 0 0 0 0 0 0 0 0
PS(v) 0 0 0 0 0 0 0 0 0 0
h i
j
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 0 0 0 0 0 0 0 0 0
PS(v) 0 0 0 0 0 0 0 0 0 0
h i
j
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 0 0 0 0 0 0 0 0
PS(v) 0 0 0 0 0 0 0 0 0 0
h i
j
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 0 0 0 0 0 0 0
PS(v) 0 0 0 0 0 0 0 0 0 0
h i
j
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 0 0 0 0 0 0 0
PS(v) 0 0 0 0 0 0 0 0 0 0
h i
j
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 0 0 0 0 0 0 0
PS(v) 0 0 4 0 0 0 0 0 0 0
h i
j
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 0 0 0 0 0 0 0
PS(v) 0 5 4 0 0 0 0 0 0 0
h i
j
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 0 0 0 0 0 0 0
PS(v) 0 5 4 0 0 0 0 0 0 0
h i
j
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 0 0 0 0 0 0
PS(v) 0 5 4 0 0 0 0 0 0 0
h i
j
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 0 0 0 0 0 0
PS(v) 0 5 4 0 0 0 0 0 0 0
h i
j
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 0 0 0 0 0 0
PS(v) 0 5 4 7 0 0 0 0 0 0
h i
j
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 0 0 0 0 0 0
PS(v) 8 5 4 7 0 0 0 0 0 0
h i
j
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 0 0 0 0 0
PS(v) 8 5 4 7 0 0 0 0 0 0
h i
j
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 0 0 0 0 0
PS(v) 8 5 4 7 0 0 0 0 0 0
h i
j
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 0 0 0 0
PS(v) 8 5 4 7 0 0 0 0 0 0
h i
j
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 0 0 0
PS(v) 8 5 4 7 0 0 0 0 0 0
h i
j
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 0 0 0
PS(v) 8 5 4 7 0 0 0 0 0 0
h i
j
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 0 0 0
PS(v) 8 5 4 7 0 0 12 0 0 0
h i
j
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 0 0 0
PS(v) 8 5 4 7 0 13 12 0 0 0
h i
j
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 0 0 0
PS(v) 8 5 4 7 0 13 12 0 0 0
h i
j
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 0 0 0
PS(v) 8 5 4 7 14 13 12 0 0 0
h i
j
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 15 0 0
PS(v) 8 5 4 7 14 13 12 0 0 0
h i
j
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 15 0 0
PS(v) 8 5 4 7 14 13 12 0 0 0
h i
j
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 15 0 0
PS(v) 8 5 4 7 14 13 12 16 0 0
h i
j
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 15 17 0
PS(v) 8 5 4 7 14 13 12 16 0 0
h i
j
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 15 17 18
PS(v) 8 5 4 7 14 13 12 16 0 0
h i
j
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 15 17 18
PS(v) 8 5 4 7 14 13 12 16 0 0
h i
j
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 15 17 18
PS(v) 8 5 4 7 14 13 12 16 0 0
h i
j
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 15 17 18
PS(v) 8 5 4 7 14 13 12 16 0 0
h i
j
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 15 17 18
PS(v) 8 5 4 7 14 13 12 16 0 19
h i
j
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 15 17 18
PS(v) 8 5 4 7 14 13 12 16 20 19
h i
j
Busca em profundidade p/ digrafos
Complexidade da busca em profundidade
para digrafos:
O(n + m)
( onde n = V(G) e m = E(G) )
Busca em profundidade p/ digrafos
Afloresta (direcionada) de profundidade T uma
floresta geradora de G(isto , uma floresta que
alcana todos os vrtices de G); neste caso, todos os
vrtices de G so alcanados pela busca e ficam com
uma PE diferente de zero no final da mesma.
Somente as arestas azuis (ligando pai e filho)
pertencem floresta de profundidade T. As arestas de
retorno (vermelhas), de avano (amarelas) e de
cruzamento (verdes) no pertencem a T.
Busca em profundidade p/ digrafos
Propriedades das arestas de retorno
Toda aresta de retorno fecha um ciclo direcionado.
Toda aresta de retorno liga um vrtice v a um de seus
ancestrais na floresta de profundidade T.
Busca em profundidade p/ digrafos
t
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
a
b
c
d
e
f
g
h
i
j
v a b c d e F g h i j
PE(v) 1 2 3 6 9 10 11 15 17 18
PS(v) 8 5 4 7 14 13 12 16 20 19
Intervalo de vida de um vrtice v : I(v) = [ PE(v) , PS(v) ]
Busca em profundidade p/ digrafos
Caracterizao das arestas da floresta de profundidade
(arestas azuis)
Seja vw aresta de G. Ento:
vw uma aresta da floresta de profundidade
se e somente se
I(v) contm I(w) e, no momento da visita, PE(w) = 0
Busca em profundidade p/ digrafos
Caracterizao das arestas de avano
(arestas amarelas)
Seja vw aresta de G. Ento:
vw uma aresta de avano
se e somente se
I(v) contm I(w) e, no momento da visita, PE(w) 0
Busca em profundidade p/ digrafos
Caracterizao das arestas de retorno
(arestas vermelhas)
Seja vw aresta de G. Ento:
vw uma aresta de retorno
se e somente se
I(v) est contido em I(w)
Busca em profundidade p/ digrafos
Caracterizao das arestas de cruzamento
(arestas verdes)
Seja vw aresta de G. Ento:
vw uma aresta de cruzamento
se e somente se
I(v) est totalmente direita de I(w)
Busca em profundidade p/ digrafos
Aplicao 1: Dado um digrafo G, determinar as
componentes fortemente conexas (cfcs) de G.
Uma componente fortemente conexa de um digrafo
G um subdigrafo H de G que maximal com
relao seguinte propriedade:
Para qualquer par de vrtices v,wde H, existe
em H um caminho direcionado de vpara we um
caminho direcionado de wpara v
Busca em profundidade p/ digrafos
e a
b d
f
c
g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 15 17 18
PS(v) 8 5 4 7 14 13 12 16 20 19
h
i
j
cfc
Busca em profundidade p/ digrafos
Aplicao 1: Dado um digrafo G, determinar as
componentes fortemente conexas de G.
As cfcs de um digrafo G determinam naturalmente
uma partio do conjunto de vrtices de G, isto ,
cada vrtice pertence a uma nica cfc de G.
O mesmo no ocorre em relao s arestas: algumas
arestas no pertencem a nenhuma cfc.
Se aps a busca alguma aresta no pertence a
nenhuma cfc, ento esta aresta pode ser da floresta
de profundidade, ou de avano, ou de
cruzamento.
Busca em profundidade p/ digrafos
Aplicao 1: Dado um digrafo G, determinar as
componentes fortemente conexas de G.
Definio:
Seja T uma floresta de profundidade para o digrafo G.
old(v) = PE do vrtice w mais antigo na busca que esteja
na mesma cfc de v e que possa ser alcanado a partir de v
usando 0 ou mais arestas azuis de T para baixo e, a seguir,
no mximo uma aresta de retorno ou de cruzamento.
Busca em profundidade p/ digrafos
e a
b d
f
c
g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 15 17 18
PS(v) 8 5 4 7 14 13 12 16 20 19
old(v) 1 1 1 3 9 9 9 15 17 17
h
i
j
cfc
Busca em profundidade p/ digrafos
Aplicao 1: Dado um digrafo G, determinar as
componentes fortemente conexas de G.
Como calcular old(v)
old(v) = min( { PE(v) } U
{ old(w) | w filho de v em T } U
{ PE(w) | vw aresta de retorno } U
{ PE(w) | vw aresta de cruzamento
e v,w esto na mesma cfc } )
Busca em profundidade p/ digrafos
procedimento P(v) -- com clculo de old(v) e das cfcs
t t + 1; PE(v) t; old(v) PE(v); => inicializao de old(v)
empilhar v emQ
para todo vrtice w em N
out
(v) faa
se PE(w) = 0
ento marcar vw como aresta da floresta de profundidade
pai(w) v; executar P(w)
executar P(w); old(v) min( old(v), old(w) )
seno se PS(w) = 0
ento marcar vw como aresta de retorno
old(v) min( old(v), PE(w) )
seno se PE(v) < PE(w)
ento marcar vw como aresta de avano
seno marcar vw como aresta de cruzamento
sew estemQ entoold(v)min(old(v), PE(w))
fim-para
t t + 1; PS(v) t
seold(v) = PE(v) entodesempilhar todos os vrtices at v (inclusive) ==>formam cfc!
fim-do-procedimento
Busca em profundidade p/ digrafos
Aplicao 1: Dado um digrafo G, determinar as
componentes fortemente conexas de G.
Vrtices fortes
Um vrtice v forte se old(v) = PE(v) no momento em
que v sai da busca (ltima linha do procedimento de
busca no slide anterior).
Ao encontrar um vrtice forte v, imediatamente
desempilhamos todos os vrtices at v. Os vrtices
desempilhados formam uma nova cfc.
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 0 0 0 0 0 0 0 0 0 0
PS(v) 0 0 0 0 0 0 0 0 0 0
h i
j
Q =
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 0 0 0 0 0 0 0 0 0
PS(v) 0 0 0 0 0 0 0 0 0 0
h i
j
Q ={ a }
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 0 0 0 0 0 0 0 0
PS(v) 0 0 0 0 0 0 0 0 0 0
h i
j
Q ={ a, b }
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 0 0 0 0 0 0 0
PS(v) 0 0 0 0 0 0 0 0 0 0
h i
j
Q ={ a, b, c }
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 0 0 0 0 0 0 0
PS(v) 0 0 0 0 0 0 0 0 0 0
h i
j
Q ={ a, b, c }
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 0 0 0 0 0 0 0
PS(v) 0 0 4 0 0 0 0 0 0 0
old(v)
1
h i
j
Q ={ a, b, c }
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 0 0 0 0 0 0 0
PS(v) 0 5 4 0 0 0 0 0 0 0
old(v)
1 1
h i
j
Q ={ a, b, c }
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 0 0 0 0 0 0 0
PS(v) 0 5 4 0 0 0 0 0 0 0
old(v)
1 1
h i
j
Q ={ a, b, c }
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 0 0 0 0 0 0
PS(v) 0 5 4 0 0 0 0 0 0 0
old(v)
1 1
h i
j
Q ={ a, b, c, d }
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 0 0 0 0 0 0
PS(v) 0 5 4 0 0 0 0 0 0 0
old(v)
1 1
h i
j
Q ={ a, b, c, d }
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 0 0 0 0 0 0
PS(v) 0 5 4 7 0 0 0 0 0 0
old(v)
1 1 3
h i
j
Q ={ a, b, c, d }
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 0 0 0 0 0 0
PS(v) 8 5 4 7 0 0 0 0 0 0
old(v)
1 1 1 3
h i
j
Q ={ a, b, c, d }
Vrtice forte!
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 0 0 0 0 0 0
PS(v) 8 5 4 7 0 0 0 0 0 0
old(v)
1 1 1 3
h i
j
Q =
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 0 0 0 0 0
PS(v) 8 5 4 7 0 0 0 0 0 0
old(v)
1 1 1 3
h i
j
Q ={ e }
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 0 0 0 0 0
PS(v) 8 5 4 7 0 0 0 0 0 0
old(v)
1 1 1 3
h i
j
Q ={ e}
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 0 0 0 0
PS(v) 8 5 4 7 0 0 0 0 0 0
old(v)
1 1 1 3
h i
j
Q ={ e, f }
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 0 0 0
PS(v) 8 5 4 7 0 0 0 0 0 0
old(v)
1 1 1 3
h i
j
Q ={ e, f, g }
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 0 0 0
PS(v) 8 5 4 7 0 0 0 0 0 0
old(v)
1 1 1 3
h i
j
Q ={ e, f, g }
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 0 0 0
PS(v) 8 5 4 7 0 0 12 0 0 0
old(v)
1 1 1 3 9
h i
j
Q ={ e, f, g }
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 0 0 0
PS(v) 8 5 4 7 0 13 12 0 0 0
old(v)
1 1 1 3 9 9
h i
j
Q ={ e, f, g }
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 0 0 0
PS(v) 8 5 4 7 0 13 12 0 0 0
old(v)
1 1 1 3 9 9
h i
j
Q ={ e, f, g }
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 0 0 0
PS(v) 8 5 4 7 14 13 12 0 0 0
old(v)
1 1 1 3 9 9 9
h i
j
Q ={ e, f, g }
Vrtice forte!
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 0 0 0
PS(v) 8 5 4 7 14 13 12 0 0 0
old(v)
1 1 1 3 9 9 9
h i
j
Q =
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 15 0 0
PS(v) 8 5 4 7 14 13 12 0 0 0
old(v)
1 1 1 3 9 9 9
h i
j
Q ={ h}
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 15 0 0
PS(v) 8 5 4 7 14 13 12 0 0 0
old(v)
1 1 1 3 9 9 9
h i
j
Q ={ h }
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 15 0 0
PS(v) 8 5 4 7 14 13 12 16 0 0
old(v)
1 1 1 3 9 9 9 15
h i
j
Q ={ h}
Vrtice forte!
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 15 0 0
PS(v) 8 5 4 7 14 13 12 16 0 0
old(v)
1 1 1 3 9 9 9 15
h i
j
Q =
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 15 17 0
PS(v) 8 5 4 7 14 13 12 16 0 0
old(v)
1 1 1 3 9 9 9 15
h i
j
Q ={ i }
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 15 17 18
PS(v) 8 5 4 7 14 13 12 16 0 0
old(v)
1 1 1 3 9 9 9 15
h i
j
Q ={ i, j }
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 15 17 18
PS(v) 8 5 4 7 14 13 12 16 0 0
old(v)
1 1 1 3 9 9 9 15
h i
j
Q ={ i, j }
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 15 17 18
PS(v) 8 5 4 7 14 13 12 16 0 0
old(v)
1 1 1 3 9 9 9 15
h i
j
Q ={ i, j }
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 15 17 18
PS(v) 8 5 4 7 14 13 12 16 0 0
old(v)
1 1 1 3 9 9 9 15
h i
j
Q ={ i, j }
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 15 17 18
PS(v) 8 5 4 7 14 13 12 16 0 19
old(v)
1 1 1 3 9 9 9 15 17
h i
j
Q ={ i, j }
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 15 17 18
PS(v) 8 5 4 7 14 13 12 16 20 19
old(v)
1 1 1 3 9 9 9 15 17 17
h i
j
Q ={ i, j }
Vrtice forte!
Busca em profundidade p/ digrafos
e a
b d
f
c g
G
v a b c d e f g h i j
PE(v) 1 2 3 6 9 10 11 15 17 18
PS(v) 8 5 4 7 14 13 12 16 20 19
old(v)
1 1 1 3 9 9 9 15 17 17
h i
j
Q = ==> FIM!
Busca em profundidade p/ digrafos
Aplicao 1: Dado um digrafo G, determinar as
componentes fortemente conexas de G.
Observaes finais
A determinao das cfcs obviamente produz sempre
o mesmo resultado, independentemente da ordem de
visita dos vrtices/arestas escolhida para a busca!
Uma aresta vw pode desempenhar um papel em uma
busca e outro papel em outra. Exemplo: vw pode ser
aresta de cruzamento em uma busca e ser de avano
em outra, e assim por diante.
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
Um digrafo G acclicose G no contm ciclos
direcionados.
Uma ordenaotopolgicade um digrafo acclico
G uma ordenao v
1
v
2
v
3
v
n1
v
n
dos vrtices de
G com a seguinte propriedade:
se existe uma aresta em Gde v
i
a v
j
ento i < j
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
Uma ordenao topolgica de G: i j h e f g a b d c
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
Uma ordenao topolgica de G: i j h e f g a b d c
Outra ordenao topolgica de G: e i j h a f g d b c
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
Como decidir se um dado digrafo acclico?
Basta rodar uma busca em profundidade sobre G. Se
esta busca no produzir nenhuma aresta de retorno,
ento G acclico.
Se umabuscasobreG noproduzarestade retorno,
entonenhumaoutrabuscaproduzirarestade
retorno!
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
Aplicaes da ordenao topolgica
Escalonamento de atividades: cada vrtice representa
uma atividade, e cada aresta direcionada de apara b
indica que a atividade bs pode ser executada depois
da atividade a. A ordenao topolgica fornece portanto
uma sequncia vivel para a realizao das atividades.
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
Aplicaes da ordenao topolgica
Escalonamento de tarefas em um nico processador:
cada vrtice representa uma tarefa, e cada aresta
direcionada de apara bindica que a tarefa adeve
enviar um dado para a tarefa b(a tarefa bs pode
iniciar sua execuo depois que a tarefa aenviar o
dado). Dado que existe um nico processador para
executar as tarefas, a ordenao topolgica fornece uma
sequncia de execuo das tarefas no processador.
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
Algoritmo para ordenao topolgica de um digrafo G:
1. Rodar uma busca em profundidade sobre G. Se esta
busca produziu alguma aresta de retorno, ento pare: G
no acclico. Caso contrrio, v para o passo 2.
2. Ordene os valores das profundidades de sada geradas
pela busca em ordem decrescente.
3. Faa v
1
como o vrtice de maior PS, v
2
como o vrtice
de segunda maior PS, e assim por diante.
4. A ordenao v
1
v
2
v
3
v
n1
v
n
obtida no passo 3 uma
ordenao topolgica!
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
v a b c d e f g h i j
PE(v) 0 0 0 0 0 0 0 0 0 0
PS(v) 0 0 0 0 0 0 0 0 0 0
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
v a b c d e f g h i j
PE(v) 0 0 0 0 0 0 0 0 1 0
PS(v) 0 0 0 0 0 0 0 0 0 0
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
v a b c d e f g h i j
PE(v) 0 0 0 0 0 0 0 2 1 0
PS(v) 0 0 0 0 0 0 0 0 0 0
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
v a b c d e f g h i j
PE(v) 0 0 0 0 0 3 0 2 1 0
PS(v) 0 0 0 0 0 0 0 0 0 0
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
v a b c d e f g h i j
PE(v) 0 0 0 0 0 3 4 2 1 0
PS(v) 0 0 0 0 0 0 0 0 0 0
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
v a b c d e f g h i j
PE(v) 0 0 0 0 0 3 4 2 1 0
PS(v) 0 0 0 0 0 0 5 0 0 0
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
v a b c d e f g h i j
PE(v) 0 0 0 0 0 3 4 2 1 0
PS(v) 0 0 0 0 0 6 5 0 0 0
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
v a b c d e f g h i j
PE(v) 0 0 0 0 0 3 4 2 1 0
PS(v) 0 0 0 0 0 6 5 7 0 0
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
v a b c d e f g h i j
PE(v) 0 0 0 0 0 3 4 2 1 8
PS(v) 0 0 0 0 0 6 5 7 0 0
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
v a b c d e f g h i j
PE(v) 0 0 0 0 0 3 4 2 1 8
PS(v) 0 0 0 0 0 6 5 7 0 0
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
v a b c d e f g h i j
PE(v) 0 0 0 0 0 3 4 2 1 8
PS(v) 0 0 0 0 0 6 5 7 0 0
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
v a b c d e f g h i j
PE(v) 0 0 0 0 0 3 4 2 1 8
PS(v) 0 0 0 0 0 6 5 7 0 9
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
v a b c d e f g h i j
PE(v) 0 0 0 0 0 3 4 2 1 8
PS(v) 0 0 0 0 0 6 5 7 10 9
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
v a b c d e f g h i j
PE(v) 0 0 0 0 11 3 4 2 1 8
PS(v) 0 0 0 0 0 6 5 7 10 9
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
v a b c d e f g h i j
PE(v) 0 0 0 0 11 3 4 2 1 8
PS(v) 0 0 0 0 0 6 5 7 10 9
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
v a b c d e f g h i j
PE(v) 0 0 0 0 11 3 4 2 1 8
PS(v) 0 0 0 0 0 6 5 7 10 9
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
v a b c d e f g h i j
PE(v) 0 12 0 0 11 3 4 2 1 8
PS(v) 0 0 0 0 0 6 5 7 10 9
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
v a b c d e f g h i j
PE(v) 0 12 13 0 11 3 4 2 1 8
PS(v) 0 0 0 0 0 6 5 7 10 9
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
v a b c d e f g h i j
PE(v) 0 12 13 0 11 3 4 2 1 8
PS(v) 0 0 14 0 0 6 5 7 10 9
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
v a b c d e f g h i j
PE(v) 0 12 13 0 11 3 4 2 1 8
PS(v) 0 15 14 0 0 6 5 7 10 9
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
v a b c d e f g h i j
PE(v) 0 12 13 0 11 3 4 2 1 8
PS(v) 0 15 14 0 16 6 5 7 10 9
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
v a b c d e f g h i j
PE(v) 17 12 13 0 11 3 4 2 1 8
PS(v) 0 15 14 0 16 6 5 7 10 9
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
v a b c d e f g h i j
PE(v) 17 12 13 18 11 3 4 2 1 8
PS(v) 0 15 14 0 16 6 5 7 10 9
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
v a b c d e f g h i j
PE(v) 17 12 13 18 11 3 4 2 1 8
PS(v) 0 15 14 0 16 6 5 7 10 9
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
v a b c d e f g h i j
PE(v) 17 12 13 18 11 3 4 2 1 8
PS(v) 0 15 14 19 16 6 5 7 10 9
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
v a b c d e f g h i j
PE(v) 17 12 13 18 11 3 4 2 1 8
PS(v) 0 15 14 19 16 6 5 7 10 9
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
v a b c d e f g h i j
PE(v) 17 12 13 18 11 3 4 2 1 8
PS(v) 20 15 14 19 16 6 5 7 10 9
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
v a b c d e f g h i j
PS(v) 20 15 14 19 16 6 5 7 10 9
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
v a d e b c i j h f g
PS(v) 20 19 16 15 14 10 9 7 6 5
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
a d e b c i j h f g
Ordenao topolgica
v
1
v
2
v
3
v
4
v
5
v
6
v
7
v
8
v
9
v
10
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
a d e b c i j h f g
Ordenao topolgica
Por que este algoritmo funciona corretamente?
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
a d e b c i j h f g
Ordenao topolgica
Note que o vrtice com a menor PS um sumidouro
(vrtice com grau de sada igual a zero)
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
a d e b c i j h f g
Ordenao topolgica
Portanto, a posio deste vrtice est correta na
ordenao topolgica, pois dele no partem arestas
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
a d e b c i j h f g
Ordenao topolgica
A posio de f tambm est correta, pois
f um sumidouro no digrafoG g
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
e a
b d
f
c g
G
(digrafoacclico)
h i
j
a d e b c i j h f g
Ordenao topolgica
Aplicando sucessivamente este raciocnio, cada vrtice
v
i
um sumidouro no digrafoG {v
i+1
, v
i+2
, ,v
n
}
v
1
v
2
v
3
v
4
v
5
v
6
v
7
v
8
v
9
v
10
Busca em profundidade p/ digrafos
Aplicao 2: Dado um digrafo acclico G, obter uma
ordenao topolgica de G.
Complexidade do algoritmo para ordenao topolgica
de um digrafo G.
Rodar uma busca em profundidade sobre G tem
complexidade O(n + m).
Cada vez que um vrtice sai da busca (recebe uma PS
diferente de zero), colocado imediatamente esquerda
da ordenao topolgica sendo construda. Isto dispensa
o passo de ordenao das PSs.
Portanto, a complexidade final O(n + m).
Busca em profundidade p/ digrafos
Exerccio: Desenvolver um algoritmo alternativo para
obter uma ordenao topolgica de um digrafo acclico G.
Idia: todo digrafo acclico possui um sumidouro!
(para provar este fato, basta ver que qualquer caminho
orientado de comprimento mximo em um digrafo
acclico termina necessariamente em um sumidouro)
Realizar a seguinte iterao, at que no haja mais
vrtices: localizar um sumidouro, retir-lo do digrafo
e coloc-lo esquerda na ordenao sendo
construda.
possvel implementar a idia acima em tempo
linear ? (isto , O(n + m) ?)
Busca em profundidade p/ digrafos
Exerccio: Desenvolver um algoritmo alternativo para
obter uma ordenao topolgica de um digrafo acclico G.
e a
b d
f
c g
h i
j
Busca em profundidade p/ digrafos
Exerccio: Desenvolver um algoritmo alternativo para
obter uma ordenao topolgica de um digrafo acclico G.
e a
b d
f
c g
h i
j
Busca em profundidade p/ digrafos
Exerccio: Desenvolver um algoritmo alternativo para
obter uma ordenao topolgica de um digrafo acclico G.
e a
b d
f
g
h i
j
c
Busca em profundidade p/ digrafos
Exerccio: Desenvolver um algoritmo alternativo para
obter uma ordenao topolgica de um digrafo acclico G.
e a
b d
f
g
h i
j
c
Busca em profundidade p/ digrafos
Exerccio: Desenvolver um algoritmo alternativo para
obter uma ordenao topolgica de um digrafo acclico G.
e a
b
f
g
h i
j
d c
Busca em profundidade p/ digrafos
Exerccio: Desenvolver um algoritmo alternativo para
obter uma ordenao topolgica de um digrafo acclico G.
e a
b
f
g
h i
j
d c
Busca em profundidade p/ digrafos
Exerccio: Desenvolver um algoritmo alternativo para
obter uma ordenao topolgica de um digrafo acclico G.
e a
b
f
h i
j
g d c
Busca em profundidade p/ digrafos
Exerccio: Desenvolver um algoritmo alternativo para
obter uma ordenao topolgica de um digrafo acclico G.
e a
b
f
h i
j
gd c
Busca em profundidade p/ digrafos
Exerccio: Desenvolver um algoritmo alternativo para
obter uma ordenao topolgica de um digrafo acclico G.
e
b
f
h i
j
ag d c
Busca em profundidade p/ digrafos
Exerccio: Desenvolver um algoritmo alternativo para
obter uma ordenao topolgica de um digrafo acclico G.
e
b
f
h i
j
ag d c
Busca em profundidade p/ digrafos
Exerccio: Desenvolver um algoritmo alternativo para
obter uma ordenao topolgica de um digrafo acclico G.
e
f
h i
j
b a g d c
Busca em profundidade p/ digrafos
Exerccio: Desenvolver um algoritmo alternativo para
obter uma ordenao topolgica de um digrafo acclico G.
e
f
h i
j
b a g d c
Busca em profundidade p/ digrafos
Exerccio: Desenvolver um algoritmo alternativo para
obter uma ordenao topolgica de um digrafo acclico G.
e h i
j
f b a g d c
Busca em profundidade p/ digrafos
Exerccio: Desenvolver um algoritmo alternativo para
obter uma ordenao topolgica de um digrafo acclico G.
e h i
j
f b a g d c
Busca em profundidade p/ digrafos
Exerccio: Desenvolver um algoritmo alternativo para
obter uma ordenao topolgica de um digrafo acclico G.
e
i
j
h f b a g d c
Busca em profundidade p/ digrafos
Exerccio: Desenvolver um algoritmo alternativo para
obter uma ordenao topolgica de um digrafo acclico G.
e
i
j
h f b a g d c
Busca em profundidade p/ digrafos
Exerccio: Desenvolver um algoritmo alternativo para
obter uma ordenao topolgica de um digrafo acclico G.
i
j
e h f b a g d c
Busca em profundidade p/ digrafos
Exerccio: Desenvolver um algoritmo alternativo para
obter uma ordenao topolgica de um digrafo acclico G.
i
j
e h f b a g d c
Busca em profundidade p/ digrafos
Exerccio: Desenvolver um algoritmo alternativo para
obter uma ordenao topolgica de um digrafo acclico G.
i
j e h f b a g d c
Busca em profundidade p/ digrafos
Exerccio: Desenvolver um algoritmo alternativo para
obter uma ordenao topolgica de um digrafo acclico G.
i
j e h f b a g d c
Busca em profundidade p/ digrafos
Exerccio: Desenvolver um algoritmo alternativo para
obter uma ordenao topolgica de um digrafo acclico G.
i j e h f b a g d c
Busca em profundidade p/ digrafos
Exerccio: Desenvolver um algoritmo alternativo para
obter uma ordenao topolgica de um digrafo acclico G.
i j e h f b a g d c
Ordenao topolgica!
e a
b d
f
c g
h i
j
Busca em largura
I nicializao
t 0 -- t o relgio ou tempo global
F -- fila auxiliar para a busca em largura
para todo vrtice v em V(G) faa
L(v) 0 -- L(v) o ndice de v na busca em largura
pai(v) null -- ponteiros que definem a floresta de largura
Para que a busca atinja todos os vrtices, no caso de G ser desconexo:
enquanto existe v em V(G) tal que L(v) = 0 faa
nivel(v) 0 -- como v uma nova raiz, seu nvel igual a 0
t t + 1; L(v) t
colocar v na fila F
realizar a busca em largura
fim-enquanto
Busca em largura
Algoritmo iterativo para a busca em largura:
enquanto F faa
v primeiro elemento de F
retirar v de F
para todo vrtice w em N(v) faa
se L(w) = 0
ento visitar aresta vw --aresta pai da floresta de largura T
pai(w) v --v o pai de w na floresta de largura T
nvel(w) nvel(v)+1; t t + 1; L(w) t
colocar w no final da fila F
seno se nvel(w) = nvel(v)
ento se pai(w) = pai(v)
ento vw aresta irmo
seno vw aresta primo
seno se nvel(w) = nvel(v)+1
ento vw aresta tio
fim-para
fim-enquanto
visitar a aresta
somente se w
ainda est em F
Busca em largura
a
c
b
e
g
d
f
G
v a b c d e f g h
L(v) 0 0 0 0 0 0 0 0
h
F =
Busca em largura
a
c
b
e
g
d
f
G
v a b c d e f g h
L(v) 1 0 0 0 0 0 0 0
h
F =a
Busca em largura
a
c
b
e
g
d
f
G
v a b c d e f g h
L(v) 1 0 0 0 0 0 0 0
h
F =a
Busca em largura
a
c
b
e
g
d
f
G
v a b c d e f g h
L(v) 1 2 0 0 0 0 0 0
h
F =a b
Busca em largura
a
c
b
e
g
d
f
G
v a b c d e f g h
L(v) 1 2 3 0 0 0 0 0
h
F =a b c
Busca em largura
a
c
b
e
g
d
f
G
v a b c d e f g h
L(v) 1 2 3 0 0 0 0 0
h
F =a b c
Busca em largura
a
c
b
e
g
d
f
G
v a b c d e f g h
L(v) 1 2 3 4 0 0 0 0
h
F =a b c d
Busca em largura
a
c
b
e
g
d
f
G
v a b c d e f g h
L(v) 1 2 3 4 0 0 0 0
h
F =a b c d
Busca em largura
a
c
b
e
g
d
f
G
v a b c d e f g h
L(v) 1 2 3 4 0 0 0 0
h
F =a b c d
Busca em largura
a
c
b
e
g
d
f
G
v a b c d e f g h
L(v) 1 2 3 4 0 0 0 0
h
F =a b c d
Busca em largura
a
c
b
e
g
d
f
G
v a b c d e f g h
L(v) 1 2 3 4 5 0 0 0
h
F =a b c d e
Busca em largura
a
c
b
e
g
d
f
G
v a b c d e f g h
L(v) 1 2 3 4 5 0 0 0
h
F =a b c d e
Busca em largura
a
c
b
e
g
d
f
G
v a b c d e f g h
L(v) 1 2 3 4 5 6 0 0
h
F =a b c d e f
Busca em largura
a
c
b
e
g
d
f
G
v a b c d e f g h
L(v) 1 2 3 4 5 6 7 0
h
F =a b c d e f g
Busca em largura
a
c
b
e
g
d
f
G
v a b c d e f g h
L(v) 1 2 3 4 5 6 7 0
h
F =a b c d e f g
Busca em largura
a
c
b
e
g
d
f
G
v a b c d e f g h
L(v) 1 2 3 4 5 6 7 0
h
F =a b c d e f g
Busca em largura
a
c
b
e
g
d
f
G
v a b c d e f g h
L(v) 1 2 3 4 5 6 7 0
h
F =a b c d e f g
Busca em largura
a
c
b
e
g
d
f
G
v a b c d e f g h
L(v) 1 2 3 4 5 6 7 8
h
F =a b c d e f g h
Busca em largura
a
c
b
e
g
d
f
G
v a b c d e f g h
L(v) 1 2 3 4 5 6 7 8
h
F =a b c d e f g h
Busca em largura
a
c
b
e
g
d
f
G
v a b c d e f g h
L(v) 1 2 3 4 5 6 7 8
h
F =a b c d e f g h
Busca em largura
a
c
b
e
g
d
f
G
v a b c d e f g h
L(v) 1 2 3 4 5 6 7 8
h
F =a b c d e f g h
Busca em largura
a
c
b
e
g
d
f
G
v a b c d e f g h
L(v) 1 2 3 4 5 6 7 8
h
F =a b c d e f g h
Busca em largura
a
c
b
e
g
d
f
G
v a b c d e f g h
L(v) 1 2 3 4 5 6 7 8
h
F =a b c d e f g h
Busca em largura
Esgotar o pai antes de processar os filhos
A prxima aresta a ser visitada parte sempre do
vrtice mais antigo na busca
Busca em largura
Complexidade da busca em largura:
O(n + m)
( onde n = V(G) e m = E(G) )
Busca em largura
Afloresta de largura T uma floresta geradora de G
(isto , uma floresta que alcana todos os vrtices de
G); neste caso, todos os vrtices de G so alcanados
pela busca e ficam com um valor L(v) diferente de zero
no final da mesma.
Somente as arestas-pai (azuis) (ligando pai e filho)
pertencem floresta de profundidade T. As arestas-
irmo(vermelhas), primo(amarelas) e tio(verdes)
no pertencem a T.
Busca em largura
Caracterizao das arestas-pai (arestas azuis)
Seja vw aresta de G. Ento:
vw uma aresta-pai (da floresta de largura)
se e somente se
nvel(w) = nvel(v) +1 e, no momento da visita, L(w) = 0
Busca em largura
Caracterizao das arestas-tio (arestas verdes)
Seja vw aresta de G. Ento:
vw uma aresta-tio
se e somente se
nvel(w) = nvel(v) +1 e, no momento da visita, L(w) 0
Busca em largura
Caracterizao das arestas-irmo (arestas vermelhas)
Seja vw aresta de G. Ento:
vw uma aresta-irmo
se e somente se
nvel(w) = nvel(v) e pai(w) = pai(v)
Busca em largura
Caracterizao das arestas-primo (arestas amarelas)
Seja vw aresta de G. Ento:
vw uma aresta-primo
se e somente se
nvel(w) = nvel(v) e pai(w) pai(v)
Busca em largura
Propriedadefundamental da buscaemlargura
Seja vw uma aresta de um grafo G, e seja T uma floresta de
largura de G. Ento:
| nvel(v) nvel(w) | 1.
A demonstrao dessa propriedade se reduz ao caso em
que vw uma aresta-tio em relao a T.
Os vrtices que se encontram em F em qualquer
momento da busca diferem em no mximo um nvel!
Busca em largura
Aplicao 1: Dado um grafo conexo G e um vrtice x de
G, determinar as distncias de x a todos os demais vrtices.
Soluo:
Aplicar uma busca em largura em G com raiz x,
obtendo uma rvore de largura T
Ao final da busca, dist(x, v) = nvel(v), para todo v
Um caminho mnimo de x a v dado pelo caminho de x
a v na rvore T.
Busca em largura
Aplicao 2: Dado um labirinto representado por uma
matriz, determinar o menor caminho da entrada at a sada
do labirinto (se existir).
Soluo:
Modelar a matriz como um grafo, onde a entrada e a
sada so representadas por vrtices x e y.
Realizar uma busca em largura em G com uma nica
raiz x, obtendo uma rvore de largura T.
Ao final da busca, se L(y) 0 ento y pode ser
alcanado a partir de x.
O caminho de x a y em T a soluo, e dist(x, y) =
nvel(y).
Busca em largura
Aplicao 3: Dado um grafo G, determinar se G
bipartido.
Soluo:
Aplicar uma busca em largura em G uma raiz qualquer,
obtendo uma floresta de largura T.
Ao final da busca, G bipartido se e somente se T no
contm arestas-irmonem arestas-primo.
Note que arestas-irmo e arestas-primo fecham ciclos
mpares!
Para definir uma 2-colorao de G: os vrtices em
nveis pares recebem uma cor, e os vrtices em nveis
mpares outra cor.
Busca em largura
Exerccio: Elaborar um mtodo (algoritmo) para resolver a
seguinte questo: Dado um grafo conexo G e uma rvore
geradora T de G, decidir se T uma rvore de largura para
G. Isto , decidir se existe uma busca em largura em G que
produza T como rvore de largura.
Busca em largura
Exerccio: Elaborar uma adaptao da busca em largura,
para aplic-la a digrafos.
Busca em largura
Exerccio: Mostre que o algoritmo a seguir funciona como
uma busca em profundidade se a estrutura de dados D for
uma pilha, e como uma busca em largura se a estrutura de
dados D for uma fila.
desmarcar todos os vrtices
escolher uma raiz v; pai(v) null; marcar v; inserir v em D
enquanto D faa
seja v o primeiro elemento de D
se existe w em N(v) que esteja desmarcado
ento visitar aresta vw
pai(w) v
marcar w
inserir w em D
seno remover v de D
fim-enquanto
Algoritmo de Dijkstra
Problema: Dado um digrafo G com pesos positivos nas
arestas, determinar caminhos mnimos de um vrtice v a
todos os demais vrtices do digrafo.
G
a
b
c
d e
1
2
1
1
1
2
6
3
3
3
1
a b c d e
a 0 1 3 6
b 0 1 3
c 1 2 0 1
d 3 0 2
e 1 0
matriz de pesos W
0, se x =y
W(x, y) = peso da aresta xy, se houver (x y)
, se no houver aresta xy(x y)
Algoritmo de Dijkstra
Realizando uma adaptao no algoritmo do exerccio
anterior, e fazendo com que a estrutura de dados D seja
uma fila de prioridades (heap), obtemos o Algoritmo de
Dijkstra.
desmarcar todos os vrtices; escolher uma raiz v; L(v) 0; pai(v) null; inserir v em D
para todo w em V(G)\{v} faa L(w) e pai(w) null
enquanto D faa
seja v o primeiro elemento de D -- v elemento de menor valor L(v)
remover v de D; marcar v
para todo vrtice w em N
out
(v) que esteja desmarcado faa
se w no pertence a D ento inserir w em D com prioridade L(w)
se L(v) + W(v, w) < L(w)
ento L(w) L(v) + W(v, w)
reposicionar w em D (de acordocom suanova prioridade)
pai(w) v
fim-para
fim-enquanto
Algoritmo de Dijkstra
G
a
b
c
d e
1
2
1
1
1
2
6
3
3
3
1
v a b c d e
L(v) 0
pai(v) null null null null null
raiz: a
Algoritmo de Dijkstra
G
a
b
c
d e
1
2
1
1
1
2
6
3
3
3
1
raiz: a
v a b c d e
L(v) 0
pai(v) null null null null null
Algoritmo de Dijkstra
G
a
b
c
d e
1
2
1
1
1
2
6
3
3
3
1
v a b c d e
L(v) 0
pai(v) null null null null null
raiz: a
Algoritmo de Dijkstra
G
a
b
c
d e
1
2
1
1
1
2
6
3
3
3
1
raiz: a
v a b c d e
L(v) 0 1
pai(v) null a null null null
Algoritmo de Dijkstra
G
a
b
c
d e
1
2
1
1
1
2
6
3
3
3
1
raiz: a
v a b c d e
L(v) 0 1 3
pai(v) null a a null null
Algoritmo de Dijkstra
G
a
b
c
d e
1
2
1
1
1
2
6
3
3
3
1
raiz: a
v a b c d e
L(v) 0 1 3 6
pai(v) null a a null a
Algoritmo de Dijkstra
G
a
b
c
d e
1
2
1
1
1
2
6
3
3
3
1
raiz: a
v a b c d e
L(v) 0 1 3 6
pai(v) null a a null a
Algoritmo de Dijkstra
G
a
b
c
d e
1
2
1
1
1
2
6
3
3
3
1
raiz: a
v a b c d e
L(v) 0 1 3 6
pai(v) null a a null a
Algoritmo de Dijkstra
G
a
b
c
d e
1
2
1
1
1
2
6
3
3
3
1
raiz: a
v a b c d e
L(v) 0 1 3 6
pai(v) null a a null a
Algoritmo de Dijkstra
G
a
b
c
d e
1
2
1
1
1
2
6
3
3
3
1
raiz: a
v a b c d e
L(v) 0 1 2 6
pai(v) null a b null a
Algoritmo de Dijkstra
G
a
b
c
d e
1
2
1
1
1
2
6
3
3
3
1
raiz: a
v a b c d e
L(v) 0 1 2 4 6
pai(v) null a b b a
Algoritmo de Dijkstra
G
a
b
c
d e
1
2
1
1
1
2
6
3
3
3
1
raiz: a
v a b c d e
L(v) 0 1 2 4 6
pai(v) null a b b a
Algoritmo de Dijkstra
G
a
b
c
d e
1
2
1
1
1
2
6
3
3
3
1
raiz: a
v a b c d e
L(v) 0 1 2 4 6
pai(v) null a b b a
Algoritmo de Dijkstra
G
a
b
c
d e
1
2
1
1
1
2
6
3
3
3
1
raiz: a
v a b c d e
L(v) 0 1 2 4 6
pai(v) null a b b a
Algoritmo de Dijkstra
G
a
b
c
d e
1
2
1
1
1
2
6
3
3
3
1
raiz: a
v a b c d e
L(v) 0 1 2 3 6
pai(v) null a b c a
Algoritmo de Dijkstra
G
a
b
c
d e
1
2
1
1
1
2
6
3
3
3
1
raiz: a
v a b c d e
L(v) 0 1 2 3 6
pai(v) null a b c a
Algoritmo de Dijkstra
G
a
b
c
d e
1
2
1
1
1
2
6
3
3
3
1
raiz: a
v a b c d e
L(v) 0 1 2 3 6
pai(v) null a b c a
Algoritmo de Dijkstra
G
a
b
c
d e
1
2
1
1
1
2
6
3
3
3
1
raiz: a
v a b c d e
L(v) 0 1 2 3 6
pai(v) null a b c a
Algoritmo de Dijkstra
G
a
b
c
d e
1
2
1
1
1
2
6
3
3
3
1
raiz: a
v a b c d e
L(v) 0 1 2 3 5
pai(v) null a b c d
Algoritmo de Dijkstra
G
a
b
c
d e
1
2
1
1
1
2
6
3
3
3
1
raiz: a
v a b c d e
L(v) 0 1 2 3 5
pai(v) null a b c d
Algoritmo de Dijkstra
G
a
b
c
d e
1
2
1
1
1
2
6
3
3
3
1
raiz: a
v a b c d e
L(v) 0 1 2 3 5
pai(v) null a b c d
Algoritmo de Dijkstra
G
a
b
c
d e
1
2
1
1
1
2
6
3
3
3
1
raiz: a
v a b c d e
L(v) 0 1 2 3 5
pai(v) null a b c d
Algoritmo de Dijkstra
G
a
b
c
d e
1
2
1
1
1
2
6
3
3
3
1
raiz: a
v a b c d e
L(v) 0 1 2 3 5
pai(v) null a b c d
FI M!
Algoritmo de Dijkstra
Complexidade
A complexidade do Algoritmo de Dijkstra dominada pelas
seguintes operaes:
n remoes da estrutura D -- O(n log n)
n inseres na estrutura D -- O(n log n)
no mximo m atualizaes de prioridade (rtulos L(v))
na estrutura D -- O(m log n)
TOTAL: O( (n + m) log n)
Algoritmo de Dijkstra
Questo: Como determinar os caminhos mnimos?
Soluo: Observe que os ponteiros pai(w) determinam
naturalmente uma rvore T, chamada de rvorede
caminhosmnimos(a partir da raiz escolhida). Na
simulao, esta rvore T est formada pelas arestas azuis.
Para determinar um caminho mnimo da raiz v at um
vrtice w, basta tomar o caminho de v a w em T. O custo
deste caminho precisamente L(w).
Algoritmo de Dijkstra
Questo: Como achar os caminhos mnimos da raiz a
todos os demais vrtices em um grafo G no direcionado?
Soluo: Basta transformar G em um digrafo H da seguinte
forma: fazer V(H) = V(G) e, para cada aresta no
direcionada xy com peso p em G, criar em H duas arestas
direcionadas xye yx, ambas com peso p. Por outro lado, se
no existe aresta xy em G, criar em H duas arestas
direcionadas xye yxcom peso . Basta ento aplicar o
algoritmo de Dijkstra a H.
Algoritmo de Dijkstra
Exerccio: Mostre que o Algoritmo de Dijkstra se
comporta como uma busca em largura se os pesos de todas
as arestas so iguais a um. Neste caso, a rvore de
caminhos mnimos uma rvore de largura, e cada rtulo
L(w) igual distncia (em arestas) da raiz at w.
Algoritmo de Floyd-Warshall
Problema: Dado um digrafo G com pesos positivos nas
arestas, determinar caminhos mnimos entre todos os pares
ordenados (v, w) de vrtices do digrafo.
A entrada para este problema a mesma do anterior.
G
1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1
4 3 0 2
5 1 0
matriz de pesos W
0, se i =j
W(i, j) = peso da aresta ij, se houver (i j)
, se no houver aresta ij (i j)
Algoritmo de Floyd-Warshall
G
1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
1 2 3 4 5
1 0 1 2 3 5
2 2 0 1 2 4
3 1 2 0 1 3
4 3 4 5 0 2
5 4 5 6 1 0
Matriz-soluo: custos de todos os caminhos mnimos
Problema: Dado um digrafo G com pesos positivos nas
arestas, determinar caminhos mnimos entre todos os pares
ordenados (v, w) de vrtices do digrafo.
A entrada para este problema a mesma do anterior.
Algoritmo de Floyd-Warshall
Ideia do algoritmo: Calcular os valores D
k
(i, j)
D
k
(i, j) = custo do caminho mnimo de i a j podendo usar
como vrtices intermedirios os vrtices do conjunto
{1, 2,, k} \ {i, j}.
Observe que:
D
0
(i, j) = W(i, j)
(valor na posio (i, j) da matriz de pesos W )
D
n
(i, j) = custodocaminhomnimodei aj
(valor na posio (i, j) da matriz-soluo)
Algoritmo de Floyd-Warshall
Ideia do algoritmo: Calcular os valores D
k
(i, j)
Definindoasmatrizesdoalgoritmo:
Para cada k = 0, 1, 2, , n, defina D
k
como a matriz
contendo todos os valores D
k
(i, j)
Observe que:
D
0
= W (matriz de pesos da entrada)
D
n
= matriz-soluo
Algoritmo de Floyd-Warshall
Ideia do algoritmo: Calcular os valores D
k
(i, j)
Esboodoalgoritmo:
inicializar D
0
W
para cada k = 1, 2, , n faa
calcular a matriz D
k
Algoritmo de Floyd-Warshall
Ideia do algoritmo: Calcular os valores D
k
(i, j)
Esboodoalgoritmo:
inicializar D
0
W
para cada k = 1, 2, , n faa
calcular a matriz D
k
Clculoda matrizD
k
:
para cada i = 1, 2, , n faa
para cada j = 1, 2, , n faa
calcular D
k
(i, j)
Algoritmo de Floyd-Warshall
Ideia do algoritmo: Calcular os valores D
k
(i, j)
Esboodoalgoritmo:
inicializar D
0
W
para cada k = 1, 2, , n faa
para cada i = 1, 2, , n faa
para cada j = 1, 2, , n faa
calcular D
k
(i, j)
Algoritmo de Floyd-Warshall
Ideia do algoritmo: Calcular os valores D
k
(i, j)
Frmulaparacalcular D
k
(i, j):
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
Algoritmo de Floyd-Warshall
Ideia do algoritmo: Calcular os valores D
k
(i, j)
Frmulaparacalcular D
k
(i, j):
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
custodo caminhomnimode i a j
semconsiderar k
comovrticeintermedirio
(valor da iteraoanterior)
Algoritmo de Floyd-Warshall
Ideia do algoritmo: Calcular os valores D
k
(i, j)
Frmulaparacalcular D
k
(i, j):
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
custodo caminhomnimode i a j
semconsiderar k
comovrticeintermedirio
(valor da iteraoanterior)
custodo caminhomnimode i a j
considerandok
comovrticeintermedirio
(nova possibilidade)
Algoritmo de Floyd-Warshall
Ideia do algoritmo: Calcular os valores D
k
(i, j)
Frmulaparacalcular D
k
(i, j):
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
custodo caminhomnimode i a j
semconsiderar k
comovrticeintermedirio
(valor da iteraoanterior)
custodo caminhomnimode i a j
considerandok
comovrticeintermedirio
(nova possibilidade)
i
j
k D
k-1
(i, k)
D
k-1
(k, j)
Algoritmo de Floyd-Warshall
Ideia do algoritmo: Calcular os valores D
k
(i, j)
Esboodoalgoritmo:
inicializar D
0
W
para cada k = 1, 2, , n faa
para cada i = 1, 2, , n faa
para cada j = 1, 2, , n faa
calcular D
k
(i, j)
Algoritmo de Floyd-Warshall
Ideia do algoritmo: Calcular os valores D
k
(i, j)
Esboodoalgoritmo:
inicializar D
0
W
para cada k = 1, 2, , n faa
para cada i = 1, 2, , n faa
para cada j = 1, 2, , n faa
D
k
(i, j) min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
Algoritmo de Floyd-Warshall
Ideia do algoritmo: Calcular os valores D
k
(i, j)
Esboodoalgoritmo:
inicializar D
0
W
para cada k = 1, 2, , n faa
para cada i = 1, 2, , n faa
para cada j = 1, 2, , n faa
D
k
(i, j) min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
Note que D
k
calculada
apenas a partir de D
k-1
!
Algoritmo de Floyd-Warshall
Ideia do algoritmo: Calcular os valores D
k
(i, j)
Esboodoalgoritmo:
inicializar D
0
W
para cada k = 1, 2, , n faa
para cada i = 1, 2, , n faa
para cada j = 1, 2, , n faa
D
k
(i, j) min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
O(n
3
)
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de D
k
a partir de D
k-1
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
D
0
1 2 3 4 5
1
2
3
4
5
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1
4 3 0 2
5 1 0
D
1
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de D
k
a partir de D
k-1
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
D
0
1 2 3 4 5
1 0
2
3
4
5
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1
4 3 0 2
5 1 0
D
1
D
1
(1, 1) = min { D
0
(1, 1) , D
0
(1, 1) + D
0
(1, 1) }
0 0 0
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de D
k
a partir de D
k-1
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
D
0
1 2 3 4 5
1 0 1
2
3
4
5
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1
4 3 0 2
5 1 0
D
1
D
1
(1, 2) = min { D
0
(1, 2) , D
0
(1, 1) + D
0
(1, 2) }
1 0 1
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de D
k
a partir de D
k-1
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
D
0
1 2 3 4 5
1 0 1 3
2
3
4
5
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1
4 3 0 2
5 1 0
D
1
D
1
(1, 3) = min { D
0
(1, 3) , D
0
(1, 1) + D
0
(1, 3) }
3 0 3
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de D
k
a partir de D
k-1
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
D
0
1 2 3 4 5
1 0 1 3
2
3
4
5
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1
4 3 0 2
5 1 0
D
1
D
1
(1, 4) = min { D
0
(1, 4) , D
0
(1, 1) + D
0
(1, 4) }
0
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de D
k
a partir de D
k-1
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
D
0
1 2 3 4 5
1 0 1 3 6
2
3
4
5
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1
4 3 0 2
5 1 0
D
1
D
1
(1, 5) = min { D
0
(1, 5) , D
0
(1, 1) + D
0
(1, 5) }
6 0 6
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de D
k
a partir de D
k-1
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
D
0
1 2 3 4 5
1 0 1 3 6
2
3
4
5
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1
4 3 0 2
5 1 0
D
1
D
1
(2, 1) = min { D
0
(2, 1) , D
0
(2, 1) + D
0
(1, 1) }
0
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de D
k
a partir de D
k-1
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
D
0
1 2 3 4 5
1 0 1 3 6
2 0
3
4
5
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1
4 3 0 2
5 1 0
D
1
D
1
(2, 2) = min { D
0
(2, 2) , D
0
(2, 1) + D
0
(1, 2) }
0 1
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de D
k
a partir de D
k-1
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
D
0
1 2 3 4 5
1 0 1 3 6
2 0 1
3
4
5
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1
4 3 0 2
5 1 0
D
1
D
1
(2, 3) = min { D
0
(2, 3) , D
0
(2, 1) + D
0
(1, 3) }
1 3
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de D
k
a partir de D
k-1
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
D
0
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3
4
5
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1
4 3 0 2
5 1 0
D
1
D
1
(2, 4) = min { D
0
(2, 4) , D
0
(2, 1) + D
0
(1, 4) }
3
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de D
k
a partir de D
k-1
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
D
0
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3
4
5
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1
4 3 0 2
5 1 0
D
1
D
1
(2, 5) = min { D
0
(2, 5) , D
0
(2, 1) + D
0
(1, 5) }
6
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de D
k
a partir de D
k-1
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
D
0
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1
4
5
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1
4 3 0 2
5 1 0
D
1
D
1
(3, 1) = min { D
0
(3, 1) , D
0
(3, 1) + D
0
(1, 1) }
1 1 0
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de D
k
a partir de D
k-1
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
D
0
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2
4
5
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1
4 3 0 2
5 1 0
D
1
D
1
(3, 2) = min { D
0
(3, 2) , D
0
(3, 1) + D
0
(1, 2) }
2 1 1
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de D
k
a partir de D
k-1
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
D
0
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0
4
5
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1
4 3 0 2
5 1 0
D
1
D
1
(3, 3) = min { D
0
(3, 3) , D
0
(3, 1) + D
0
(1, 3) }
0 1 3
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de D
k
a partir de D
k-1
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
D
0
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1
4
5
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1
4 3 0 2
5 1 0
D
1
D
1
(3, 4) = min { D
0
(3, 4) , D
0
(3, 1) + D
0
(1, 4) }
1 1
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de D
k
a partir de D
k-1
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
D
0
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1 7
4
5
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1
4 3 0 2
5 1 0
D
1
D
1
(3, 5) = min { D
0
(3, 5) , D
0
(3, 1) + D
0
(1, 5) }
1 6
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de D
k
a partir de D
k-1
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
D
0
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1 7
4 3
5
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1
4 3 0 2
5 1 0
D
1
D
1
(4, 1) = min { D
0
(4, 1) , D
0
(4, 1) + D
0
(1, 1) }
3 3 0
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de D
k
a partir de D
k-1
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
D
0
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1 7
4 3 4
5
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1
4 3 0 2
5 1 0
D
1
D
1
(4, 2) = min { D
0
(4, 2) , D
0
(4, 1) + D
0
(1, 2) }
3 1
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de D
k
a partir de D
k-1
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
D
0
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1 7
4 3 4 6
5
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1
4 3 0 2
5 1 0
D
1
D
1
(4, 3) = min { D
0
(4, 3) , D
0
(4, 1) + D
0
(1, 3) }
3 3
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de D
k
a partir de D
k-1
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
D
0
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1 7
4 3 4 6 0
5
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1
4 3 0 2
5 1 0
D
1
D
1
(4, 4) = min { D
0
(4, 4) , D
0
(4, 1) + D
0
(1, 4) }
0 3
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de D
k
a partir de D
k-1
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
D
0
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1 7
4 3 4 6 0 2
5
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1
4 3 0 2
5 1 0
D
1
D
1
(4, 5) = min { D
0
(4, 5) , D
0
(4, 1) + D
0
(1, 5) }
2 3 6
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de D
k
a partir de D
k-1
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
D
0
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1 7
4 3 4 6 0 2
5
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1
4 3 0 2
5 1 0
D
1
D
1
(5, 1) = min { D
0
(5, 1) , D
0
(5, 1) + D
0
(1, 1) }
0
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de D
k
a partir de D
k-1
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
D
0
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1 7
4 3 4 6 0 2
5
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1
4 3 0 2
5 1 0
D
1
D
1
(5, 2) = min { D
0
(5, 2) , D
0
(5, 1) + D
0
(1, 2) }
1
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de D
k
a partir de D
k-1
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
D
0
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1 7
4 3 4 6 0 2
5 1 0
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1
4 3 0 2
5 1 0
D
1
D
1
(5, 3) = min { D
0
(5, 3) , D
0
(5, 1) + D
0
(1, 3) }
3
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de D
k
a partir de D
k-1
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
D
0
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1 7
4 3 4 6 0 2
5 1
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1
4 3 0 2
5 1 0
D
1
D
1
(5, 4) = min { D
0
(5, 4) , D
0
(5, 1) + D
0
(1, 4) }
1
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de D
k
a partir de D
k-1
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
D
0
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1 7
4 3 4 6 0 2
5 1 0
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1
4 3 0 2
5 1 0
D
1
D
1
(5, 5) = min { D
0
(5, 5) , D
0
(5, 1) + D
0
(1, 5) }
0 6
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de D
k
a partir de D
k-1
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
D
0
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1 7
4 3 4 6 0 2
5 1 0
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1
4 3 0 2
5 1 0
D
1
valores que melhoraram
considerando 1
como vrtice intermedirio
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de D
k
a partir de D
k-1
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
D
1
1 2 3 4 5
1 0 1 2 4 6
2 0 1 3
3 1 2 0 1 7
4 3 4 5 0 2
5 1 0
1 2 3 4 5
1 0 1 3 6
2 0 1 3
3 1 2 0 1 7
4 3 4 6 0 2
5 1 0
D
2
valores que melhoraram
considerando 1 e 2
como vrtices intermedirios
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de D
k
a partir de D
k-1
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
D
2
1 2 3 4 5
1 0 1 2 3 6
2 2 0 1 2
3 1 2 0 1 7
4 3 4 5 0 2
5 1 0
1 2 3 4 5
1 0 1 2 4 6
2 0 1 3
3 1 2 0 1 7
4 3 4 5 0 2
5 1 0
D
3
valores que melhoraram
considerando 1, 2, 3
como vrtices intermedirios
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de D
k
a partir de D
k-1
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
D
3
1 2 3 4 5
1 0 1 2 3 5
2 2 0 1 2 4
3 1 2 0 1 3
4 3 4 5 0 2
5 4 5 6 1 0
1 2 3 4 5
1 0 1 2 3 6
2 2 0 1 2
3 1 2 0 1 7
4 3 4 5 0 2
5 1 0
D
4
valores que melhoraram
considerando 1, 2, 3, 4
como vrtices intermedirios
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de D
k
a partir de D
k-1
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
D
4
1 2 3 4 5
1 0 1 2 3 5
2 2 0 1 2 4
3 1 2 0 1 3
4 3 4 5 0 2
5 4 5 6 1 0
1 2 3 4 5
1 0 1 2 3 5
2 2 0 1 2 4
3 1 2 0 1 3
4 3 4 5 0 2
5 4 5 6 1 0
D
5
nenhum valor melhorou
considerando 1, 2, 3, 4, 5
como vrtices intermedirios
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de D
k
a partir de D
k-1
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
D
4
1 2 3 4 5
1 0 1 2 3 5
2 2 0 1 2 4
3 1 2 0 1 3
4 3 4 5 0 2
5 4 5 6 1 0
1 2 3 4 5
1 0 1 2 3 5
2 2 0 1 2 4
3 1 2 0 1 3
4 3 4 5 0 2
5 4 5 6 1 0
D
5
MATRIZ FINAL DE
CUSTOS DOS
CAMINHOS MNIMOS
Algoritmo de Floyd-Warshall
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
Soluo: Determinar os valores P
k
(i, j)
P
k
(i, j) = penltimo vrtice do caminho mnimo de i a j
cujos vrtices intermedirios esto no conjunto
{1, 2,, k} \ {i, j}.
Observe que:
i , se existe aresta direcionada de i para j
P
0
(i, j) =
null , caso contrrio
Definindoasmatrizesdoauxiliaresdoalgoritmo:
Para cada k = 0, 1, 2, , n, defina P
k
como a matriz
contendo todos os valores P
k
(i, j)
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
P
0
1 2 3 4 5
1
null
1 1
null
1
2
null null
2 2
null
3 3 3
null
3
null
4 4
null null null
4
5
null null null
5
null
Algoritmo de Floyd-Warshall
Comocalcular P
k
(i, j) ?
Sabemos que:
Se D
k-1
(i, j) D
k-1
(i, k) + D
k-1
(k, j)
ento P
k
(i, j) = P
k-1
(i, j) ( mesmo vrtice da iterao anterior)
seno P
k
(i, j) = P
k-1
(k, j) ( nova possibilidade de caminho)
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
Algoritmo de Floyd-Warshall
Comocalcular P
k
(i, j) ?
Sabemos que:
Se D
k-1
(i, j) D
k-1
(i, k) + D
k-1
(k, j)
ento P
k
(i, j) = P
k-1
(i, j)
seno P
k
(i, j) = P
k-1
(k, j)
D
k
(i, j) = min { D
k-1
(i, j) , D
k-1
(i, k) + D
k-1
(k, j) }
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
i
j
k
P
k-1
(k, j)
Algoritmo de Floyd-Warshall
Novoalgoritmo:
inicializar D
0
e P
0
para cada k = 1, 2, , n faa
para cada i = 1, 2, , n faa
para cada j = 1, 2, , n faa
se D
k-1
(i, j) D
k-1
(i, k) + D
k-1
(k, j)
ento D
k
(i, j) = D
k-1
(i, j) e P
k
(i, j) = P
k-1
(i, j)
seno D
k
(i, j) = D
k-1
(i, k) + D
k-1
(k, j) e
P
k
(i, j) = P
k-1
(k, j)
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
Algoritmo de Floyd-Warshall
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
D
5
1 2 3 4 5
1
null
1 2 3 4
2 3
null
2 3 4
3 3 3
null
3 4
4 4 1 2
null
4
5 4 1 2 5
null
1 2 3 4 5
1 0 1 2 3 5
2 2 0 1 2 4
3 1 2 0 1 3
4 3 4 5 0 2
5 4 5 6 1 0
P
5
MATRIZES FINAIS
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
Algoritmo de Floyd-Warshall
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
1 2 3 4 5
1
null
1 2 3 4
2 3
null
2 3 4
3 3 3
null
3 4
4 4 1 2
null
4
5 4 1 2 5
null
P
5
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
Exemplo: calcular o caminho mnimo de 5 a 3
Algoritmo de Floyd-Warshall
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
1 2 3 4 5
1
null
1 2 3 4
2 3
null
2 3 4
3 3 3
null
3 4
4 4 1 2
null
4
5 4 1 2 5
null
P
5
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
Exemplo: calcular o caminho mnimo de 5 a 3
5 3
Algoritmo de Floyd-Warshall
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
1 2 3 4 5
1
null
1 2 3 4
2 3
null
2 3 4
3 3 3
null
3 4
4 4 1 2
null
4
5 4 1 2 5
null
P
5
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
Exemplo: calcular o caminho mnimo de 5 a 3
P
5
(5, 3) = 2
5 3
Algoritmo de Floyd-Warshall
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
1 2 3 4 5
1
null
1 2 3 4
2 3
null
2 3 4
3 3 3
null
3 4
4 4 1 2
null
4
5 4 1 2 5
null
P
5
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
Exemplo: calcular o caminho mnimo de 5 a 3
2 5 3
Algoritmo de Floyd-Warshall
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
1 2 3 4 5
1
null
1 2 3 4
2 3
null
2 3 4
3 3 3
null
3 4
4 4 1 2
null
4
5 4 1 2 5
null
P
5
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
Exemplo: calcular o caminho mnimo de 5 a 3
P
5
(5, 2) = 1
2 5 3
Algoritmo de Floyd-Warshall
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
1 2 3 4 5
1
null
1 2 3 4
2 3
null
2 3 4
3 3 3
null
3 4
4 4 1 2
null
4
5 4 1 2 5
null
P
5
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
Exemplo: calcular o caminho mnimo de 5 a 3
1 2 5 3
Algoritmo de Floyd-Warshall
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
1 2 3 4 5
1
null
1 2 3 4
2 3
null
2 3 4
3 3 3
null
3 4
4 4 1 2
null
4
5 4 1 2 5
null
P
5
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
Exemplo: calcular o caminho mnimo de 5 a 3
P
5
(5, 1) = 4
1 2 5 3
Algoritmo de Floyd-Warshall
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
1 2 3 4 5
1
null
1 2 3 4
2 3
null
2 3 4
3 3 3
null
3 4
4 4 1 2
null
4
5 4 1 2 5
null
P
5
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
Exemplo: calcular o caminho mnimo de 5 a 3
1 2 5 3 4
Algoritmo de Floyd-Warshall
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
1 2 3 4 5
1
null
1 2 3 4
2 3
null
2 3 4
3 3 3
null
3 4
4 4 1 2
null
4
5 4 1 2 5
null
P
5
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
Exemplo: calcular o caminho mnimo de 5 a 3
1 2 5 3 4
P
5
(5, 4) = 5
Algoritmo de Floyd-Warshall
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
1 2 3 4 5
1
null
1 2 3 4
2 3
null
2 3 4
3 3 3
null
3 4
4 4 1 2
null
4
5 4 1 2 5
null
P
5
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
Exemplo: calcular o caminho mnimo de 5 a 3
1 2 5 3 4
Algoritmo de Floyd-Warshall
G 1
2
3
4 5
1
2
1
1
1
2
6
3
3
3
1
1 2 3 4 5
1
null
1 2 3 4
2 3
null
2 3 4
3 3 3
null
3 4
4 4 1 2
null
4
5 4 1 2 5
null
P
5
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
Exemplo: calcular o caminho mnimo de 5 a 3
1 2 5 3 4
FIM!
Algoritmo de Floyd-Warshall
Algoritmo de Kruskal
Problema: Dado um grafo conexo G com pesos positivos
nas arestas, determinar uma rvore geradora de G com
custo mnimo.
Algoritmo de Kruskal
O Algoritmo de Kruskal utiliza uma tcnica de
programao conhecida como Mtodo Guloso, cuja
estratgia geral : a cada nova iterao, acrescente
soluo parcial a parte mais apetitosa.
Algoritmode Kruskal
Dado o grafo G, o algoritmo constri uma rvore geradora T de G com custo mnimo
V(T) V(G); E(T) ; -- inicializao de T
seja e
1
, e
2
, ,e
m
uma ordenao das arestas de G onde peso(e
j
) peso(e
j+1
), j = 1,, m1
para j = 1,, m faa
se e
j
no forma ciclo com as arestas em E(T)
ento acrescente e
j
a E(T)
fim-se
fim-para
retorne T
Algoritmo de Kruskal
Exemplo: Simulao da execuo do algoritmo.
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Kruskal
Exemplo: Simulao da execuo do algoritmo.
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Kruskal
Exemplo: Simulao da execuo do algoritmo.
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Kruskal
Exemplo: Simulao da execuo do algoritmo.
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Kruskal
Exemplo: Simulao da execuo do algoritmo.
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Kruskal
Exemplo: Simulao da execuo do algoritmo.
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Kruskal
Exemplo: Simulao da execuo do algoritmo.
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Kruskal
Exemplo: Simulao da execuo do algoritmo.
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Kruskal
Exemplo: Simulao da execuo do algoritmo.
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Kruskal
Exemplo: Simulao da execuo do algoritmo.
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Kruskal
Exemplo: Simulao da execuo do algoritmo.
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Kruskal
Exemplo: Simulao da execuo do algoritmo.
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Kruskal
Exemplo: Simulao da execuo do algoritmo.
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Kruskal
Exemplo: Simulao da execuo do algoritmo.
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Kruskal
Exemplo: Simulao da execuo do algoritmo.
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Kruskal
Exemplo: Simulao da execuo do algoritmo.
4
8 7
9
8
1 2
10
11
7
2
6
4
14
custo final da rvore geradora: 37
Algoritmo de Kruskal
Questo: Como saber de modo eficiente se a aresta em
considerao forma ciclo com as azuis j escolhidas?
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Kruskal
Estratgia: Uma nova aresta pode ser incorporada
soluo (floresta) parcial se ela une duas rvores distintas!
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Kruskal
Incio: Os n vrtices formam n rvores triviais distintas
(cada uma com sua cor). Nenhuma aresta foi escolhida.
2 3 4
1
9
5
8 7 6
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Kruskal
Evoluo do algoritmo: medida que as arestas so
escolhidas, realizamos a fuso das rvores.
2 3 4
1
9
5
8 7 6
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Kruskal
Evoluo do algoritmo: medida que as arestas so
escolhidas, realizamos a fuso das rvores.
2 3 4
1
9
5
7 7 6
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Kruskal
Evoluo do algoritmo: medida que as arestas so
escolhidas, realizamos a fuso das rvores.
2 3 4
1
9
5
6 6 6
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Kruskal
Evoluo do algoritmo: medida que as arestas so
escolhidas, realizamos a fuso das rvores.
2 3 4
1
3
5
6 6 6
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Kruskal
Evoluo do algoritmo: medida que as arestas so
escolhidas, realizamos a fuso das rvores.
2 3 4
1
3
5
3 3 3
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Kruskal
Evoluo do algoritmo: medida que as arestas so
escolhidas, realizamos a fuso das rvores.
1 3 4
1
3
5
3 3 3
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Kruskal
Evoluo do algoritmo: medida que as arestas so
escolhidas, realizamos a fuso das rvores.
1 3 4
1
3
5
3 3 3
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Kruskal
Evoluo do algoritmo: medida que as arestas so
escolhidas, realizamos a fuso das rvores.
1 3 4
1
3
5
3 3 3
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Kruskal
Evoluo do algoritmo: medida que as arestas so
escolhidas, realizamos a fuso das rvores.
1 3 3
1
3
5
3 3 3
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Kruskal
Evoluo do algoritmo: medida que as arestas so
escolhidas, realizamos a fuso das rvores.
1 1 1
1
1
5
1 1 1
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Kruskal
Evoluo do algoritmo: medida que as arestas so
escolhidas, realizamos a fuso das rvores.
1 1 1
1
1
5
1 1 1
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Kruskal
Evoluo do algoritmo: medida que as arestas so
escolhidas, realizamos a fuso das rvores.
1 1 1
1
1
1
1 1 1
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Kruskal
Evoluo do algoritmo: medida que as arestas so
escolhidas, realizamos a fuso das rvores.
1 1 1
1
1
1
1 1 1
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Kruskal
Evoluo do algoritmo: medida que as arestas so
escolhidas, realizamos a fuso das rvores.
1 1 1
1
1
1
1 1 1
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Kruskal
Evoluo do algoritmo: medida que as arestas so
escolhidas, realizamos a fuso das rvores.
1 1 1
1
1
1
1 1 1
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Kruskal
Como implementar a verificao de ciclos?
Algoritmode Kruskal nova verso
Entrada: grafo G com V(G) = {1,2,, n}
Sada: rvore geradora T de G com custo mnimo
V(T) V(G); E(T) ; -- inicializao de T
para j = 1,, n faa
S
j
{ j}; -- inicializao dos n conjuntos disjuntos de vrtices das n rvores triviais
seja e
1
, e
2
, ,e
m
uma ordenao das arestas de G onde peso(e
j
) peso(e
j+1
), j = 1,, m1
para j = 1,, m faa
sejam S
p
e S
q
os conjuntos associados aos extremos da aresta e
j
(onde p q)
se p q ento
acrescente e
j
a E(T)
S
p
S
p
U S
q
fim-se
fim-para
retorne T
Algoritmo de Kruskal
Algoritmode Kruskal nova verso
Entrada: grafo G com V(G) = {1,2,, n}
Sada: rvore geradora T de G com custo mnimo
V(T) V(G); E(T) ; -- inicializao de T
para j = 1,, n faa
S
j
{ j}; -- inicializao dos n conjuntos disjuntos de vrtices das n rvores triviais
seja e
1
, e
2
, ,e
m
uma ordenao das arestas de G onde peso(e
j
) peso(e
j+1
), j = 1,, m1
para j = 1,, m faa
sejam S
p
e S
q
os conjuntos associados aos extremos da aresta e
j
(onde p q)
se p q ento
acrescente e
j
a E(T)
S
p
S
p
U S
q
fim-se
fim-para
retorne T
Clculo da Complexidade
Algoritmo de Kruskal
Clculo da Complexidade
Algoritmode Kruskal nova verso
Entrada: grafo G com V(G) = {1,2,, n}
Sada: rvore geradora T de G com custo mnimo
V(T) V(G); E(T) ;
para j = 1,, n faa
S
j
{ j}; -- inicializao dos n conjuntos disjuntos de vrtices das n rvores triviais
seja e
1
, e
2
, ,e
m
uma ordenao das arestas de G onde peso(e
j
) peso(e
j+1
), j = 1,, m1
para j = 1,, m faa
sejam S
p
e S
q
os conjuntos associados aos extremos da aresta e
j
(onde p q)
se p q ento
acrescente e
j
a E(T)
S
p
S
p
U S
q
fim-se
fim-para
retorne T
O(n)
Algoritmo de Kruskal
Clculo da Complexidade
Algoritmode Kruskal nova verso
Entrada: grafo G com V(G) = {1,2,, n}
Sada: rvore geradora T de G com custo mnimo
V(T) V(G); E(T) ;
para j = 1,, n faa
S
j
{ j};
seja e
1
, e
2
, ,e
m
uma ordenao das arestas de G onde peso(e
j
) peso(e
j+1
), j = 1,, m1
para j = 1,, m faa
sejam S
p
e S
q
os conjuntos associados aos extremos da aresta e
j
(onde p q)
se p q ento
acrescente e
j
a E(T)
S
p
S
p
U S
q
fim-se
fim-para
retorne T
O(n)
O(n)
Algoritmo de Kruskal
Clculo da Complexidade
Algoritmode Kruskal nova verso
Entrada: grafo G com V(G) = {1,2,, n}
Sada: rvore geradora T de G com custo mnimo
V(T) V(G); E(T) ;
para j = 1,, n faa
S
j
{ j};
seja e
1
, e
2
, ,e
m
uma ordenao das arestas de G onde peso(e
j
) peso(e
j+1
)
para j = 1,, m faa
sejam S
p
e S
q
os conjuntos associados aos extremos da aresta e
j
(onde p q)
se p q ento
acrescente e
j
a E(T)
S
p
S
p
U S
q
fim-se
fim-para
retorne T
O(n)
O(n)
O(m log m)
Algoritmo de Kruskal
Clculo da Complexidade
Algoritmode Kruskal nova verso
Entrada: grafo G com V(G) = {1,2,, n}
Sada: rvore geradora T de G com custo mnimo
V(T) V(G); E(T) ;
para j = 1,, n faa
S
j
{ j};
seja e
1
, e
2
, ,e
m
uma ordenao das arestas de G onde peso(e
j
) peso(e
j+1
)
para j = 1,, m faa
sejam S
p
e S
q
os conjuntos associados aos extremos da aresta e
j
(onde p q)
se p q ento
acrescente e
j
a E(T)
S
p
S
p
U S
q
fim-se
fim-para
retorne T
O(n)
O(n)
O(m log m)
O(1)
Algoritmo de Kruskal
Clculo da Complexidade
Algoritmode Kruskal nova verso
Entrada: grafo G com V(G) = {1,2,, n}
Sada: rvore geradora T de G com custo mnimo
V(T) V(G); E(T) ;
para j = 1,, n faa
S
j
{ j};
seja e
1
, e
2
, ,e
m
uma ordenao das arestas de G onde peso(e
j
) peso(e
j+1
)
para j = 1,, m faa
sejam S
p
e S
q
os conjuntos associados aos extremos da aresta e
j
(onde p q)
se p q ento
acrescente e
j
a E(T)
S
p
S
p
U S
q
fim-se
fim-para
retorne T
O(n)
O(n)
O(m log m)
O(1)
Total do para: O(m + n log n)
Algoritmo de Kruskal
Clculo da Complexidade
Algoritmode Kruskal nova verso
Entrada: grafo G com V(G) = {1,2,, n}
Sada: rvore geradora T de G com custo mnimo
V(T) V(G); E(T) ;
para j = 1,, n faa
S
j
{ j};
seja e
1
, e
2
, ,e
m
uma ordenao das arestas de G onde peso(e
j
) peso(e
j+1
)
para j = 1,, m faa
sejam S
p
e S
q
os conjuntos associados aos extremos da aresta e
j
(onde p q)
se p q ento
acrescente e
j
a E(T)
S
p
S
p
U S
q
fim-se
fim-para
retorne T
O(n)
O(n)
O(m log m)
O(1)
Total do para: O(m + n log n)
Total do algoritmo: O(m log m) = O(m log n)
Algoritmo de Prim
O Algoritmo de Prim tambm utiliza o mtodo guloso, mas
tem um princpio de funcionamento diferente:
no algoritmo de Kruskal, a soluo parcial uma floresta;
j no algoritmo de Prim, uma rvore (grafo conexo).
Algoritmode Prim
Dado o grafo G, o algoritmo constri uma rvore geradora T de G com custo mnimo
escolher um vrtice qualquer vem V(G); -- vrtice escolhido para ser a raiz de T
V(T) {v}; E(T) ; -- inicializao de T
para j = 1,, n 1 faa
seja e =xy a aresta de peso mnimo com um extremo xem V(T) e outro yem V(G)\ V(T)
acrescente e a E(T)
acrescente y a V(T)
fim-para
retorne T
Algoritmo de Prim
Exemplo: Simulao da execuo do algoritmo.
4
8 7
9
8
1 2
10
11
7
2
6
4
14
Algoritmo de Prim
4
8 7
9
8
1 2
10
11
7
2
6
14
raiz
4
Exemplo: Simulao da execuo do algoritmo.
Algoritmo de Prim
4
8 7
9
8
1 2
10
11
7
2
6
14
raiz
4
Exemplo: Simulao da execuo do algoritmo.
Algoritmo de Prim
Exemplo: Simulao da execuo do algoritmo.
4
8 7
9
8
1 2
10
11
7
2
6
14
raiz
4
Algoritmo de Prim
Exemplo: Simulao da execuo do algoritmo.
4
8 7
9
8
1 2
10
11
7
2
6
14
raiz
4
Algoritmo de Prim
Exemplo: Simulao da execuo do algoritmo.
4
8 7
9
8
1 2
10
11
7
2
6
14
raiz
4
Algoritmo de Prim
Exemplo: Simulao da execuo do algoritmo.
4
8 7
9
8
1 2
10
11
7
2
6
14
raiz
4
Algoritmo de Prim
Exemplo: Simulao da execuo do algoritmo.
4
8 7
9
8
1 2
10
11
7
2
6
14
raiz
4
Algoritmo de Prim
Exemplo: Simulao da execuo do algoritmo.
4
8 7
9
8
1 2
10
11
7
2
6
14
raiz
4
Algoritmo de Prim
Exemplo: Simulao da execuo do algoritmo.
4
8 7
9
8
1 2
10
11
7
2
6
14
raiz
4
Algoritmo de Prim
Exemplo: Simulao da execuo do algoritmo.
4
8 7
9
8
1 2
10
11
7
2
6
14
raiz
4
FINAL: custo da rvore geradora 37
Emparelhamentos
Problema 1: Para cada operrio de uma fbrica existe uma
lista das mquinas que ele est habilitado a operar.
Encontre uma alocao que maximize o nmero de pares
da forma operrio i opera a mquina j.
Emparelhamentos
Problema 1: Para cada operrio de uma fbrica existe uma
lista das mquinas que ele est habilitado a operar.
Encontre uma alocao que maximize o nmero de pares
da forma operrio i opera a mquina j.
Emparelhamentos
Problema 1: Para cada operrio de uma fbrica existe uma
lista das mquinas que ele est habilitado a operar.
Encontre uma alocao que maximize o nmero de pares
da forma operrio i opera a mquina j.
Emparelhamentos
Problema 2: Deseja-se estabelecer um pareamento de
processadores em uma rede. Encontre o maior nmero de
pares de processadores parceiros.
Emparelhamentos
Problema 2: Deseja-se estabelecer um pareamento de
processadores em uma rede. Encontre o maior nmero de
pares de processadores parceiros.
Emparelhamentos
Definio: Um emparelhamentoem um grafo G um
conjunto de arestas que no tm extremos em comum.
Emparelhamentos
Definio: Um emparelhamentoem um grafo G um
conjunto de arestas que no tm extremos em comum.
Emparelhamentos
Definio: Um emparelhamento em um grafo G mximo
se possui o maior nmero possvel de arestas. (Obs: pode
haver um nmero exponencial de emparelhamentos mximos!)
Emparelhamentos
Definio: Um emparelhamento em um grafo G mximo
se possui o maior nmero possvel de arestas. (Obs: pode
haver um nmero exponencial de emparelhamentos mximos!)
Emparelhamentos
Definio: Um emparelhamento em um grafo G mximo
se possui o maior nmero possvel de arestas. (Obs: pode
haver um nmero exponencial de emparelhamentos mximos!)
Emparelhamentos
Definio: Um emparelhamento em um grafo G mximo
se possui o maior nmero possvel de arestas. (Obs: pode
haver um nmero exponencial de emparelhamentos mximos!)
Emparelhamentos
Definio: Um emparelhamento em um grafo G
maximal se no est contido em nenhum emparelhamento
maior. (Obs: todo emparelhamento mximo maximal.)
Emparelhamentos
Definio: Um emparelhamento em um grafo G
maximal se no est contido em nenhum emparelhamento
maior. (Obs: todo emparelhamento mximo maximal.)
exemplo de emparelhamento maximal mas no mximo
Emparelhamentos
Definio: Seja M um emparelhamento em um grafo G.
Um vrtice v M-saturadose alguma aresta de M incide
sobre v ; caso contrrio, v M-insaturado.
Emparelhamentos
Definio: Seja M um emparelhamento em um grafo G.
Um vrtice v M-saturadose alguma aresta de M incide
sobre v ; caso contrrio, v M-insaturado.
Emparelhamentos
Definio: Seja M um emparelhamento em um grafo G.
Um vrtice v M-saturadose alguma aresta de M incide
sobre v ; caso contrrio, v M-insaturado.
vrticessaturadosemvermelho
Emparelhamentos
Definio: Seja M um emparelhamento em um grafo G.
Um vrtice v M-saturadose alguma aresta de M incide
sobre v; caso contrrio, v M-insaturado.
vrticessaturadosemvermelho vrticesinsaturadosemazul
Emparelhamentos
Definio: Um emparelhamento M em um grafo G
chamado perfeitose todo vrtice de G M-saturado. (Obs:
todo emparelhamento perfeito mximo.)
Emparelhamentos
vrticessaturadosemvermelho nohvrticesinsaturados!
Definio: Um emparelhamento M em um grafo G
chamado perfeitose todo vrtice de G M-saturado. (Obs:
todo emparelhamento perfeito mximo.)
Emparelhamentos
Def.: Seja M um emparelhamento. Um caminhoM-
aumentante aquele que inicia e termina em vrtices M-
insaturados, e alterna arestas de M com arestas de E(G)\M.
Emparelhamentos
Def.: Seja M um emparelhamento. Um caminhoM-
aumentante aquele que inicia e termina em vrtices M-
insaturados, e alterna arestas de M com arestas de E(G)\M.
vrticessaturadosemvermelho vrticesinsaturadosemazul
Emparelhamentos
Def.: Seja M um emparelhamento. Um caminhoM-
aumentante aquele que inicia e termina em vrtices M-
insaturados, e alterna arestas de M com arestas de E(G)\M.
caminhoM-aumentante
Emparelhamentos
Importante! Um caminho M-aumentante P fornece um
modo de aumentar o tamanho do emparelhamento M em
uma unidade.
Emparelhamentos
emparelhamentoM
Importante! Um caminho M-aumentante P fornece um
modo de aumentar o tamanho do emparelhamento M em
uma unidade.
Emparelhamentos
caminhoM-aumentanteP
Importante! Um caminho M-aumentante P fornece um
modo de aumentar o tamanho do emparelhamento M em
uma unidade.
Emparelhamentos
emP, trocar arestasde M por arestasde E(G)\M, e vice-versa
Importante! Um caminho M-aumentante P fornece um
modo de aumentar o tamanho do emparelhamento M em
uma unidade.
Emparelhamentos
novo emparelhamentoM
Importante! Um caminho M-aumentante P fornece um
modo de aumentar o tamanho do emparelhamento M em
uma unidade.
Emparelhamentos
A operao de aumento do emparelhamento dada por
M M E(P)
onde a diferena simtrica entre conjuntos.
novo emparelhamentoM
Emparelhamentos
Teorema (Berge): Um emparelhamento M mximo se e
somente no existe caminho M-aumentante no grafo.
Emparelhamentos
O Teorema de Berge sugere o seguinte algoritmo para
encontrar um emparelhamento mximo:
Algoritmopara encontrar um emparelhamentomximo
Dado o grafo G, constri um emparelhamento mximo M em G
M um emparelhamento inicial qualquer -- inicializao de M
enquanto existe um caminho M-aumentante P em G faa
M M E(P)
fim-enquanto
retorne M
Emparelhamentos
Exemplo: Simulao da execuo do algoritmo.
a
b c
d
h
g f
e
i
j
x
k
y
z
grafo de entrada
Emparelhamentos
Exemplo: Simulao da execuo do algoritmo.
a
b c
d
h
g f
e
i
j
x
k
y
z
emparelhamento inicial M
Emparelhamentos
Exemplo: Simulao da execuo do algoritmo.
a
b c
d
h
g f
e
i
j
x
k
y
z
caminho M-aumentante P
Emparelhamentos
Exemplo: Simulao da execuo do algoritmo.
a
b c
d
h
g f
e
i
j
x
k
y
z
novo emparelhamento M
Emparelhamentos
Exemplo: Simulao da execuo do algoritmo.
a
b c
d
h
g f
e
i
j
x
k
y
z
caminho M-aumentante P
Emparelhamentos
Exemplo: Simulao da execuo do algoritmo.
a
b c
d
h
g f
e
i
j
x
k
y
z
novo emparelhamento M
Emparelhamentos
Exemplo: Simulao da execuo do algoritmo.
a
b c
d
h
g f
e
i
j
x
k
y
z
no h caminho M-aumentante M mximo!
Fluxos emredes
Def.: Uma rede um multidigrafoD=(V, E) onde cada
aresta e em E possui uma capacidade real c(e) > 0.
4
2
3
3
3
5
3
4
2 1
Fluxos emredes
Supomos que h na rede dois vrtices especiais s(origem)
e t (destino), tais que: s uma fonte que alcana todos os
demais, e t um sumidouro alcanado por todos os demais.
4
2
3
3
3
5
3
4
2 1
s
a
d
t
b
c
Fluxos emredes
4
2
3
3
3
5
3
4
2 1
s
a
d
t
b
c
Def.: Um fluxo uma funo f : E R+ tal que:
(1) f (e) c(e), para toda aresta e em E;
(2)
x
f (x, v) =
z
f (v, z), para todo v em V \ {s,t}.
Fluxos emredes
Def.: Um fluxo uma funo f : E R+ tal que:
(1) f (e) c(e), para toda aresta e em E;
(2)
x
f (x, v) =
z
f (v, z), para todo v em V \ {s,t}.
4
2
3
3
3
5
3
4
2 1
s
a
d
t
b
c
2
2
0
1
1
3
2
2
1 1
capacidade
fluxo
Fluxos emredes
Def.: Um fluxo uma funo f : E R+ tal que:
(1) f no ultrapassa as capacidades (propr. de viabilidade)
(2) f se conserva em todo v s,t (propr. de conservao)
4
2
3
3
3
5
3
4
2 1
s
a
d
t
b
c
2
2
0
1
1
3
2
2
1 1
capacidade
fluxo
Fluxos emredes
4
2
3
3
3
5
3
4
2 1
s
a
d
t
b
c
2
2
0
1
1
3
2
2
1 1
capacidade
fluxo
O valor do fluxo em v s,t vale
x
f (x, v) (ou
z
f (v, z)).
O valor do fluxo em s
z
f (s, z), e em t
x
f (x, t).
Fluxos emredes
O valor do fluxo em v s,t vale
x
f (x, v) (ou
z
f (v, z)).
O valor do fluxo em s
z
f (s, z), e em t
x
f (x, t).
4
2
3
3
3
5
3
4
2 1
s
a
d
t
b
c
2
2
0
1
1
3
2
2
1 1
capacidade
fluxo
valor do fluxo no vrtice
4
1
4
3
4
3
Fluxos emredes
O valor do fluxo na rede D denotado por f (D) e
definido como f (D) =
z
f (s, z) (valor do fluxo em s)
4
2
3
3
3
5
3
4
2 1
s
a
d
t
b
c
2
2
0
1
1
3
2
2
1 1
capacidade
fluxo
valor do fluxo no vrtice
4
1
4
3
4
3
Fluxos emredes
O valor do fluxo na rede D denotado por f (D) e
definido como f (D) =
z
f (s, z) (valor do fluxo em s)
4
2
3
3
3
5
3
4
2 1
s
a
d
t
b
c
2
2
0
1
1
3
2
2
1 1
capacidade
fluxo
valor do fluxonarede 4
4
Fluxos emredes
O valor do fluxo na rede D denotado por f (D) e
definido como f (D) =
z
f (s, z) (valor do fluxo em s)
4
2
3
3
3
5
3
4
2 1
s
a
d
t
b
c
2
2
1
2
1
4
2
3
1 1
capacidade
fluxo
valor do fluxonarede 5
5
Fluxos emredes
O valor do fluxo na rede D denotado por f (D) e
definido como f (D) =
z
f (s, z) (valor do fluxo em s)
4
2
3
3
3
5
3
4
2 1
s
a
d
t
b
c
3
2
1
2
1
4
3
3
1 1
capacidade
fluxo
valor do fluxonarede 6
6
Fluxos emredes
Problema do Fluxo Mximo:
Dada uma rede D, encontrar um fluxo f de valor mximo.
4
2
3
3
3
5
3
4
2 1
s
a
d
t
b
c
3
2
1
2
1
4
3
3
1 1
capacidade
fluxo
valor do fluxonarede 6
6
Fluxos emredes
4
2
3
3
3
5
3
4
2 1
s
a
d
t
b
c
3
2
2
2
0
4
3
4
1 1
capacidade
fluxo
valor do fluxonarede 7
7
Problema do Fluxo Mximo:
Dada uma rede D, encontrar um fluxo f de valor mximo.
Fluxos emredes
4
2
3
3
3
5
3
4
2 1
s
a
d
t
b
c
3
2
2
2
0
4
3
4
1 1
capacidade
fluxo
Fluxomximo!
7
Problema do Fluxo Mximo:
Dada uma rede D, encontrar um fluxo f de valor mximo.
Fluxos emredes
Def.: Uma aresta est saturadaquando f (e) = c(e).
Fluxos emredes
Def.: Uma aresta est saturadaquando f (e) = c(e).
4
2
3
3
3
5
3
4
2 1
s
a
d
t
b
c
3
2
1
2
1
4
3
3
1 1
6
capacidade
fluxo
fluxo na rede
aresta saturada
Fluxos emredes
Def.: Um fluxo dito maximal quando todo caminho
direcionado de sa t contm uma aresta saturada.
4
2
3
3
3
5
3
4
2 1
s
a
d
t
b
c
3
2
1
2
1
4
3
3
1 1
6
capacidade
fluxo
fluxo na rede
aresta saturada
Fluxos emredes
Def.: Um fluxo dito maximal quando todo caminho
direcionado de sa t contm uma aresta saturada.
4
2
3
3
3
5
3
4
2 1
s
a
d
t
b
c
3
2
1
2
1
4
3
3
1 1
6
capacidade
fluxo
fluxo na rede
aresta saturada
Fluxomaximal !
Fluxos emredes
Um fluxo maximal quando no possvel aumentar o
seuvalor apenascom acrscimode fluxonasarestas.
4
2
3
3
3
5
3
4
2 1
s
a
d
t
b
c
3
2
1
2
1
4
3
3
1 1
6
capacidade
fluxo
fluxo na rede
aresta saturada
Fluxomaximal !
Fluxos emredes
Todo fluxo mximo maximal.
Nem todo fluxo maximal mximo.
4
2
3
3
3
5
3
4
2 1
s
a
d
t
b
c
3
2
1
2
1
4
3
3
1 1
6
capacidade
fluxo
fluxo na rede
aresta saturada
Fluxomaximal !
Fluxos emredes
Todo fluxo mximo maximal.
Nem todo fluxo maximal mximo.
4
2
3
3
3
5
3
4
2 1
s
a
d
t
b
c
3
2
1
2
1
4
3
3
1 1
6
capacidade
fluxo
fluxo na rede
aresta saturada
Fluxomaximal ! mas nomximo!
Fluxos emredes
Def.: Seja S V tal que s S e t S. Seja S = V S.
Um corte (S, S ) o conjunto de arestas com um extremo
em S e o outro em S.
Fluxos emredes
s
a
d
t
b
c
Def.: Seja S V tal que s S e t S. Seja S = V S.
Um corte (S, S ) o conjunto de arestas com um extremo
em S e o outro em S.
S
Fluxos emredes
s
a
d
t
b
c
Def.: Seja S V tal que s S e t S. Seja S = V S.
Um corte (S, S ) o conjunto de arestas com um extremo
em S e o outro em S.
S
Fluxos emredes
s
a
d
t
b
c
Idia: Todo caminho direcionado de sa t tem que passar
por alguma aresta do corte.
S
Fluxos emredes
s
a
d
t
b
c
S= {s, a, b} S = {t, c, d}
(S, S ) = { (s, c), (b, c), (c, b), (b, d), (d, a) }
S
S
Fluxos emredes
s
a
d
t
b
c
S= {s} S = {t, a, b, c, d}
(S, S ) = { (s, a), (s, b), (s, c) }
Fluxos emredes
s
a
d
t
b
c
S= {s, a, b, c, d} S = {t}
(S, S ) = { (c, t), (d, t) }
S
Fluxos emredes
Def.: (S, S )
+
o conj. de arestas que vo de S a S.
(S, S )
-
o conj. de arestas que vo de S a S.
Fluxos emredes
s
a
d
t
b
c
Def.: (S, S )
+
o conj. de arestas que vo de S a S.
(S, S )
-
o conj. de arestas que vo de S a S.
S
Fluxos emredes
s
a
d
t
b
c
S= { s, a, b}
(S, S )
+
= { (s, c), (b, c), (b, d) }
(S, S )
-
= { (c, b), (d, a) }
S
Fluxos emredes
Def.: A capacidadec(S, S ) de um corte(S, S ) a soma
das capacidades das arestas de (S, S )
+
.
Fluxos emredes
s
a
d
t
b
c
4
2
3
3
3
5
3
4
2 1
Def.: A capacidadec(S, S ) de um corte(S, S ) a soma
das capacidades das arestas de (S, S )
+
.
Fluxos emredes
s
a
d
t
b
c
S
4
2
3
3
3
5
3
4
2 1
Def.: A capacidadec(S, S ) de um corte(S, S ) a soma
das capacidades das arestas de (S, S )
+
.
Fluxos emredes
s
a
d
t
b
c
Def.: A capacidadec(S, S ) de um corte(S, S ) a soma
das capacidades das arestas de (S, S )
+
.
S
4
2
3
3
3
5
3
4
2 1
Fluxos emredes
s
a
d
t
b
c
S= { s, a, b}
c(S, S ) = c(s, c) + c(b, c) + c(b, d) = 4 + 1 + 4 = 9
S
4
2
3
3
3
5
3
4
2 1
Fluxos emredes
s
a
d
t
b
c
S= {s, a, b, c, d}
c(S, S ) = c(c, t) + c(d, t) = 3 + 5 = 8
S
4
2
3
3
3
5
3
4
Fluxos emredes
s
a
d
t
b
c
S= { s, a, b, c}
c(S, S ) = c(b, d) + c(c, t) = 3 + 4 = 7
4
2
3
3
3
5
3
4
2 1
S
Fluxos emredes
s
a
d
t
b
c
Observe que os cortes tm capacidades cada vez
menores!
4
2
3
3
3
5
3
4
2 1
S
Fluxos emredes
s
a
d
t
b
c
Problema do Corte Mnimo: Dada uma rede D, encontrar
um corte (S, S) com a menor capacidade possvel.
4
2
3
3
3
5
3
4
2 1
S
Fluxos emredes
Def.: O fluxof(S, S ) emum corte(S, S ) a soma dos
fluxos nas arestas de ( S, S )
+
menos a soma dos fluxos
nas arestas de (S, S )
-
.
Fluxos emredes
Def.: O fluxof(S, S ) emum corte(S, S ) a soma dos
fluxos nas arestas de ( S, S )
+
menos a soma dos fluxos
nas arestas de (S, S )
-
.
s
a
d
t
b
c
S
4
2
3
3
3
5
3
4
2 1
3
2
1
2
1
4
3
3
1 1
6
Fluxos emredes
s
a
d
t
b
c
S= { s, a, b}
f(S, S ) = f(s, c) + f(b, c) + f(b, d) f (c, b) f (d, a) =
3 + 1 + 4 1 1 = 6
S
4
2
3
3
3
5
3
4
2 1
3
2
1
2
1
4
3
3
1 1
6
Fluxos emredes
s
a
d
t
b
c
S= {s, a, b, c, d}
f(S, S ) = f(c, t) + f(d, t) = 3 + 3 = 6
S
4
2
3
3
3
5
3
4
2 1
3
2
1
2
1
4
3
3
1 1
6
Fluxos emredes
s
a
d
t
b
c
S= { s, a, b, c}
f(S, S ) = f(b, d) + f(c, t) f(d, a) = 3 + 4 1 = 6
4
2
3
3
3
5
3
4
2
S
1
3
2
1
2
1
4
3
3
1 1
6
Fluxos emredes
s
a
d
t
b
c
Observe queo valor do fluxoemqualquer corte sempre
o mesmo, e igual aofluxof(D) narede!
4
2
3
3
3
5
3
4
2
S
1
3
2
1
2
1
4
3
3
1 1
6
Fluxos emredes
s
a
d
t
b
c
f(D) = f(S, S ) para S= {s}.
4
2
3
3
3
5
3
4
2
S
1
3
2
1
2
1
4
3
3
1 1
6
Fluxos emredes
s
a
d
t
b
c
Teorema: Seja f um fluxo em uma rede D e (S, S ) um
corte qualquer em D. Ento f(S, S ) = f (D).
4
2
3
3
3
5
3
4
2
S
1
3
2
1
2
1
4
3
3
1 1
6
Fluxos emredes
Teorema: Seja f um fluxo qualquer em uma rede D, e
(S, S ) um corte qualquer em D. Ento f (D) c(S, S ).
Fluxos emredes
Teorema: Seja f um fluxo qualquer em uma rede D, e
(S, S ) um corte qualquer em D. Ento f (D) c(S, S ).
s
a
d
t
b
c
4
2
3
3
3
5
3
4
2
S
1
3
2
1
2
1
4
3
3
1 1
6
Fluxos emredes
s
a
d
t
b
c
f (D) = 6 c(S, S ) = 9
4
2
3
3
3
5
3
4
2
S
1
3
2
1
2
1
4
3
3
1 1
6
Fluxos emredes
s
a
d
t
b
c
f (D) = 6 c(S, S ) = 8
4
2
3
3
3
5
3
4
2 1
3
2
1
2
1
4
3
3
1 1
S
6
Fluxos emredes
s
a
d
t
b
c
f (D) = 6 c(S, S ) = 9
4
2
3
3
3
5
3
4
2 1
3
2
1
2
1
4
3
3
1 1
6
S
Fluxos emredes
s
a
d
t
b
c
f (D) = 7 c(S, S ) = 9
4
2
3
3
3
5
3
4
2 1
3
2
2
2
0
4
3
4
1 1
7
S
Fluxos emredes
s
a
d
t
b
c
f (D) = 7 c(S, S ) = 7
4
2
3
3
3
5
3
4
2 1
3
2
2
2
0
4
3
4
1 1
S
7
Fluxos emredes
s
a
d
t
b
c
4
2
3
3
3
5
3
4
2 1
3
2
2
2
0
3
4
1 1
S
Teorema: Seja f um fluxo mximo em uma rede D, e
(S, S ) um corte mnimo em D. Ento f (D) = c(S, S ).
7
4
Fluxos emredes
Def.: Dado um fluxo f numa rede D,
uma aresta e direta se c(e) f (e) > 0
uma aresta e contrria se f (e) > 0
Fluxos emredes
s
a
d
t
b
c
4
2
3
3
3
5
3
4
2 1
0
2
3
3
0
4
1
4
0 1
Def.: Dado um fluxo f numa rede D,
uma aresta e direta se c(e) f (e) > 0
uma aresta e contrria se f (e) > 0
5
Fluxos emredes
s
a
d
t
b
c
4
2
3
3
3
5
3
4
2 1
0
2
3
3
0
4
1
4
0 1
Def.: Dado um fluxo f numa rede D,
uma aresta e direta se c(e) f (e) > 0
uma aresta e contrria se f (e) > 0
5
arestasdiretas
arestascontrrias
Fluxos emredes
s
a
d
t
b
c
4
2
3
3
3
5
3
4
2 1
0
2
3
3
0
4
1
4
0 1
Def.: Dado um fluxo f numa rede D,
uma aresta e direta se c(e) f (e) > 0
uma aresta e contrria se f (e) > 0
5
arestassimultaneamentediretas/contrrias
Fluxos emredes
s
a
d
t
b
c
4
2
3
3
3
5
3
4
2 1
0
2
3
3
0
4
1
4
0 1
Def.: Dado um fluxo f numa rede D,
uma aresta e direta se c(e) f (e) > 0
uma aresta e contrria se f (e) > 0
5
Fluxos emredes
Def.: Dados D e f, define-se a rederesidual D = (V, E):
(x,y) direta(x,y) E c/ capacidade c(x,y) = c(x,y) f(x,y)
(x,y) contrria (y,x) E c/ capacidade c(y,x) = f(x,y)
Fluxos emredes
4
2
3
3
3
5
3
4
2 1
s
a
d
t
b
c
2
2
0
1
1
3
2
2
1 1
4
Def.: Dados D e f, define-se a rederesidual D = (V, E):
(x,y) direta(x,y) E c/ capacidade c(x,y) = c(x,y) f(x,y)
(x,y) contrria (y,x) E c/ capacidade c(y,x) = f(x,y)
Fluxos emredes
4
2
3
3
3
5
3
4
2 1
s
a
d
t
b
c
2
2
0
1
1
3
2
2
1 1
Def.: Dados D e f, define-se a rederesidual D = (V, E):
(x,y) direta(x,y) E c/ capacidade c(x,y) = c(x,y) f(x,y)
(x,y) contrria (y,x) E c/ capacidade c(y,x) = f(x,y)
arestadiretade D
Fluxos emredes
4
2
3
3
3
5
3
4
2 1
s
a
d
t
b
c
2
2
1
1
3
2
2
1 1
Def.: Dados D e f, define-se a rederesidual D = (V, E):
(x,y) direta(x,y) E c/ capacidade c(x,y) = c(x,y) f(x,y)
(x,y) contrria (y,x) E c/ capacidade c(y,x) = f(x,y)
arestade D
Fluxos emredes
4
2
3
3
3
5
3
4
2 1
s
a
d
t
b
c
2
2
1
1
3
2
2
1 1
Def.: Dados D e f, define-se a rederesidual D = (V, E):
(x,y) direta(x,y) E c/ capacidade c(x,y) = c(x,y) f(x,y)
(x,y) contrria (y,x) E c/ capacidade c(y,x) = f(x,y)
arestacontrriade D
Fluxos emredes
4
2
3
3
3
5
3
4
2 1
s
a
d
t
b
c
2
1
1
3
2
2
1 1
Def.: Dados D e f, define-se a rederesidual D = (V, E):
(x,y) direta(x,y) E c/ capacidade c(x,y) = c(x,y) f(x,y)
(x,y) contrria (y,x) E c/ capacidade c(y,x) = f(x,y)
arestade D
Fluxos emredes
4
2
3
3
3
5
3
4
2 1
s
a
d
t
b
c
2
1
1
3
2
2
1 1
Def.: Dados D e f, define-se a rederesidual D = (V, E):
(x,y) direta(x,y) E c/ capacidade c(x,y) = c(x,y) f(x,y)
(x,y) contrria (y,x) E c/ capacidade c(y,x) = f(x,y)
arestasimultaneamentedireta/contrriade D
Fluxos emredes
4
2
3
3
3
5
1
4
2 1
s
a
d
t
b
c
2
1
1
3
2
1 1
Def.: Dados D e f, define-se a rederesidual D = (V, E):
(x,y) direta(x,y) E c/ capacidade c(x,y) = c(x,y) f(x,y)
(x,y) contrria (y,x) E c/ capacidade c(y,x) = f(x,y)
arestasde D
2
Fluxos emredes
4
2
3
3
3
5
1
4
2 1
s
a
d
t
b
c
2
1
1
3
2
1 1
Def.: Dados D e f, define-se a rederesidual D = (V, E):
(x,y) direta(x,y) E c/ capacidade c(x,y) = c(x,y) f(x,y)
(x,y) contrria (y,x) E c/ capacidade c(y,x) = f(x,y)
2
arestasimultaneamentedireta/contrriade D
Fluxos emredes
2
2
3
3
3
5
1
4
2 1
s
a
d
t
b
c
1
1
3
2
1 1
Def.: Dados D e f, define-se a rederesidual D = (V, E):
(x,y) direta(x,y) E c/ capacidade c(x,y) = c(x,y) f(x,y)
(x,y) contrria (y,x) E c/ capacidade c(y,x) = f(x,y)
2
arestasde D
2
Fluxos emredes
2
2
3
3
3
5
1
4
2 1
s
a
d
t
b
c
1
1
3
2
1 1
Def.: Dados D e f, define-se a rederesidual D = (V, E):
(x,y) direta(x,y) E c/ capacidade c(x,y) = c(x,y) f(x,y)
(x,y) contrria (y,x) E c/ capacidade c(y,x) = f(x,y)
2
2
arestacontrriade D
Fluxos emredes
2
2
3
3
3
5
1
4
2 1
s
a
d
t
b
c
1
1
3
2
1
Def.: Dados D e f, define-se a rederesidual D = (V, E):
(x,y) direta(x,y) E c/ capacidade c(x,y) = c(x,y) f(x,y)
(x,y) contrria (y,x) E c/ capacidade c(y,x) = f(x,y)
2
2
arestade D
Fluxos emredes
2
2
3
3
3
5
1
4
2 1
s
a
d
t
b
c
1
1
3
2
1
Def.: Dados D e f, define-se a rederesidual D = (V, E):
(x,y) direta(x,y) E c/ capacidade c(x,y) = c(x,y) f(x,y)
(x,y) contrria (y,x) E c/ capacidade c(y,x) = f(x,y)
2
2
arestassimultaneamentediretas/contrriasde D
Fluxos emredes
2
2
3
2
2
3
1
1
1 1
s
a
d
t
b
c
Def.: Dados D e f, define-se a rederesidual D = (V, E):
(x,y) direta(x,y) E c/ capacidade c(x,y) = c(x,y) f(x,y)
(x,y) contrria (y,x) E c/ capacidade c(y,x) = f(x,y)
2
2
rederesidual D completa
1
2
1
3
1
Fluxos emredes
Def.:Uma aresta eda rede residual D arestade aumento
de fluxose criada a partir de uma aresta diretade D.
Fluxos emredes
2
2
3
2
2
3
1
1
1 1
s
a
d
t
b
c
2
2
rederesidual D
1
2
1
3
1
Def.:Uma aresta eda rede residual D arestade aumento
de fluxose criada a partir de uma aresta diretade D.
Fluxos emredes
2
2
3
2
2
3
1
1
1 1
s
a
d
t
b
c
2
2
arestasde aumentode fluxo
1
2
1
3
1
Def.:Uma aresta eda rede residual D arestade aumento
de fluxose criada a partir de uma aresta diretade D.
Fluxos emredes
Def.:Uma aresta eda rede residual D arestade reduo
de fluxose criada a partir de uma aresta contrriade D.
Fluxos emredes
2
2
3
2
2
3
1
1
1 1
s
a
d
t
b
c
2
2
rederesidual D
1
2
1
3
1
Def.:Uma aresta eda rede residual D arestade reduo
de fluxose criada a partir de uma aresta contrriade D.
Fluxos emredes
2
2
3
2
2
3
1
1
1 1
s
a
d
t
b
c
2
2
arestasde reduode fluxo
1
2
1
3
1
Def.:Uma aresta eda rede residual D arestade reduo
de fluxose criada a partir de uma aresta contrriade D.
Fluxos emredes
Note quea rederesidual D naverdadeum mapa das
possveisvariaesde fluxonasarestas!
Fluxos emredes
Note quea rederesidual D naverdadeum mapa das
possveisvariaesde fluxonasarestas!
2
2
3
2
2
3
1
1
1 1
s
a
d
t
b
c
2
2
rederesidual D
1
2
1
3
1
Fluxos emredes
Note quea rederesidual D naverdadeum mapa das
possveisvariaesde fluxonasarestas!
2
2
3
2
2
3
1
1
1 1
s
a
d
t
b
c
2
2
arestasde aumento/reduode fluxoemD
1
2
1
3
1
Fluxos emredes
Def.: Um caminhoaumentante um caminho de sa t na
rede residual D.
Fluxos emredes
Def.: Um caminhoaumentante um caminho de sa t na
rede residual D.
2
2
3
2
2
3
1
1
1 1
s
a
d
t
b
c
2
2
1
2
1
3
1
Fluxos emredes
Def.: Um caminhoaumentante um caminho de sa t na
rede residual D.
2
2
3
2
2
3
1
1
1 1
s
a
d
t
b
c
2
2
1
2
1
3
1
exemplode caminhoaumentante
Fluxos emredes
Def.: Um caminhoaumentante um caminho de sa t na
rede residual D.
2
2
3
2
2
3
1
1
1 1
s
a
d
t
b
c
2
2
1
2
1
3
1
exemplode caminhoaumentante
Fluxos emredes
Def.: Um caminhoaumentante um caminho de sa t na
rede residual D.
2
2
3
2
2
3
1
1
1 1
s
a
d
t
b
c
2
2
1
2
1
3
1
exemplode caminhoaumentante
Fluxos emredes
Def.: O gargalode um caminho aumentante em D a
menor capacidade de uma aresta ao longo deste caminho.
Fluxos emredes
Def.: O gargalode um caminho aumentante em D a
menor capacidade de uma aresta ao longo deste caminho.
2
2
3
2
2
3
1
1
1 1
s
a
d
t
b
c
2
2
1
2
1
3
1
gargaloigual a 1
Fluxos emredes
Def.: O gargalode um caminho aumentante em D a
menor capacidade de uma aresta ao longo deste caminho.
gargaloigual a 1
2
2
3
2
2
3
1
1
1 1
s
a
d
t
b
c
2
2
1
2
1
3
1
Fluxos emredes
Def.: O gargalode um caminho aumentante em D a
menor capacidade de uma aresta ao longo deste caminho.
gargaloigual a 1
2
2
3
2
2
3
1
1
1 1
s
a
d
t
b
c
2
2
1
2
1
3
1
Fluxos emredes
Lema: Dados De f, se h um caminho aumentante em D
cujo gargalo g, ento existe um fluxo f
novo
em D com
valor f
novo
(D) = f (D) + g.
Fluxos emredes
Lema: Dados De f, se h um caminho aumentante em D
cujo gargalo g, ento existe um fluxo f
novo
em D com
valor f
novo
(D) = f (D) + g.
Demonstrao:
Seja e
1
e
2
e
3
... e
k
um caminho aumentante em D com gargalo g.
Sejam e
1
, e
2
, e
3
, ... , e
k
as arestas correspondentes em D.
Para j = 1, 2, ..., k, faa:
se e
j
aresta de aumento de fluxo, ento f
novo
(e
j
) = f (e
j
) + g
se e
j
aresta de reduo de fluxo, ento f
novo
(e
j
) = f (e
j
) g
Para as demais arestas de D, faa f
novo
(e
j
) = f (e
j
).
Fluxos emredes
Ilustrao do lema
Fluxos emredes
Ilustrao do lema
4
2
3
3
3
5
3
4
2 1
s
a
d
t
b
c
2
2
0
1
1
3
2
2
1 1
4
redeDcom fluxof tal quef(D)=4
Fluxos emredes
Ilustrao do lema
rederesidual DdeD
2
2
3
2
2
3
1
1
1 1
s
a
d
t
b
c
2
2
1
2
1
3
1
Fluxos emredes
Ilustrao do lema
caminhoaumentanteemDcomgargalo1
2
2
3
2
2
3
1
1
1 1
s
a
d
t
b
c
2
2
1
2
1
3
1
Fluxos emredes
Ilustrao do lema
4
2
3
3
3
5
3
4
2 1
s
a
d
t
b
c
2
2
0
1
1
3
2
2
1 1
4
arestascorrespondentesemD
Fluxos emredes
Ilustrao do lema
4
2
3
3
3
5
3
4
2 1
s
a
d
t
b
c
2
2
0
1
1
3
2
2
1 1
4
arestascorrespondentesemD
+
+

Fluxos emredes
Ilustrao do lema
4
2
3
3
3
5
3
4
2 1
s
a
d
t
b
c
2
2
1
1
0
3
2
3
1 1
5
novo fluxof
novo
emD tal quef
novo
(D) = 5
+
+

Fluxos emredes
Teorema: Dados De f, temos que:
f fluxo mximo sss no h caminho aumentante em D.
Fluxos emredes
Teorema: Dados De f, temos que:
f fluxo mximo sss no h caminho aumentante em D.
4
2
3
3
3
5
3
4
2 1
s
a
d
t
b
c
3
2
2
2
0
4
3
4
1 1
7
fluxof mximocom valor f (D) = 7
Fluxos emredes
Teorema: Dados De f, temos que:
f fluxo mximo sss no h caminho aumentante em D.
rederesidual D relativaaofluxof
1
2
1
1
3
1
1 1
s
a
d
t
b
c
3
3
2
4
4
1
2
Fluxos emredes
Teorema: Dados De f, temos que:
f fluxo mximo sss no h caminho aumentante em D.
nohcaminhoaumentantenarederesidual D!
1
2
1
1
3
1
1 1
s
a
d
t
b
c
3
3
2
4
4
1
2
Fluxos emredes
Teorema: Seja f um fluxo mximo em uma rede D, e
(S, S ) um corte mnimo em D. Ento f (D) = c(S, S ).
Fluxos emredes
s
a
d
t
b
c
4
2
3
3
3
5
3
4
2 1
3
2
2
2
0
3
4
1 1
S
Teorema: Seja f um fluxo mximo em uma rede D, e
(S, S ) um corte mnimo em D. Ento f (D) = c(S, S ).
7
4
Fluxos emredes
s
a
d
t
b
c
4
2
3
3
3
5
3
4
2 1
3
2
2
2
0
3
4
1 1
S
7
4
f (D) = 7 = c(S, S )
Fluxos emredes
s
a
d
t
b
4
2
3
3
3
5
3
4
2 1
3
2
2
2
0
3
4
1 1
S
Corolrio: Sejam f fluxo e (S, S ) corte em D. Ento:
(S, S ) mnimo sss toda aresta de ( S, S )
+
est saturada
e toda aresta de (S, S )
-
tem fluxo zero.
7
4
c
Fluxos emredes
Algoritmo para determinar um fluxo mximo
Entrada: Uma redeD
f fluxoinicial qualquer
D rederesidual de Drelativaaofluxof
enquantoD tem caminhoaumentante e
1
e
2
e
3
... e
k
faa
g gargalodo caminhoaumentante e
1
e
2
e
3
... e
k
para j = 1, 2, ..., k faa
sejae
j
a aresta de Dcorrespondente a e
j
se e
j
aresta de aumento de fluxoento f (e
j
) = f (e
j
) + g
se e
j
aresta de reduo de fluxoento f (e
j
) = f (e
j
) g
fim-para
D rederesidual de Drelativaaonovo fluxof
fim-enquanto
retornar f

Vous aimerez peut-être aussi