Академический Документы
Профессиональный Документы
Культура Документы
Busca em profundidade
Inicializao
t0
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)
tt+1
PE(v) t
para todo vrtice w em N(v) faa
se PE(w) = 0
visitar aresta vw
ento
pai(w) v
executar P(w)
seno
fim-para
tt+1
PS(v) t
fim-do-procedimento
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)
Busca em profundidade
G
a
Busca em profundidade
G
a
PE(v)
PS(v)
Busca em profundidade
G
a
PE(v)
PS(v)
Busca em profundidade
G
a
g
P(e)
v
PE(v)
PS(v)
Busca em profundidade
G
a
g
P(e)
v
PE(v)
PS(v)
Busca em profundidade
G
g
P(e)
v
PE(v)
PS(v)
Busca em profundidade
G
g
P(e) N(e) = {c, d, f, g}
v
PE(v)
PS(v)
Busca em profundidade
G
g
P(e) N(e) = {c, d, f, g}
v
PE(v)
PS(v)
Busca em profundidade
G
g
P(e) N(e) = {c, d, f, g}
v
PE(v)
PS(v)
Busca em profundidade
G
e
c
g
P(e) N(e) = {c, d, f, g}
v
PE(v)
PS(v)
Busca em profundidade
G
e
c
g
P(e) N(e) = {c, d, f, g}
P(c)
PE(v)
PS(v)
Busca em profundidade
G
e
c
g
P(e) N(e) = {c, d, f, g}
P(c)
PE(v)
PS(v)
Busca em profundidade
G
e
c
g
P(e) N(e) = {c, d, f, g}
P(c)
PE(v)
PS(v)
Busca em profundidade
G
e
c
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
PE(v)
PS(v)
Busca em profundidade
G
e
c
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
PE(v)
PS(v)
Busca em profundidade
G
e
c
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
PE(v)
PS(v)
Busca em profundidade
G
e
c
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
PE(v)
PS(v)
Busca em profundidade
G
e
c
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a)
PE(v)
PS(v)
Busca em profundidade
G
e
c
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a)
PE(v)
PS(v)
Busca em profundidade
G
e
c
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a)
PE(v)
PS(v)
Busca em profundidade
G
e
c
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
PE(v)
PS(v)
Busca em profundidade
G
e
c
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
PE(v)
PS(v)
Busca em profundidade
G
e
c
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b)
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b)
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b)
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
d
v
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d)
d
v
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d)
d
v
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d)
d
v
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
d
v
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
d
v
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
d
v
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
d
v
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
d
v
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
d
v
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
d
v
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
d
v
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
d
v
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
d
v
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
d
v
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
d
v
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
d
v
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
d
v
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
d
v
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
d
v
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
d
v
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
d
v
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
d
v
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
d
v
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
P(f )
d
v
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
P(f )
d
v
PE(v)
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
P(f )
d
v
PE(v)
10
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
P(f ) N(f ) = {e, g}
d
v
PE(v)
10
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
P(f ) N(f ) = {e, g}
d
v
PE(v)
10
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
P(f ) N(f ) = {e, g}
d
v
PE(v)
10
PS(v)
Busca em profundidade
G
e
c
a
b
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
P(f ) N(f ) = {e, g}
d
v
PE(v)
10
PS(v)
Busca em profundidade
G
e
c
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
P(f ) N(f ) = {e, g}
d
v
PE(v)
10
PS(v)
Busca em profundidade
G
e
c
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
P(f ) N(f ) = {e, g}
P(g)
d
v
PE(v)
10
PS(v)
Busca em profundidade
G
e
c
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
P(f ) N(f ) = {e, g}
P(g)
d
v
PE(v)
10
PS(v)
Busca em profundidade
G
e
c
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
P(f ) N(f ) = {e, g}
P(g)
d
v
PE(v)
10
11
PS(v)
Busca em profundidade
G
e
c
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
P(f ) N(f ) = {e, g}
P(g) N(g) = {e, f}
d
v
PE(v)
10
11
PS(v)
Busca em profundidade
G
e
c
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
P(f ) N(f ) = {e, g}
P(g) N(g) = {e, f}
d
v
PE(v)
10
11
PS(v)
Busca em profundidade
G
e
c
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
P(f ) N(f ) = {e, g}
P(g) N(g) = {e, f}
d
v
PE(v)
10
11
PS(v)
Busca em profundidade
G
e
c
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
P(f ) N(f ) = {e, g}
P(g) N(g) = {e, f}
d
v
PE(v)
10
11
PS(v)
Busca em profundidade
G
e
c
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
P(f ) N(f ) = {e, g}
P(g) N(g) = {e, f}
d
v
PE(v)
10
11
PS(v)
Busca em profundidade
G
e
c
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
P(f ) N(f ) = {e, g}
P(g) N(g) = {e, f}
d
v
PE(v)
10
11
PS(v)
12
Busca em profundidade
G
e
c
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
P(f ) N(f ) = {e, g}
P(g) N(g) = {e, f}
d
v
PE(v)
10
11
PS(v)
13
12
Busca em profundidade
G
e
c
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
P(f ) N(f ) = {e, g}
P(g) N(g) = {e, f}
d
v
PE(v)
10
11
PS(v)
13
12
Busca em profundidade
G
e
c
g
P(e) N(e) = {c, d, f, g}
P(c) N(c) = {a, b, d, e}
P(a) N(a) = {b, c}
P(b) N(b) = {a, c, d}
P(d) N(d) = {b, c, e}
P(f ) N(f ) = {e, g}
P(g) N(g) = {e, f}
d
v
PE(v)
10
11
PS(v)
14
13
12
Busca em profundidade
Esgotar o filho antes de esgotar o pai
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).
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
PE(v)
10
11
PS(v)
14
13
12
10
11
12
13
a
b
c
d
e
f
g
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 ).
14
Busca em profundidade
Aplicao 1: Dado um grafo G, verificar se G conexo.
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):
xw
Cx
enquanto x v faa
x pai(x)
colocar x esquerda em C
fim-enquanto
imprimir C
Obs: C no necessariamente o 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
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):
xv
Cx
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.
Busca em profundidade
Aplicao 5: Dado um grafo G, decidir se G 2-colorvel.
G
a'
b'
c'
d'
e'
f'
g'
h'
?
2-colorvel
no 2-colorvel
Busca em profundidade
Aplicao 5: Dado um grafo G, decidir se G 2-colorvel.
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 que no seja uma ponte, existem
dois caminhos internamente disjuntos entre qualquer
par de vrtices. Neste caso, o bloco um subgrafo
maximal biconexo.
Busca em profundidade
Aplicao 6: Dado um grafo G, determinar as articulaes
e os blocos de G.
G
a
Busca em profundidade
Aplicao 6: Dado um grafo G, determinar as articulaes
e os blocos de G.
G
a
b
d
e
g
Busca em profundidade
Aplicao 6: Dado um grafo G, determinar as articulaes
e os blocos de G.
G
a
Busca em profundidade
Aplicao 6: Dado um grafo G, determinar as articulaes
e os blocos de G.
G
a
d
f
Busca em profundidade
Aplicao 6: Dado um grafo G, determinar as articulaes
e os blocos de G.
G
a
Busca em profundidade
Aplicao 6: Dado um grafo G, determinar as articulaes
e os blocos de G.
G
articulao
Busca em profundidade
Aplicao 6: Dado um grafo G, determinar as articulaes
e os blocos de G.
G
articulao
bloco
Busca em profundidade
Aplicao 6: Dado um grafo G, determinar as articulaes
e os blocos de G.
G
articulao
bloco
ponte
g
Busca em profundidade
Aplicao 6: Dado um grafo G, determinar as articulaes
e os blocos de G.
G
articulao
bloco
ponte
g
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
G
e
c
g
d
v
PE(v)
10
11
PS(v)
14
13
12
back(v)
Busca em profundidade
Aplicao 6: Dado um grafo G, determinar as articulaes
e os blocos de G.
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)
se back(w) PE(v) ento desempilhar 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.)
Chamada Externa
enquanto existe v em V(G) tal que PE(v) = 0 faa
executar P(v) -- nova raiz da busca
seno
se PS(w) = 0
(se w ainda no saiu da busca)
ento marcar vw como aresta vermelha de retorno
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
PE(v)
PS(v)
PE(v)
PS(v)
PE(v)
PS(v)
PE(v)
PS(v)
PE(v)
PS(v)
PE(v)
PS(v)
PE(v)
PS(v)
PE(v)
PS(v)
PE(v)
PS(v)
PE(v)
PS(v)
PE(v)
PS(v)
PE(v)
PS(v)
PE(v)
PS(v)
PE(v)
PS(v)
PE(v)
10
PS(v)
PE(v)
10
11
PS(v)
PE(v)
10
11
PS(v)
PE(v)
10
11
PS(v)
12
PE(v)
10
11
PS(v)
13
12
PE(v)
10
11
PS(v)
13
12
PE(v)
10
11
PS(v)
14
13
12
PE(v)
10
11
15
PS(v)
14
13
12
PE(v)
10
11
15
PS(v)
14
13
12
PE(v)
10
11
15
PS(v)
14
13
12
16
PE(v)
10
11
15
17
PS(v)
14
13
12
16
PE(v)
10
11
15
17
18
PS(v)
14
13
12
16
PE(v)
10
11
15
17
18
PS(v)
14
13
12
16
PE(v)
10
11
15
17
18
PS(v)
14
13
12
16
PE(v)
10
11
15
17
18
PS(v)
14
13
12
16
PE(v)
10
11
15
17
18
PS(v)
14
13
12
16
19
PE(v)
10
11
15
17
18
PS(v)
14
13
12
16
20
19
t
a
b
c
d
e
f
g
h
i
j
PE(v)
10
11
15
17
18
PS(v)
14
13
12
16
20
19
10
11
12
13
14
15
16
17
18
19
20
g
cfc
PE(v)
10
11
15
17
18
PS(v)
14
13
12
16
20
19
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.
g
cfc
PE(v)
10
11
15
17
18
PS(v)
14
13
12
16
20
19
old(v)
15
17
17
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 } )
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.
Q=
v
PE(v)
PS(v)
Q={a}
v
PE(v)
PS(v)
Q = { a, b }
v
PE(v)
PS(v)
Q = { a, b, c }
v
PE(v)
PS(v)
Q = { a, b, c }
v
PE(v)
PS(v)
Q = { a, b, c }
v
PE(v)
PS(v)
old(v)
Q = { a, b, c }
v
PE(v)
PS(v)
old(v)
Q = { a, b, c }
v
PE(v)
PS(v)
old(v)
Q = { a, b, c, d }
v
PE(v)
PS(v)
old(v)
Q = { a, b, c, d }
v
PE(v)
PS(v)
old(v)
Q = { a, b, c, d }
v
PE(v)
PS(v)
old(v)
Vrtice forte!
Q = { a, b, c, d }
v
PE(v)
PS(v)
old(v)
Q=
v
PE(v)
PS(v)
old(v)
Q={e}
v
PE(v)
PS(v)
old(v)
Q={e}
v
PE(v)
PS(v)
old(v)
Q = { e, f }
v
PE(v)
10
PS(v)
old(v)
Q = { e, f, g }
v
PE(v)
10
11
PS(v)
old(v)
Q = { e, f, g }
v
PE(v)
10
11
PS(v)
old(v)
Q = { e, f, g }
v
PE(v)
10
11
PS(v)
12
old(v)
Q = { e, f, g }
v
PE(v)
10
11
PS(v)
13
12
old(v)
Q = { e, f, g }
v
PE(v)
10
11
PS(v)
13
12
old(v)
Vrtice forte!
Q = { e, f, g }
v
PE(v)
10
11
PS(v)
14
13
12
old(v)
Q=
v
PE(v)
10
11
PS(v)
14
13
12
old(v)
Q={h}
v
PE(v)
10
11
15
PS(v)
14
13
12
old(v)
Q={h}
v
PE(v)
10
11
15
PS(v)
14
13
12
old(v)
Vrtice forte!
Q={h}
v
PE(v)
10
11
15
PS(v)
14
13
12
16
old(v)
15
Q=
v
PE(v)
10
11
15
PS(v)
14
13
12
16
old(v)
15
Q={i}
v
PE(v)
10
11
15
17
PS(v)
14
13
12
16
old(v)
15
Q = { i, j }
v
PE(v)
10
11
15
17
18
PS(v)
14
13
12
16
old(v)
15
Q = { i, j }
v
PE(v)
10
11
15
17
18
PS(v)
14
13
12
16
old(v)
15
Q = { i, j }
v
PE(v)
10
11
15
17
18
PS(v)
14
13
12
16
old(v)
15
Q = { i, j }
v
PE(v)
10
11
15
17
18
PS(v)
14
13
12
16
old(v)
15
Q = { i, j }
v
PE(v)
10
11
15
17
18
PS(v)
14
13
12
16
19
old(v)
15
17
Vrtice forte!
Q = { i, j }
v
PE(v)
10
11
15
17
18
PS(v)
14
13
12
16
20
19
old(v)
15
17
17
Q = ==> FIM!
v
PE(v)
10
11
15
17
18
PS(v)
14
13
12
16
20
19
old(v)
15
17
17
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.
G
(digrafo acclico)
PE(v)
PS(v)
G
(digrafo acclico)
PE(v)
PS(v)
G
(digrafo acclico)
PE(v)
PS(v)
G
(digrafo acclico)
PE(v)
PS(v)
G
(digrafo acclico)
PE(v)
PS(v)
G
(digrafo acclico)
PE(v)
PS(v)
G
(digrafo acclico)
PE(v)
PS(v)
G
(digrafo acclico)
PE(v)
PS(v)
G
(digrafo acclico)
PE(v)
PS(v)
G
(digrafo acclico)
PE(v)
PS(v)
G
(digrafo acclico)
PE(v)
PS(v)
G
(digrafo acclico)
PE(v)
PS(v)
G
(digrafo acclico)
PE(v)
PS(v)
10
G
(digrafo acclico)
PE(v)
11
PS(v)
10
G
(digrafo acclico)
PE(v)
11
PS(v)
10
G
(digrafo acclico)
PE(v)
11
PS(v)
10
G
(digrafo acclico)
PE(v)
12
11
PS(v)
10
G
(digrafo acclico)
PE(v)
12
13
11
PS(v)
10
G
(digrafo acclico)
PE(v)
12
13
11
PS(v)
14
10
G
(digrafo acclico)
PE(v)
12
13
11
PS(v)
15
14
10
G
(digrafo acclico)
PE(v)
12
13
11
PS(v)
15
14
16
10
G
(digrafo acclico)
PE(v)
17
12
13
11
PS(v)
15
14
16
10
G
(digrafo acclico)
PE(v)
17
12
13
18
11
PS(v)
15
14
16
10
G
(digrafo acclico)
PE(v)
17
12
13
18
11
PS(v)
15
14
16
10
G
(digrafo acclico)
PE(v)
17
12
13
18
11
PS(v)
15
14
19
16
10
G
(digrafo acclico)
PE(v)
17
12
13
18
11
PS(v)
15
14
19
16
10
G
(digrafo acclico)
PE(v)
17
12
13
18
11
PS(v)
20
15
14
19
16
10
G
(digrafo acclico)
PS(v)
20
15
14
19
16
10
G
(digrafo acclico)
PS(v)
20
19
16
15
14
10
G
(digrafo acclico)
Ordenao topolgica
a
v1
v2
v3
v4
v5
v6
v7
v8
v9
v10
G
(digrafo acclico)
Ordenao topolgica
a
G
(digrafo acclico)
Ordenao topolgica
a
G
(digrafo acclico)
Ordenao topolgica
a
G
(digrafo acclico)
Ordenao topolgica
a
G
(digrafo acclico)
Ordenao topolgica
a
v1
v2
v3
v4
v5
v6
v7
v8
v9
v10
b
c
d
g
b
c
d
g
dc
dc
gdc
gdc
agdc
agdc
bagdc
bagdc
fbagdc
fbagdc
hfbagdc
hfbagdc
ehfbagdc
ehfbagdc
jehfbagdc
jehfbagdc
ijehfbagdc
b
c
d
g
ijehfbagdc
Ordenao topolgica!
Busca em largura
Inicializao
t0
-- 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
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)
visitar a aresta
ento vw aresta irmo
somente se w
seno vw aresta primo
ainda est em F
seno se nvel(w) = nvel(v)+1
ento vw aresta tio
fim-para
fim-enquanto
Busca em largura
a
F=
h
g
L(v)
Busca em largura
a
F=a
h
g
L(v)
Busca em largura
a
F=a
h
g
L(v)
Busca em largura
a
F=ab
h
g
L(v)
Busca em largura
a
F=abc
h
g
L(v)
Busca em largura
a
F=abc
h
g
L(v)
Busca em largura
a
F=abcd
h
g
L(v)
Busca em largura
a
F=abcd
h
g
L(v)
Busca em largura
a
F=abcd
h
g
L(v)
Busca em largura
a
F=abcd
h
g
L(v)
Busca em largura
a
F=abcde
h
g
L(v)
Busca em largura
a
F=abcde
h
g
L(v)
Busca em largura
a
F=abcdef
h
g
L(v)
Busca em largura
a
F=abcdefg
h
g
L(v)
Busca em largura
a
F=abcdefg
h
g
L(v)
Busca em largura
a
F=abcdefg
h
g
L(v)
Busca em largura
a
F=abcdefg
h
g
L(v)
Busca em largura
a
F=abcdefgh
h
g
L(v)
Busca em largura
a
F=abcdefgh
h
g
L(v)
Busca em largura
a
F=abcdefgh
h
g
L(v)
Busca em largura
a
F=abcdefgh
h
g
L(v)
Busca em largura
a
F=abcdefgh
h
g
L(v)
Busca em largura
a
F=abcdefgh
h
g
L(v)
Busca em largura
Esgotar o pai antes de processar os filhos
Busca em largura
Complexidade da busca em largura:
O(n + m)
( onde n = V(G) e m = E(G) )
Busca em largura
A floresta 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 arestasirmo (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
Propriedade fundamental da busca em largura
Seja vw uma aresta de um grafo G, e seja T uma floresta de
largura de G. Ento:
| nvel(v) nvel(w) | 1.
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-irmo nem 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.
matriz de pesos W
a
1
2
1 3
3
1
d
c
3
1
2
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 Nout(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 acordo com sua nova prioridade)
pai(w) v
fim-para
fim-enquanto
Algoritmo de Dijkstra
raiz: a
a
6
1
2
1 3
3
1
d
1
2
L(v)
pai(v)
null
null
null
null
null
Algoritmo de Dijkstra
raiz: a
a
6
1
2
1 3
3
1
d
1
2
L(v)
pai(v)
null
null
null
null
null
Algoritmo de Dijkstra
raiz: a
a
6
1
2
1 3
3
1
d
1
2
L(v)
pai(v)
null
null
null
null
null
Algoritmo de Dijkstra
raiz: a
a
6
1
2
1 3
3
1
d
1
2
L(v)
pai(v)
null
null
null
null
Algoritmo de Dijkstra
raiz: a
a
6
1
2
1 3
3
1
d
1
2
L(v)
pai(v)
null
null
null
Algoritmo de Dijkstra
raiz: a
a
6
1
2
1 3
3
1
d
1
2
L(v)
pai(v)
null
null
Algoritmo de Dijkstra
raiz: a
a
6
1
2
1 3
3
1
d
1
2
L(v)
pai(v)
null
null
Algoritmo de Dijkstra
raiz: a
a
6
1
2
1 3
3
1
d
1
2
L(v)
pai(v)
null
null
Algoritmo de Dijkstra
raiz: a
a
6
1
2
1 3
3
1
d
1
2
L(v)
pai(v)
null
null
Algoritmo de Dijkstra
raiz: a
a
6
1
2
1 3
3
1
d
1
2
L(v)
pai(v)
null
null
Algoritmo de Dijkstra
raiz: a
a
6
1
2
1 3
3
1
d
1
2
L(v)
pai(v)
null
Algoritmo de Dijkstra
raiz: a
a
6
1
2
1 3
3
1
d
1
2
L(v)
pai(v)
null
Algoritmo de Dijkstra
raiz: a
a
6
1
2
1 3
3
1
d
1
2
L(v)
pai(v)
null
Algoritmo de Dijkstra
raiz: a
a
6
1
2
1 3
3
1
d
1
2
L(v)
pai(v)
null
Algoritmo de Dijkstra
raiz: a
a
6
1
2
1 3
3
1
d
1
2
L(v)
pai(v)
null
Algoritmo de Dijkstra
raiz: a
a
6
1
2
1 3
3
1
d
1
2
L(v)
pai(v)
null
Algoritmo de Dijkstra
raiz: a
a
6
1
2
1 3
3
1
d
1
2
L(v)
pai(v)
null
Algoritmo de Dijkstra
raiz: a
a
6
1
2
1 3
3
1
d
1
2
L(v)
pai(v)
null
Algoritmo de Dijkstra
raiz: a
a
6
1
2
1 3
3
1
d
1
2
L(v)
pai(v)
null
Algoritmo de Dijkstra
raiz: a
a
6
1
2
1 3
3
1
d
1
2
L(v)
pai(v)
null
Algoritmo de Dijkstra
raiz: a
a
6
1
2
1 3
3
1
d
1
2
L(v)
pai(v)
null
Algoritmo de Dijkstra
raiz: a
a
6
1
2
1 3
3
1
d
1
2
L(v)
pai(v)
null
Algoritmo de Dijkstra
raiz: a
a
6
1
2
1 3
3
1
d
1
2
L(v)
pai(v)
null
FIM!
Algoritmo de Dijkstra
Questo: Como determinar os caminhos mnimos?
Soluo: Observe que os ponteiros pai(w) determinam
naturalmente uma rvore T, chamada de rvore de
caminhos mnimos (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 xy e yx, ambas com peso p. Por outro lado, se
no existe aresta xy em G, criar em H duas arestas
direcionadas xy e yx com 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.
matriz de pesos W
1
1
2
1 3
3
1
4
3
3
1
2
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
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.
Matriz-soluo: custos de todos os caminhos mnimos
1
1
2
1 3
3
1
4
3
3
1
2
Algoritmo de Floyd-Warshall
Ideia do algoritmo: Calcular os valores Dk(i, j)
Dk(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:
D0(i, j) = W(i, j)
(valor na posio (i, j) da matriz de pesos W )
Dn(i, j) = custo do caminho mnimo de i a j
(valor na posio (i, j) da matriz-soluo)
Algoritmo de Floyd-Warshall
Ideia do algoritmo: Calcular os valores Dk(i, j)
Definindo as matrizes do algoritmo:
Para cada k = 0, 1, 2, , n, defina Dk como a matriz
contendo todos os valores Dk(i, j)
Observe que:
D0 = W (matriz de pesos da entrada)
Dn = matriz-soluo
Algoritmo de Floyd-Warshall
Ideia do algoritmo: Calcular os valores Dk(i, j)
Esboo do algoritmo:
inicializar D0 W
para cada k = 1, 2, , n faa
calcular a matriz Dk
Algoritmo de Floyd-Warshall
Ideia do algoritmo: Calcular os valores Dk(i, j)
Esboo do algoritmo:
inicializar D0 W
para cada k = 1, 2, , n faa
calcular a matriz Dk
Clculo da matriz Dk :
para cada i = 1, 2, , n faa
para cada j = 1, 2, , n faa
calcular Dk(i, j)
Algoritmo de Floyd-Warshall
Ideia do algoritmo: Calcular os valores Dk(i, j)
Esboo do algoritmo:
inicializar D0 W
para cada k = 1, 2, , n faa
para cada i = 1, 2, , n faa
para cada j = 1, 2, , n faa
calcular Dk(i, j)
Algoritmo de Floyd-Warshall
Ideia do algoritmo: Calcular os valores Dk(i, j)
Frmula para calcular Dk(i, j):
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
Algoritmo de Floyd-Warshall
Ideia do algoritmo: Calcular os valores Dk(i, j)
Frmula para calcular Dk(i, j):
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
Algoritmo de Floyd-Warshall
Ideia do algoritmo: Calcular os valores Dk(i, j)
Frmula para calcular Dk(i, j):
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
Algoritmo de Floyd-Warshall
Ideia do algoritmo: Calcular os valores Dk(i, j)
Frmula para calcular Dk(i, j):
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
i
Dk-1(i, k)
Dk-1(k, j)
Algoritmo de Floyd-Warshall
Ideia do algoritmo: Calcular os valores Dk(i, j)
Esboo do algoritmo:
inicializar D0 W
para cada k = 1, 2, , n faa
para cada i = 1, 2, , n faa
para cada j = 1, 2, , n faa
calcular Dk(i, j)
Algoritmo de Floyd-Warshall
Ideia do algoritmo: Calcular os valores Dk(i, j)
Esboo do algoritmo:
inicializar D0 W
para cada k = 1, 2, , n faa
para cada i = 1, 2, , n faa
para cada j = 1, 2, , n faa
Dk(i, j) min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
Algoritmo de Floyd-Warshall
Ideia do algoritmo: Calcular os valores Dk(i, j)
Esboo do algoritmo:
inicializar D0 W
para cada k = 1, 2, , n faa
para cada i = 1, 2, , n faa
para cada j = 1, 2, , n faa
Dk(i, j) min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
Algoritmo de Floyd-Warshall
Ideia do algoritmo: Calcular os valores Dk(i, j)
Esboo do algoritmo:
inicializar D0 W
para cada k = 1, 2, , n faa
O(n3)
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de Dk a partir de Dk-1
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
1
2
1 3
3
1
4
1
2
1
3
2
3
4
5
D0
D1
1
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de Dk a partir de Dk-1
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
1
2
1 3
3
1
4
1
2
3
4
D0
D1
2
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de Dk a partir de Dk-1
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
1
2
1 3
3
1
4
1
2
3
4
D0
D1
3
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de Dk a partir de Dk-1
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
1
2
1 3
3
1
4
1
2
3
4
D0
D1
4
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de Dk a partir de Dk-1
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
1
2
1 3
3
1
4
1
2
3
4
D0
D1
5
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de Dk a partir de Dk-1
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
1
2
1 3
3
1
4
1
2
3
4
D0
D1
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de Dk a partir de Dk-1
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
1
2
1 3
3
1
4
1
2
3
4
D0
D1
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de Dk a partir de Dk-1
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
1
2
1 3
3
1
4
1
2
3
4
D0
D1
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de Dk a partir de Dk-1
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
1
2
1 3
3
1
4
1
2
3
4
D0
D1
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de Dk a partir de Dk-1
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
1
2
1 3
3
1
4
1
2
3
4
D0
D1
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de Dk a partir de Dk-1
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
1
2
1 3
3
1
4
1
2
3
4
D0
D1
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de Dk a partir de Dk-1
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
1
2
1 3
3
1
4
1
2
D0
D1
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de Dk a partir de Dk-1
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
1
2
1 3
3
1
4
1
2
D0
D1
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de Dk a partir de Dk-1
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
1
2
1 3
3
1
4
1
2
D0
D1
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de Dk a partir de Dk-1
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
1
2
1 3
3
1
4
1
2
D0
D1
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de Dk a partir de Dk-1
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
1
2
1 3
3
1
4
1
2
D0
D1
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de Dk a partir de Dk-1
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
1
2
1 3
3
1
4
1
2
D0
D1
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de Dk a partir de Dk-1
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
1
2
1 3
3
1
4
1
2
D0
D1
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de Dk a partir de Dk-1
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
1
2
1 3
3
1
4
1
2
D0
D1
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de Dk a partir de Dk-1
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
1
2
1 3
3
1
4
1
2
D0
D1
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de Dk a partir de Dk-1
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
1
2
1 3
3
1
4
1
2
D0
D1
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de Dk a partir de Dk-1
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
1
2
1 3
3
1
4
1
2
D0
D1
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de Dk a partir de Dk-1
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
1
2
1 3
3
1
4
1
2
D0
D1
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de Dk a partir de Dk-1
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
1
2
1 3
3
1
4
1
2
D0
D1
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de Dk a partir de Dk-1
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
1
2
1 3
3
1
4
1
2
D0
D1
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de Dk a partir de Dk-1
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
1
2
1 3
3
1
4
1
2
D0
D1
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de Dk a partir de Dk-1
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
1
2
1 3
3
1
4
1
2
D0
3
valores que melhoraram
considerando 1
como vrtice intermedirio
D1
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de Dk a partir de Dk-1
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
1
2
1 3
3
1
4
1
2
D1
3
valores que melhoraram
considerando 1 e 2
como vrtices intermedirios
D2
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de Dk a partir de Dk-1
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
1
2
1 3
3
1
4
1
2
D2
3
valores que melhoraram
considerando 1, 2, 3
como vrtices intermedirios
D3
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de Dk a partir de Dk-1
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
1
2
1 3
3
1
4
1
2
D3
3
valores que melhoraram
considerando 1, 2, 3, 4
como vrtices intermedirios
D4
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de Dk a partir de Dk-1
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
1
2
1 3
3
1
4
1
2
D4
3
nenhum valor melhorou
considerando 1, 2, 3, 4, 5
como vrtices intermedirios
D5
Algoritmo de Floyd-Warshall
Simulao: visualizar o clculo de Dk a partir de Dk-1
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
1
2
1 3
3
1
4
1
2
D4
3
MATRIZ FINAL DE
CUSTOS DOS
CAMINHOS MNIMOS
D5
Algoritmo de Floyd-Warshall
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
Soluo: Determinar os valores Pk(i, j)
Pk(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,
P0(i, j) =
null , caso contrrio
Algoritmo de Floyd-Warshall
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
Definindo as matrizes do auxiliares do algoritmo:
Para cada k = 0, 1, 2, , n, defina Pk como a matriz
contendo todos os valores Pk(i, j)
1
1
2
1 3
3
1
4
3
3
1
2
null
null
null
null
null
null
null
null
null
null
null
null
null
null
P0
Algoritmo de Floyd-Warshall
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
Como calcular Pk(i, j) ?
Sabemos que:
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
Se Dk-1(i, j) < Dk-1(i, k) + Dk-1(k, j)
ento Pk(i, j) = Pk-1(i, j) ( mesmo vrtice da iterao anterior)
seno Pk(i, j) = Pk-1(k, j) ( nova possibilidade de caminho)
Algoritmo de Floyd-Warshall
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
Como calcular Pk(i, j) ?
Sabemos que:
Dk(i, j) = min { Dk-1(i, j) , Dk-1(i, k) + Dk-1(k, j) }
Se Dk-1(i, j) < Dk-1(i, k) + Dk-1(k, j)
ento Pk(i, j) = Pk-1(i, j)
seno Pk(i, j) = Pk-1(k, j)
Pk-1(k, j)
i
k
Algoritmo de Floyd-Warshall
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
Novo algoritmo:
inicializar D0 e P0
para cada k = 1, 2, , n faa
para cada i = 1, 2, , n faa
para cada j = 1, 2, , n faa
se Dk-1(i, j) < Dk-1(i, k) + Dk-1(k, j)
ento Dk(i, j) = Dk-1(i, j) e Pk(i, j) = Pk-1(i, j)
seno Dk(i, j) = Dk-1(i, k) + Dk-1(k, j) e
Pk(i, j) = Pk-1(k, j)
Algoritmo de Floyd-Warshall
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
1
2
1 3
3
1
4
1
2
3
MATRIZES FINAIS
D5
P5
1
null
null
null
null
null
Algoritmo de Floyd-Warshall
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
Exemplo: calcular o caminho mnimo de 5 a 3
1
1
2
1 3
3
1
4
3
3
1
2
P5
1
null
null
null
null
null
Algoritmo de Floyd-Warshall
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
Exemplo: calcular o caminho mnimo de 5 a 3
1
5
6
1
2
1 3
3
1
4
3
3
1
2
P5
1
null
null
null
null
null
Algoritmo de Floyd-Warshall
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
Exemplo: calcular o caminho mnimo de 5 a 3
1
5
6
1
2
1 3
3
1
4
3
3
P5(5, 3) = 2
1
2
P5
1
null
null
null
null
null
Algoritmo de Floyd-Warshall
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
Exemplo: calcular o caminho mnimo de 5 a 3
1
5
6
1
2
1
4
1 3
3
3
1
2
P5
1
null
null
null
null
null
Algoritmo de Floyd-Warshall
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
Exemplo: calcular o caminho mnimo de 5 a 3
1
5
6
1
2
1 3
3
1
4
3
3
P5(5, 2) = 1
1
2
P5
1
null
null
null
null
null
Algoritmo de Floyd-Warshall
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
Exemplo: calcular o caminho mnimo de 5 a 3
1
5
6
1
2
1
4
1 3
3
3
1
2
P5
1
null
null
null
null
null
Algoritmo de Floyd-Warshall
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
Exemplo: calcular o caminho mnimo de 5 a 3
1
5
6
1
2
1 3
3
1
4
3
3
P5(5, 1) = 4
1
2
P5
1
null
null
null
null
null
Algoritmo de Floyd-Warshall
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
Exemplo: calcular o caminho mnimo de 5 a 3
1
5
6
1
2
1
4
1 3
3
3
1
2
P5
1
null
null
null
null
null
Algoritmo de Floyd-Warshall
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
Exemplo: calcular o caminho mnimo de 5 a 3
1
5
6
1
2
1 3
3
1
4
3
3
P5(5, 4) = 5
1
2
P5
1
null
null
null
null
null
Algoritmo de Floyd-Warshall
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
Exemplo: calcular o caminho mnimo de 5 a 3
1
5
6
1
2
1
4
1 3
3
3
1
2
P5
1
null
null
null
null
null
Algoritmo de Floyd-Warshall
Questo: Como determinar os caminhos mnimos? (e no
s seus custos )
Exemplo: calcular o caminho mnimo de 5 a 3
1
5
6
1
2
1 3
3
1
4
3
3
FIM!
1
2
P5
1
null
null
null
null
null
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.
Algoritmo de 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 e1, e2, ,em uma ordenao das arestas de G onde peso(ej) peso(ej+1), j = 1,, m1
para j = 1,, m faa
se ej no forma ciclo com as arestas em E(T)
ento acrescente ej a E(T)
fim-se
fim-para
retorne T
Algoritmo de Kruskal
Exemplo: Simulao da execuo do algoritmo.
8
4
2
14
11
4
8
10
Algoritmo de Kruskal
Exemplo: Simulao da execuo do algoritmo.
8
4
2
14
11
4
8
10
Algoritmo de Kruskal
Exemplo: Simulao da execuo do algoritmo.
8
4
2
14
11
4
8
10
Algoritmo de Kruskal
Exemplo: Simulao da execuo do algoritmo.
8
4
2
14
11
4
8
10
Algoritmo de Kruskal
Exemplo: Simulao da execuo do algoritmo.
8
4
2
14
11
4
8
10
Algoritmo de Kruskal
Exemplo: Simulao da execuo do algoritmo.
8
4
2
14
11
4
8
10
Algoritmo de Kruskal
Exemplo: Simulao da execuo do algoritmo.
8
4
2
14
11
4
8
10
Algoritmo de Kruskal
Exemplo: Simulao da execuo do algoritmo.
8
4
2
14
11
4
8
10
Algoritmo de Kruskal
Exemplo: Simulao da execuo do algoritmo.
8
4
2
14
11
4
8
10
Algoritmo de Kruskal
Exemplo: Simulao da execuo do algoritmo.
8
4
2
14
11
4
8
10
Algoritmo de Kruskal
Exemplo: Simulao da execuo do algoritmo.
8
4
2
14
11
4
8
10
Algoritmo de Kruskal
Exemplo: Simulao da execuo do algoritmo.
8
4
2
14
11
4
8
10
Algoritmo de Kruskal
Exemplo: Simulao da execuo do algoritmo.
8
4
2
14
11
4
8
10
Algoritmo de Kruskal
Exemplo: Simulao da execuo do algoritmo.
8
4
2
14
11
4
8
10
Algoritmo de Kruskal
Exemplo: Simulao da execuo do algoritmo.
8
4
2
14
11
4
8
10
Algoritmo de Kruskal
Exemplo: Simulao da execuo do algoritmo.
custo final da rvore geradora: 37
7
8
4
2
14
11
4
8
10
Algoritmo de Kruskal
Questo: Como saber de modo eficiente se a aresta em
considerao forma ciclo com as azuis j escolhidas?
7
8
4
2
14
11
4
8
10
Algoritmo de Kruskal
Estratgia: Uma nova aresta pode ser incorporada
soluo (floresta) parcial se ela une duas rvores distintas!
7
8
4
2
14
11
4
8
10
Algoritmo de Kruskal
Incio: Os n vrtices formam n rvores triviais distintas
(cada uma com sua cor). Nenhuma aresta foi escolhida.
8
2
4
4
9
2
14
11
4
7
10
7
6
2
Algoritmo de Kruskal
Evoluo do algoritmo: medida que as arestas so
escolhidas, realizamos a fuso das rvores.
8
2
4
4
9
2
14
11
4
7
10
7
6
2
Algoritmo de Kruskal
Evoluo do algoritmo: medida que as arestas so
escolhidas, realizamos a fuso das rvores.
8
2
4
4
9
2
14
11
4
7
10
7
6
2
Algoritmo de Kruskal
Evoluo do algoritmo: medida que as arestas so
escolhidas, realizamos a fuso das rvores.
8
2
4
4
9
2
14
11
4
7
10
6
6
2
Algoritmo de Kruskal
Evoluo do algoritmo: medida que as arestas so
escolhidas, realizamos a fuso das rvores.
8
2
4
4
9
2
14
11
4
7
10
6
6
2
Algoritmo de Kruskal
Evoluo do algoritmo: medida que as arestas so
escolhidas, realizamos a fuso das rvores.
8
2
4
4
9
2
14
11
4
7
10
3
3
2
Algoritmo de Kruskal
Evoluo do algoritmo: medida que as arestas so
escolhidas, realizamos a fuso das rvores.
8
1
4
4
9
2
14
11
4
7
10
3
3
2
Algoritmo de Kruskal
Evoluo do algoritmo: medida que as arestas so
escolhidas, realizamos a fuso das rvores.
8
1
4
4
9
2
14
11
4
7
10
3
3
2
Algoritmo de Kruskal
Evoluo do algoritmo: medida que as arestas so
escolhidas, realizamos a fuso das rvores.
8
1
4
4
9
2
14
11
4
7
10
3
3
2
Algoritmo de Kruskal
Evoluo do algoritmo: medida que as arestas so
escolhidas, realizamos a fuso das rvores.
8
1
4
3
9
2
14
11
4
7
10
3
3
2
Algoritmo de Kruskal
Evoluo do algoritmo: medida que as arestas so
escolhidas, realizamos a fuso das rvores.
8
1
4
1
9
2
14
11
4
7
10
1
1
2
Algoritmo de Kruskal
Evoluo do algoritmo: medida que as arestas so
escolhidas, realizamos a fuso das rvores.
8
1
4
1
9
2
14
11
4
7
10
1
1
2
Algoritmo de Kruskal
Evoluo do algoritmo: medida que as arestas so
escolhidas, realizamos a fuso das rvores.
8
1
4
1
9
2
14
11
4
7
10
1
1
2
Algoritmo de Kruskal
Evoluo do algoritmo: medida que as arestas so
escolhidas, realizamos a fuso das rvores.
8
1
4
1
9
2
14
11
4
7
10
1
1
2
Algoritmo de Kruskal
Evoluo do algoritmo: medida que as arestas so
escolhidas, realizamos a fuso das rvores.
8
1
4
1
9
2
14
11
4
7
10
1
1
2
Algoritmo de Kruskal
Evoluo do algoritmo: medida que as arestas so
escolhidas, realizamos a fuso das rvores.
8
1
4
1
9
2
14
11
4
7
10
1
1
2
Algoritmo de Kruskal
Como implementar a verificao de ciclos?
Algoritmo de 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
Sj { j}; -- inicializao dos n conjuntos disjuntos de vrtices das n rvores triviais
seja e1, e2, ,em uma ordenao das arestas de G onde peso(ej) peso(ej+1), j = 1,, m1
para j = 1,, m faa
sejam Sp e Sq os conjuntos associados aos extremos da aresta ej (onde p q)
se p q ento
acrescente ej a E(T)
Sp Sp U Sq
fim-se
fim-para
retorne T
Algoritmo de Kruskal
Clculo da Complexidade
Algoritmo de 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
Sj { j}; -- inicializao dos n conjuntos disjuntos de vrtices das n rvores triviais
seja e1, e2, ,em uma ordenao das arestas de G onde peso(ej) peso(ej+1), j = 1,, m1
para j = 1,, m faa
sejam Sp e Sq os conjuntos associados aos extremos da aresta ej (onde p q)
se p q ento
acrescente ej a E(T)
Sp Sp U Sq
fim-se
fim-para
retorne T
Algoritmo de Kruskal
Clculo da Complexidade
Algoritmo de 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) ; O(n)
para j = 1,, n faa
Sj { j}; -- inicializao dos n conjuntos disjuntos de vrtices das n rvores triviais
seja e1, e2, ,em uma ordenao das arestas de G onde peso(ej) peso(ej+1), j = 1,, m1
para j = 1,, m faa
sejam Sp e Sq os conjuntos associados aos extremos da aresta ej (onde p q)
se p q ento
acrescente ej a E(T)
Sp Sp U Sq
fim-se
fim-para
retorne T
Algoritmo de Kruskal
Clculo da Complexidade
Algoritmo de 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) ; O(n)
para j = 1,, n faa
O(n)
Sj { j};
seja e1, e2, ,em uma ordenao das arestas de G onde peso(ej) peso(ej+1), j = 1,, m1
para j = 1,, m faa
sejam Sp e Sq os conjuntos associados aos extremos da aresta ej (onde p q)
se p q ento
acrescente ej a E(T)
Sp Sp U Sq
fim-se
fim-para
retorne T
Algoritmo de Kruskal
Clculo da Complexidade
Algoritmo de 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) ; O(n)
para j = 1,, n faa
O(n)
Sj { j};
seja e1, e2, ,em uma ordenao das arestas de G onde peso(ej) peso(ej+1) O(m log m)
para j = 1,, m faa
sejam Sp e Sq os conjuntos associados aos extremos da aresta ej (onde p q)
se p q ento
acrescente ej a E(T)
Sp Sp U Sq
fim-se
fim-para
retorne T
Algoritmo de Kruskal
Clculo da Complexidade
Algoritmo de 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) ; O(n)
para j = 1,, n faa
O(n)
Sj { j};
seja e1, e2, ,em uma ordenao das arestas de G onde peso(ej) peso(ej+1) O(m log m)
para j = 1,, m faa
sejam Sp e Sq os conjuntos associados aos extremos da aresta ej (onde p q)
se p q ento
acrescente ej a E(T) O(1)
Sp Sp U Sq
fim-se
fim-para
retorne T
Algoritmo de Kruskal
Clculo da Complexidade
Algoritmo de 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) ; O(n)
para j = 1,, n faa
O(n)
Sj { j};
seja e1, e2, ,em uma ordenao das arestas de G onde peso(ej) peso(ej+1) O(m log m)
para j = 1,, m faa
sejam Sp e Sq os conjuntos associados aos extremos da aresta ej (onde p q)
se p q ento
acrescente ej a E(T) O(1)
Total do para: O(m + n log n)
Sp Sp U Sq
fim-se
fim-para
retorne T
Algoritmo de Kruskal
Clculo da Complexidade
Algoritmo de 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) ; O(n)
para j = 1,, n faa
O(n)
Sj { j};
seja e1, e2, ,em uma ordenao das arestas de G onde peso(ej) peso(ej+1) O(m log m)
para j = 1,, m faa
sejam Sp e Sq os conjuntos associados aos extremos da aresta ej (onde p q)
se p q ento
acrescente ej a E(T) O(1)
Total do para: O(m + n log n)
Sp Sp U Sq
fim-se
fim-para
Total do algoritmo: O(m log m) = O(m log n)
retorne T
Algoritmo de Prim
O Algoritmo de Prim tambm utiliza o mtodo guloso, mas
tem um princpio de funcionamento diferente:
Algoritmo de Prim
Dado o grafo G, o algoritmo constri uma rvore geradora T de G com custo mnimo
escolher um vrtice qualquer v em 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 x em V(T) e outro y em 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.
8
4
11
2
14
4
7
10
Algoritmo de Prim
Exemplo: Simulao da execuo do algoritmo.
8
4
2
11
raiz
14
4
7
10
Algoritmo de Prim
Exemplo: Simulao da execuo do algoritmo.
8
4
2
11
raiz
14
4
7
10
Algoritmo de Prim
Exemplo: Simulao da execuo do algoritmo.
8
4
2
11
raiz
14
4
7
10
Algoritmo de Prim
Exemplo: Simulao da execuo do algoritmo.
8
4
2
11
raiz
14
4
7
10
Algoritmo de Prim
Exemplo: Simulao da execuo do algoritmo.
8
4
2
11
raiz
14
4
7
10
Algoritmo de Prim
Exemplo: Simulao da execuo do algoritmo.
8
4
2
11
raiz
14
4
7
10
Algoritmo de Prim
Exemplo: Simulao da execuo do algoritmo.
8
4
2
11
raiz
14
4
7
10
Algoritmo de Prim
Exemplo: Simulao da execuo do algoritmo.
8
4
2
11
raiz
14
4
7
10
Algoritmo de Prim
Exemplo: Simulao da execuo do algoritmo.
8
4
2
11
raiz
14
4
7
10
Algoritmo de Prim
Exemplo: Simulao da execuo do algoritmo.
FINAL: custo da rvore geradora 37
7
8
4
2
11
raiz
14
4
7
10
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 emparelhamento em um grafo G um
conjunto de arestas que no tm extremos em comum.
Emparelhamentos
Definio: Um emparelhamento em 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.)
Emparelhamentos
Definio: Seja M um emparelhamento em um grafo G.
Um vrtice v M-saturado se 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-saturado se 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-saturado se 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-saturado se alguma aresta de M incide
sobre v; caso contrrio, v M-insaturado.
Emparelhamentos
Definio: Um emparelhamento M em um grafo G
chamado perfeito se todo vrtice de G M-saturado. (Obs:
todo emparelhamento perfeito mximo.)
Emparelhamentos
Definio: Um emparelhamento M em um grafo G
chamado perfeito se todo vrtice de G M-saturado. (Obs:
todo emparelhamento perfeito mximo.)
Emparelhamentos
Def.: Seja M um emparelhamento. Um caminho Maumentante aquele que inicia e termina em vrtices Minsaturados, e alterna arestas de M com arestas de E(G)\M.
Emparelhamentos
Def.: Seja M um emparelhamento. Um caminho Maumentante aquele que inicia e termina em vrtices Minsaturados, e alterna arestas de M com arestas de E(G)\M.
Emparelhamentos
Def.: Seja M um emparelhamento. Um caminho Maumentante aquele que inicia e termina em vrtices Minsaturados, e alterna arestas de M com arestas de E(G)\M.
caminho M-aumentante
Emparelhamentos
Importante! Um caminho M-aumentante P fornece um
modo de aumentar o tamanho do emparelhamento M em
uma unidade.
Emparelhamentos
Importante! Um caminho M-aumentante P fornece um
modo de aumentar o tamanho do emparelhamento M em
uma unidade.
emparelhamento M
Emparelhamentos
Importante! Um caminho M-aumentante P fornece um
modo de aumentar o tamanho do emparelhamento M em
uma unidade.
caminho M-aumentante P
Emparelhamentos
Importante! Um caminho M-aumentante P fornece um
modo de aumentar o tamanho do emparelhamento M em
uma unidade.
Emparelhamentos
Importante! Um caminho M-aumentante P fornece um
modo de aumentar o tamanho do emparelhamento M em
uma unidade.
novo emparelhamento M
Emparelhamentos
A operao de aumento do emparelhamento dada por
M M E(P)
onde a diferena simtrica entre conjuntos.
novo emparelhamento M
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:
Algoritmo para encontrar um emparelhamento mximo
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.
grafo de entrada
c
b
a
x
z
y
j
Emparelhamentos
Exemplo: Simulao da execuo do algoritmo.
emparelhamento inicial M
c
b
a
x
z
y
j
Emparelhamentos
Exemplo: Simulao da execuo do algoritmo.
caminho M-aumentante P
c
b
a
x
z
y
j
Emparelhamentos
Exemplo: Simulao da execuo do algoritmo.
novo emparelhamento M
c
b
a
x
z
y
j
Emparelhamentos
Exemplo: Simulao da execuo do algoritmo.
caminho M-aumentante P
c
b
a
x
z
y
j
Emparelhamentos
Exemplo: Simulao da execuo do algoritmo.
novo emparelhamento M
c
b
a
x
z
y
j
Emparelhamentos
Exemplo: Simulao da execuo do algoritmo.
no h caminho M-aumentante M mximo!
c
b
a
x
z
y
j
Fluxos em redes
Def.: Uma rede um multidigrafo D=(V, E) onde cada
aresta e em E possui uma capacidade real c(e) > 0.
4
1
2
3
3
3
Fluxos em redes
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
1
Fluxos em redes
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
1
Fluxos em redes
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
1 1
2 2
3 0
3 2
fluxo
2 1
b
4 3
3 1
capacidade
3 1
5 2
Fluxos em redes
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
1 1
2 2
3 0
3 2
fluxo
2 1
b
4 3
3 1
capacidade
3 1
5 2
Fluxos em redes
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
1 1
2 2
3 0
3 2
fluxo
2 1
b
4 3
3 1
capacidade
3 1
5 2
Fluxos em redes
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).
3
4 2
1 1
2 2
3 0
3 2
fluxo
2 1
4
4 3
3 1
capacidade
3 1
valor do fluxo no vrtice
5 2
d
3
Fluxos em redes
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)
3
4 2
1 1
2 2
3 0
3 2
fluxo
2 1
4
4 3
3 1
capacidade
3 1
valor do fluxo no vrtice
5 2
d
3
Fluxos em redes
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
1 1
2 2
3 0
3 2
fluxo
2 1
b
4 3
3 1
capacidade
3 1
valor do fluxo na rede 4
5 2
Fluxos em redes
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
1 1
2 2
3 1
3 2
fluxo
2 1
b
4 4
3 2
capacidade
3 1
valor do fluxo na rede 5
5 3
Fluxos em redes
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 3
1 1
2 2
3 1
3 3
fluxo
2 1
b
4 4
3 2
capacidade
3 1
5 3
Fluxos em redes
Problema do Fluxo Mximo:
Dada uma rede D, encontrar um fluxo f de valor mximo.
4 3
1 1
2 2
3 1
3 3
fluxo
2 1
b
4 4
3 2
capacidade
3 1
5 3
Fluxos em redes
Problema do Fluxo Mximo:
Dada uma rede D, encontrar um fluxo f de valor mximo.
4 3
1 1
2 2
3 2
3 3
fluxo
2 1
b
4 4
3 2
capacidade
3 0
5 4
Fluxos em redes
Problema do Fluxo Mximo:
Dada uma rede D, encontrar um fluxo f de valor mximo.
4 3
1 1
2 2
3 2
3 3
fluxo
2 1
b
4 4
3 2
capacidade
3 0
Fluxo mximo!
5 4
Fluxos em redes
Def.: Uma aresta est saturada quando f (e) = c(e).
Fluxos em redes
Def.: Uma aresta est saturada quando f (e) = c(e).
4 3
1 1
2 2
3 1
capacidade
fluxo
fluxo na rede
aresta saturada
3 3
2 1
4 4
3 2
b
3 1
5 3
Fluxos em redes
Def.: Um fluxo dito maximal quando todo caminho
direcionado de s a t contm uma aresta saturada.
4 3
1 1
2 2
3 1
capacidade
fluxo
fluxo na rede
aresta saturada
3 3
2 1
4 4
3 2
b
3 1
5 3
Fluxos em redes
Def.: Um fluxo dito maximal quando todo caminho
direcionado de s a t contm uma aresta saturada.
4 3
1 1
2 2
3 1
capacidade
fluxo
fluxo na rede
aresta saturada
3 3
2 1
4 4
3 2
b
3 1
Fluxo maximal !
5 3
Fluxos em redes
Um fluxo maximal quando no possvel aumentar o
seu valor apenas com acrscimo de fluxo nas arestas.
4 3
1 1
2 2
3 1
capacidade
fluxo
fluxo na rede
aresta saturada
3 3
2 1
4 4
3 2
b
3 1
Fluxo maximal !
5 3
Fluxos em redes
Todo fluxo mximo maximal.
Nem todo fluxo maximal mximo.
4 3
1 1
2 2
3 1
capacidade
fluxo
fluxo na rede
aresta saturada
3 3
2 1
4 4
3 2
b
3 1
Fluxo maximal !
5 3
Fluxos em redes
Todo fluxo mximo maximal.
Nem todo fluxo maximal mximo.
4 3
1 1
2 2
3 1
capacidade
fluxo
fluxo na rede
aresta saturada
3 3
2 1
4 4
3 2
b
3 1
Fluxo maximal !
5 3
d
mas no mximo!
Fluxos em redes
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 em redes
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
S
b
a
Fluxos em redes
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
S
b
a
Fluxos em redes
Idia: Todo caminho direcionado de s a t tem que passar
por alguma aresta do corte.
s
S
b
a
Fluxos em redes
S = {s, a, b}
S = {t, c, d }
(S, S ) = { (s, c), (b, c), (c, b), (b, d), (d, a) }
s
S
b
a
Fluxos em redes
S = {s}
S = {t, a, b, c, d}
(S, S ) = { (s, a), (s, b), (s, c) }
c
S
b
a
Fluxos em redes
S = {s, a, b, c, d}
S = {t}
(S, S ) = { (c, t), (d, t) }
b
a
Fluxos em redes
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 em redes
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
S
b
a
Fluxos em redes
S = { s, a, b }
(S, S )+ = { (s, c), (b, c), (b, d) }
(S, S ) = { (c, b), (d, a) }
s
S
b
a
Fluxos em redes
Def.: A capacidade c(S, S ) de um corte (S, S ) a soma
das capacidades das arestas de (S, S )+.
Fluxos em redes
Def.: A capacidade c(S, S ) de um corte (S, S ) a soma
das capacidades das arestas de (S, S )+.
4
1
Fluxos em redes
Def.: A capacidade c(S, S ) de um corte (S, S ) a soma
das capacidades das arestas de (S, S )+.
4
1
Fluxos em redes
Def.: A capacidade c(S, S ) de um corte (S, S ) a soma
das capacidades das arestas de (S, S )+.
4
1
Fluxos em redes
S = { s, a, b }
c(S, S ) = c(s, c) + c(b, c) + c(b, d) = 4 + 1 + 4 = 9
4
1
Fluxos em redes
S = {s, a, b, c, d}
c(S, S ) = c(c, t) + c(d, t) = 3 + 5 = 8
Fluxos em redes
S = { s, a, b, c }
c(S, S ) = c(b, d) + c(c, t) = 3 + 4 = 7
4
1
Fluxos em redes
Observe que os cortes tm capacidades cada vez
menores!
4
1
Fluxos em redes
Problema do Corte Mnimo: Dada uma rede D, encontrar
um corte (S, S) com a menor capacidade possvel.
4
1
Fluxos em redes
Def.: O fluxo f(S, S ) em um corte (S, S ) a soma dos
fluxos nas arestas de ( S, S )+ menos a soma dos fluxos
nas arestas de (S, S ) .
Fluxos em redes
Def.: O fluxo f(S, S ) em um corte (S, S ) a soma dos
fluxos nas arestas de ( S, S )+ menos a soma dos fluxos
nas arestas de (S, S ) .
4 3
1 1
2 2
3 1
3 3
2 1
4 4
3 2
b
3 1
5 3
Fluxos em redes
S = { s, a, b }
f(S, S ) = f(s, c) + f(b, c) + f(b, d) f (c, b) f (d, a) =
3+1+411=6
4 3
1 1
2 2
3 1
3 3
2 1
4 4
3 2
b
3 1
5 3
Fluxos em redes
S = {s, a, b, c, d}
f(S, S ) = f(c, t) + f(d, t) = 3 + 3 = 6
4 3
1 1
2 2
3 1
3 3
2 1
4 4
3 2
b
3 1
5 3
Fluxos em redes
S = { s, a, b, c }
f(S, S ) = f(b, d) + f(c, t) f(d, a) = 3 + 4 1 = 6
4 3
1 1
2 2
3 1
3 3
2 1
4 4
3 2
b
3 1
5 3
Fluxos em redes
Observe que o valor do fluxo em qualquer corte sempre
o mesmo, e igual ao fluxo f(D) na rede!
4 3
1 1
2 2
3 1
3 3
2 1
4 4
3 2
b
3 1
5 3
Fluxos em redes
f(D) = f(S, S ) para S = {s}.
4 3
1 1
2 2
3 1
3 3
2 1
4 4
3 2
b
3 1
5 3
Fluxos em redes
Teorema: Seja f um fluxo em uma rede D e (S, S ) um
corte qualquer em D. Ento f(S, S ) = f (D).
4 3
1 1
2 2
3 1
3 3
2 1
4 4
3 2
b
3 1
5 3
Fluxos em redes
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 em redes
Teorema: Seja f um fluxo qualquer em uma rede D, e
(S, S ) um corte qualquer em D. Ento f (D) c(S, S ).
4 3
1 1
2 2
3 1
3 3
2 1
4 4
3 2
b
3 1
5 3
Fluxos em redes
f (D) = 6 c(S, S ) = 9
4 3
1 1
2 2
3 1
3 3
2 1
4 4
3 2
b
3 1
5 3
Fluxos em redes
f (D) = 6 c(S, S ) = 8
4 3
1 1
2 2
3 1
3 3
2 1
4 4
3 2
b
3 1
5 3
Fluxos em redes
f (D) = 6 c(S, S ) = 9
4 3
1 1
2 2
3 1
3 3
2 1
4 4
3 2
b
3 1
5 3
Fluxos em redes
f (D) = 7 c(S, S ) = 9
4 3
1 1
2 2
3 2
3 3
2 1
4 4
3 2
b
3 0
5 4
Fluxos em redes
f (D) = 7 c(S, S ) = 7
4 3
1 1
2 2
3 2
3 3
2 1
4 4
3 2
b
3 0
5 4
Fluxos em redes
Teorema: Seja f um fluxo mximo em uma rede D, e
(S, S ) um corte mnimo em D. Ento f (D) = c(S, S ).
4 3
1 1
2 2
3 2
3 3
2 1
4 4
3 2
b
3 0
5 4
Fluxos em redes
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 em redes
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
4 0
1 1
2 2
3 3
3 1
2 0
4 4
3 3
b
3 0
5 4
Fluxos em redes
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
4 0
1 1
2 2
3 3
3 1
2 0
4 4
3 3
b
3 0
arestas diretas
5 4
Fluxos em redes
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
4 0
1 1
2 2
3 3
3 1
2 0
4 4
3 3
b
3 0
arestas contrrias
5 4
Fluxos em redes
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
4 0
1 1
2 2
3 3
3 1
2 0
4 4
3 3
b
3 0
5 4
Fluxos em redes
Def.: Dados D e f, define-se a rede residual D = (V, E):
Fluxos em redes
Def.: Dados D e f, define-se a rede residual 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)
4 2
1 1
2 2
3 0
3 2
2 1
4 3
3 1
b
3 1
5 2
Fluxos em redes
Def.: Dados D e f, define-se a rede residual 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)
4 2
1 1
2 2
3 0
3 2
2 1
4 3
3 1
b
3 1
aresta direta de D
5 2
Fluxos em redes
Def.: Dados D e f, define-se a rede residual 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)
4 2
1 1
2 2
s
3
3 2
2 1
4 3
3 1
b
3 1
aresta de D
5 2
Fluxos em redes
Def.: Dados D e f, define-se a rede residual 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)
4 2
1 1
2 2
s
3
3 2
2 1
4 3
3 1
b
3 1
aresta contrria de D
5 2
Fluxos em redes
Def.: Dados D e f, define-se a rede residual 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)
4 2
1 1
3 2
2 1
4 3
3 1
3 1
aresta de D
5 2
Fluxos em redes
Def.: Dados D e f, define-se a rede residual 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)
4 2
1 1
3 2
2 1
4 3
3 1
3 1
5 2
Fluxos em redes
Def.: Dados D e f, define-se a rede residual 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)
4 2
1 1
2 1
4 3
3 1
3 1
arestas de D
5 2
Fluxos em redes
Def.: Dados D e f, define-se a rede residual 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)
4 2
1 1
2 1
4 3
3 1
3 1
5 2
Fluxos em redes
Def.: Dados D e f, define-se a rede residual 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
1 1
2 1
4 3
3 1
3 1
arestas de D
5 2
Fluxos em redes
Def.: Dados D e f, define-se a rede residual 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
1 1
2 1
4 3
3 1
3 1
aresta contrria de D
5 2
Fluxos em redes
Def.: Dados D e f, define-se a rede residual 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
2 1
4 3
3 1
3 1
aresta de D
5 2
Fluxos em redes
Def.: Dados D e f, define-se a rede residual 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
2 1
4 3
3 1
3 1
5 2
Fluxos em redes
Def.: Dados D e f, define-se a rede residual 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
1
b
2
1
2
Fluxos em redes
Def.:Uma aresta e da rede residual D aresta de aumento
de fluxo se criada a partir de uma aresta direta de D.
Fluxos em redes
Def.:Uma aresta e da rede residual D aresta de aumento
de fluxo se criada a partir de uma aresta direta de D.
b
2
1
2
rede residual D
Fluxos em redes
Def.:Uma aresta e da rede residual D aresta de aumento
de fluxo se criada a partir de uma aresta direta de D.
2
1
b
2
1
2
Fluxos em redes
Def.:Uma aresta e da rede residual D aresta de reduo
de fluxo se criada a partir de uma aresta contrria de D.
Fluxos em redes
Def.:Uma aresta e da rede residual D aresta de reduo
de fluxo se criada a partir de uma aresta contrria de D.
b
2
1
2
rede residual D
Fluxos em redes
Def.:Uma aresta e da rede residual D aresta de reduo
de fluxo se criada a partir de uma aresta contrria de D.
2
1
b
2
1
2
Fluxos em redes
Note que a rede residual D na verdade um mapa das
possveis variaes de fluxo nas arestas!
Fluxos em redes
Note que a rede residual D na verdade um mapa das
possveis variaes de fluxo nas arestas!
b
2
1
2
rede residual D
Fluxos em redes
Note que a rede residual D na verdade um mapa das
possveis variaes de fluxo nas arestas!
2
1
b
2
1
2
Fluxos em redes
Def.: Um caminho aumentante um caminho de s a t na
rede residual D.
Fluxos em redes
Def.: Um caminho aumentante um caminho de s a t na
rede residual D.
2
1
b
2
1
2
Fluxos em redes
Def.: Um caminho aumentante um caminho de s a t na
rede residual D.
2
1
b
2
1
2
Fluxos em redes
Def.: Um caminho aumentante um caminho de s a t na
rede residual D.
2
1
b
2
1
2
Fluxos em redes
Def.: Um caminho aumentante um caminho de s a t na
rede residual D.
2
1
b
2
1
2
Fluxos em redes
Def.: O gargalo de um caminho aumentante em D a
menor capacidade de uma aresta ao longo deste caminho.
Fluxos em redes
Def.: O gargalo de um caminho aumentante em D a
menor capacidade de uma aresta ao longo deste caminho.
b
2
1
2
gargalo igual a 1
Fluxos em redes
Def.: O gargalo de um caminho aumentante em D a
menor capacidade de uma aresta ao longo deste caminho.
b
2
1
2
gargalo igual a 1
Fluxos em redes
Def.: O gargalo de um caminho aumentante em D a
menor capacidade de uma aresta ao longo deste caminho.
b
2
1
2
gargalo igual a 1
Fluxos em redes
Lema: Dados D e f, se h um caminho aumentante em D
cujo gargalo g, ento existe um fluxo fnovo em D com
valor fnovo(D) = f (D) + g.
Fluxos em redes
Lema: Dados D e f, se h um caminho aumentante em D
cujo gargalo g, ento existe um fluxo fnovo em D com
valor fnovo(D) = f (D) + g.
Demonstrao:
Seja e1 e2 e3 ... ek um caminho aumentante em D com gargalo g.
Sejam e1 , e2 , e3 , ... , ek as arestas correspondentes em D.
Para j = 1, 2, ..., k, faa:
se ej aresta de aumento de fluxo, ento fnovo(ej) = f (ej) + g
se ej aresta de reduo de fluxo, ento fnovo(ej) = f (ej) g
Para as demais arestas de D, faa fnovo(ej) = f (ej).
Fluxos em redes
Ilustrao do lema
Fluxos em redes
Ilustrao do lema
4 2
1 1
2 2
3 0
3 2
2 1
4 3
3 1
b
3 1
5 2
Fluxos em redes
Ilustrao do lema
2
1
b
2
1
2
Fluxos em redes
Ilustrao do lema
2
1
b
2
1
2
Fluxos em redes
Ilustrao do lema
4 2
1 1
2 2
3 0
3 2
2 1
4 3
3 1
b
3 1
5 2
arestas correspondentes em D
Fluxos em redes
Ilustrao do lema
4 2
1 1
2 2
3 0
3 2
2 1
4 3
3 1
b
3 1
+
5 2
arestas correspondentes em D
Fluxos em redes
Ilustrao do lema
4 2
1 1
2 2
3 1
3 2
2 1
4 3
3 1
b
3 0
+
5 3
Fluxos em redes
Teorema: Dados D e f, temos que:
f fluxo mximo sss no h caminho aumentante em D.
Fluxos em redes
Teorema: Dados D e f, temos que:
f fluxo mximo sss no h caminho aumentante em D.
4 3
1 1
2 2
3 2
3 3
2 1
4 4
3 2
b
3 0
5 4
Fluxos em redes
Teorema: Dados D e f, temos que:
f fluxo mximo sss no h caminho aumentante em D.
t
1
Fluxos em redes
Teorema: Dados D e f, temos que:
f fluxo mximo sss no h caminho aumentante em D.
t
1
Fluxos em redes
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 em redes
Teorema: Seja f um fluxo mximo em uma rede D, e
(S, S ) um corte mnimo em D. Ento f (D) = c(S, S ).
4 3
1 1
2 2
3 2
3 3
2 1
4 4
3 2
b
3 0
5 4
Fluxos em redes
f (D) = 7 = c(S, S )
4 3
1 1
2 2
3 2
3 3
2 1
4 4
3 2
b
3 0
5 4
Fluxos em redes
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.
4 3
1 1
2 2
3 2
3 3
2 1
4 4
3 2
b
3 0
5 4
Fluxos em redes
Algoritmo para determinar um fluxo mximo
Entrada: Uma rede D
f fluxo inicial qualquer
D rede residual de D relativa ao fluxo f
enquanto D tem caminho aumentante e1 e2 e3 ... ek faa
g gargalo do caminho aumentante e1 e2 e3 ... ek
para j = 1, 2, ..., k faa
seja ej a aresta de D correspondente a ej
se ej aresta de aumento de fluxo ento f (ej) = f (ej) + g
se ej aresta de reduo de fluxo ento f (ej) = f (ej) g
fim-para
D rede residual de D relativa ao novo fluxo f
fim-enquanto
retornar f