Académique Documents
Professionnel Documents
Culture Documents
2/1
2 4
2/0
3/2
Notas de aula da disciplina IME 04-11312 1/1 1/1 6
1
(Otimizao em Grafos)
4/1
Paulo Eustquio Duarte Pinto 3 5 3/3
3/1
(pauloedp at ime.uerj.br)
Uma rede uma situao que pode ser modelada em digrafos,
onde onde cada aresta tem um fluxo que passa por ela, sendo o
fluxo limitado capacidade da aresta. No digrafo h fontes,
onde o fluxo iniciado e sumidouros, onde o fluxo consumido.
1
m1 Criar um vrtice para
.
6
7 8 t1 cada time, um para
. m2
3 cada mesa, interligar
times e mesas com
5 1
4 . 5
capacidade 1.
t2 Interligar fonte com
3 m3 s times com capacidade
4
f 5 2
2 = tamanho do time e
mesas com sumidouro,
Problema: Ao final de uma competio quer-se fazer um jantar de
3 . m4 6 com capacidades =
t3
comemorao, tal que, em cada mesa nunca existam dois participantes
de um mesmo time. Ht times, cada time com um nmero de 5
. nmero de lugares da
mesa. Obter o fluxo
4
participantes dado. So disponveis m mesas, cada uma com um nmero . m5 mximo e checar se
de lugares dados. igual ao nmero de
t4 1
Quer-se saber se possvel distribuir os participantes nas mesas. participantes
Vejamos a modelagem para t = 4 (4 5 3 5) n = 5 (3 5 2 6 4) 3 4
a) fluxo maximo: o fluxo mximo de uma rede o fluxo total de c) conservao do fluxo: nos vrtices que no so fontes ou
sada da fonte ou de entrada do sumidouro. sumidouros, o fluxo conservado (o total que entra em cada
Ex: no vrtice 5 entra 1+1+1 e sai 3. vrtice igual ao total que sai).
Ex: no vrtice 5 entra 1+1+1 e sai 3.
b) DAG: O grafo induzido por um fluxo um digrafo acclico.
2 4 d) Corte mnimo: " O fluxo mximo de uma rede igual
capacidade total de um corte de capacidade mnima".
1 6
Ex: O fluxo mximo de 5 corresponde ao corte das arestas (4,6)
3 5 5 e (5,6) com capacidade 2+3=5. 6
1
Fluxo Mximo em Redes Fluxo Mximo em Redes
Digrafos - Fluxos em Redes Algoritmo Ford-Fulkerson Digrafos - Fluxos em Redes Algoritmo Ford-Fulkerson
Maxflow com BP e MA Maxflow com BP e MA
Algoritmo (II)
FluxoMaximo; ExisteCaminho(s, t, minf):
FT 0; pre[s] 1;
E[*,*].fl 0; Se (s=t) Ento Retornar minf;
pre[*} 0; Para i de 1 a n:
Enquanto (fm = ExisteCaminho(s,t,
)): Se ((! pre[i]) e (E[s,i].c > 0)) Ento
FR FT+fm; Se (fm= ExisteCaminho(i, t, min(minf, E[s,i].c))) Ento
pre[*] 0; E[s,i].c E[s,i].c-fm; E[i,s].c E[i,s].c+fm;
Fe; E[s,i].fl E[s,i].fl+fm; E[i,s].fl E[i,s].fl-fm;
Fim; Retornar fm;
Complexidade: O(n2F), onde F o fluxo mximo Fs;
Observaes: Fs;
1. Durante a busca em profundidade, se for encontrado um caminho Fp;
entre a fonte e o sumidouro, o fluxo nas arestas as arestas do Retornar 0;
caminho j atualizado na busca. Fim;
11 12
2. Com matriz de adjacncias no necessrio criar a rede residual.
2
Fluxo Mximo em Redes Fluxo Mximo em Redes
Digrafos - Fluxos em Redes Algoritmo Ford-Fulkerson Digrafos - Fluxos em Redes Algoritmo Ford-Fulkerson
Maxflow com BL e MA MAxflow com BL e MA
ExisteCaminho;
Desmarcar vrtices; Esvaziar Fila;
Algoritmo (III)
Enfilar(s, 0, , ); {n da fila = { ver, pai, val}}
Enquanto (f r):
FluxoMaximo;
s Fila[f].ver;
FT 0;
Para i de 1 a n:
Zerar fluxos nas arestas; (E[v,w].fl)
Se (i no marcado) e (E[s,i].c > 0) Ento
Enquanto (1):
Enfilar(i, f, min(Fila[f].val,E[s,i].c);
Se (ExisteCaminho) Ento
Se (i = sumidouro) Ento Parar;
Delta Fila[r].val; {Aresta mnima do caminho}
Fs;
AtualizaCaminho(Delta);
Fp;
FT FT + Delta;
f f+1;
Seno Parar;
Fe;
Fe;
ExisteCaminho (Fila[r].ver = sumidouro);
Fim;
Fim;
{Obs: matriz de Adjacncias E = { cap, fl } }
13 14
Complexidade: O(nm2)
4/0 4/1
15 3 5 3/2 3 5 3/3 16
3/0 3/1
4/1 4/2
3 5 3/3 3 5 3/3
3/1 3/2
1 Segunda rede Residual - 1
Primeira rede Residual - 4 Encontrado o caminho
2 2 4
Encontrado o caminho 2 1- 3 - 5 - 2 - 4-6
1 2 1
1- 3 - 5 - 4 - 6 1
cujo valor mnimo 1 2
cujo valor mnimo 1 1 1 O Fluxo total pode
1 6 1 1 1
O Fluxo total pode 1 1 6
1 ser aumentado de 1. 1
ser aumentado de 1. 2
3 1 2
3 5 3 2
3 5 3
2 17
1 18
3
Fluxo Mximo em Redes Fluxo Mximo em Redes
2/2 1/-1
2 4 2/1
4
2 2 4
2/2 3/1
2/1 1/-1 1/1 1/-1
3/2
1/0 1/0
1
1/0 1/0 6 2/1
1/1
1/1
1 6 4/0 1
1/1 6
3 5 3/0
3/0
4/3 4/1
3/3 3 5 3/3
3 5
3/1
3/3
Terceira Rede Residual 2 4 A rede residual criada a partir de um fluxo modificando a rede da seguinte forma:
No h mais caminho entre
2 2
1 e 6. O Fluxo 5 mximo. 2 a) quando se atribui um fluxo a uma aresta, sua capacidade deduzida deste fluxo.
1 1 1 6 b) a capacidade deduzida somada capacidade da aresta contrrial.
1
3
c) o fluxo atribudo deduzido do fluxo da aresta contrria.
1 3
3 5 3 19 20
d) para se encontrar o fluxo s se analisa os fluxos positivos.
Digrafos - Fluxos em Redes Ford-Fulkerson - Exemplo 2 Digrafos - Fluxos em Redes Ford-Fulkerson - Exerccio
UVA 11045 - My T-Shirt suits Me
UVA 10080: Coelhos e gavies
Modelar o seguinte problema:
Problema: so dadas as posies dso dadas as posies (x, y) de n
coelhos, e tambm as posies (x, y) de vrias tocas. Gavies vo
atacar em 1 min. Quantos coelhos podem se salvar, sabendo que a
velocidade de todos os coelhos v e que em, cada toca cabem 2
coelhos?
t2
t1 t3
Exerccio: modelar a soluo por fluxo mximo para o seguinte
problema: c3
Problema: So dadas np pessoas que vo ser presenteadas com uma T- c2
Shirt. H nc camisetas de cada um dos 6 tamanhos (XXL, XL, L, M, S,
XS). Cada pessoa informa dois tamanhos satisfatrios para ela. c4
possvel distribuir as camisetas de forma a satisfazer a todos? c6 c5
23 c1 24
4
Fluxo Mximo em Redes Fluxo Mximo em Redes
Digrafos - Fluxos em Redes Ford-Fulkerson - Exemplo 4 Digrafos - Fluxos em Redes Ford-Fulkerson - Exemplo 4
UVA 10330 - Power Transmission UVA 10330 - Power Transmission - Modelagem
1 10 5
10 13
10
0 30 3 30 7 20 4 40 8 40 9
2
20 5 5 7
Digrafos - Fluxos em Redes Ford-Fulkerson - Exemplo 4 Digrafos - Fluxos em Redes Ford-Fulkerson - Exemplo 5
UVA 10330 - Power Transmission - Fluxo Mximo UVA 10511 - Counciling
27 28
Digrafos - Fluxos em Redes Ford-Fulkerson - Exemplo 5 Digrafos - Fluxos em Redes Ford-Fulkerson - Exemplo 6
UVA 10511 - Counciling - Modelagem UVA 10735 - Euler Circuit
1 p1
1 1 Cria-se o grafo com
C1 1 2 5 3
PT um n para cada 1
1 clube, 1 para cada
p2 4
1 pessoa e 1 para cada
1
partido. Clubes so
C2 1 1 PV
conectados fonte
1 p3 1 t
s com 1, pessoas aos
1
1 seus clubes e ao seu 6
1 1 PS 1 partido com 1.
p4
C3 1 Partidos ao sumidouro
com (n-1)/2. O Problema: dado um grafo onde algumas arestas esto orientadas e
1 1
1 fluxo mximo deve outras no, verificar se possvel orientar as arestas no orientadas
p5 ser = n (num. de tal que o digrafo possua circuito euleriano.
clubes)
29 Obs: um digrafo possui circuito euleriano se o grafo subjacente for
30
conexo e, para cada vrtice seu grau de entrada igual ao de sada.
5
Fluxo Mximo em Redes Fluxo Mximo em Redes
Digrafos - Fluxos em Redes Ford-Fulkerson - Exemplo 6 Digrafos - Fluxos em Redes Ford-Fulkerson - Exemplo 6
UVA 10735 - Euler Circuit - Modelagem UVA 10735 - Euler Circuit - Modelagem
Inicialmente: cria- Depois: excluem-se
12 se o grafo com um as arestas
1 n para cada aresta 1
orientadas e ajusta-
12 e um para cada 12 se a capacidade do
1 1 vrtice inicial. 1 vrtice de entrada
25 2 Ligam-se as arestas 2 correspondente.
1 aos vrtices de sua 1
Obtem-se o fluxo
1 26 2 extremidade. As 26 1
mximo. Se todas as
1 3 t arestas ligando 1 3 t arestas que chegam
s 1 vrticesao sumidouro s 0
1 35 1 35 em t estiverem
tm capacidade = satudadas, ento h
1 grau de
63 4 1 4 1 soluo e os vrtices
1 entrada/sada 1
correspondentes so
1 2 desejado. As demais 1 1 onde "chegam" as
45 45
5 tm capacidade 1. 5 arestas que tm
1 1
As arestas sem fluxo.
46 2 46 2
fluxo so de sada
6 de cada um desses31 6 32
56 56
vrtices.
Digrafos - Fluxos em Redes Ford-Fulkerson - Exemplo 6 Digrafos - Emparelhamento mximo em grafos bipartidos
Problema 10735 - Euler Circuit
Emparelhamento mximo em grafo bipartido
H1 H2 H3 H4 H5 H6
Soluo Final M1 M2 M3 M4 M5 M6
Circuito: 1 - 2 - 5 - 4 - 3 - 5 - 6 - 2 - 1
Digrafos - Emparelhamento mximo em grafos bipartidos Digrafos - Emparelhamento mximo em grafos bipartidos
H1 H2 H3 H4 H5 H6
M1 M2 M3 M4 M5 M6
H1 H2 H3 H4 H5 H6
Soluo
tima M1 M2 M3 M4 M5 M6
(5)
M1 M2 M3 M4 M5 M6 35 36
6
Fluxo Mximo em Redes Fluxo Mximo em Redes
Digrafos - Emparelhamento mximo em grafos bipartidos Digrafos - Emparelhamento mximo em grafos bipartidos
1 1
1- Acrescenta-se uma
fonte e um sumidouro.
2. Liga-se a fonte ao
2 3 4 5 6 7 2 3 4 5 6 7
conjunto V1
3. Liga-se o V2 ao
sumidouro.
8 9 12 13 4. As arestas de V1 8 9 12 13
10 11 10 11
p/V2 passam a ser
direcionadas.
5. Todas as
37 38
14 capacidades so 1. 14
Digrafos - Fluxos em Redes Ford-Fulkerson - Exemplo 7 Digrafos - Fluxos em Redes Ford-Fulkerson - Exemplo 7
1 2 3 4
Modelagem:
1- Criar o grafo bipartido das possibilidades de associao.
2. Encontrar o fluxo mximo.
3. Checar se cada emparelhamento do fluxo mximo necessrio
(quando retirado diminui o fluxo mximo). Isso deve ser feito
retirando-se, temporariamente cada aresta do emparelhamento e
Problema: dadas das posies dos slides e dos nmeros, indicar quais
39 checando-se se o valor do fluxo mximo diminui.. 40
associaes entre nmeros e slides podem ser feitas com segurana.
Digrafos - Fluxos em Redes Ford-Fulkerson - Exemplo 8 Digrafos - Fluxos em Redes Ford-Fulkerson - Exemplo 8
UVA 11159: Factors and multiples UVA 11159: Factors and multiples
2 3 4 5
Problema: dados dois conjuntos
2 3 4 5 de nmeros, determinar o
mnimo de nmeros que devem
ser retirados para que no
segundo conjunto no haja
6 7 8 9 nenhum mltiplo dos nmeros do
primeiro.
6 7 8 9
Modelagem:
1- Criar o grafo bipartido dos mltiplos.
2. Encontrar o fluxo mximo.
Problema: dados dois conjuntos de nmeros, determinar o mnimo 3. Esse o valor procurado (Teorema de Knig: o valor da cobertura
de nmeros que devem ser retirados dos dois conjuntos para que
mnima de arestas de um bipartido igual ao do emparelhamento
no segundo conjunto no haja nenhum mltiplo dos nmeros do mximo). Obs: Enconctrar o conjunto a retirar no trivial...
primeiro. 41 42
7
Fluxo Mximo em Redes Fluxo Mximo em Redes
Modelar o seguinte problema: O Teorema de Knig diz que, "Em um grafo bipartido, uma cobertura
Problema: so dadas as posies dso dadas as posies (x, y) de n mnima de vrtices tem a mesma cardinalidade que a do emparelha-
coelhos, e tambm as posies (x, y) de vrias tocas. Gavies vo mento mximo. Ento, para achar o tamanho da cobertura mnima,
atacar em 1 min. Quantos coelhos podem se salvar, sabendo que a executamos o algoritmo de emparelhamento mximo.
velocidade de todos os coelhos v e que em, cada toca cabem 2
coelhos? Obs: a cobertura mnima o menor conjunto de vrtices
tal que todas as arestas so incidentes a algum vrtice
t2 do conjunto.
t1 t3 5
1 2 3 4 6
c3
c2
c4
c6 c5
c1 43
7 8 9 10 11 12 44
1 2 3 4 5 6
7 8 9 10 11 12 7 8 9 10 11 12
7 8 9 10 11 12
45 46
Emparelhamento mximo = 5 = Cobertura mnima
1 2 3 4 5 6 1 2 3 4 5 6 10/10 5
1
10/10 13/10
10
8
Fluxo Mximo em Redes Fluxo Mximo em Redes
1 10/10 5 1 10/10 5
0 30/20 3 30/20 7 20/20 4 40/37 8 40/37 9 0 30/20 3 30/20 7 20/20 4 40/37 8 40/37 9
2 2
20/7 5 5 7/7 20/7 5 5 7/7
2 20/7 2 20/7
6 49 6 50
9
Fluxo Mximo em Redes
FIM
55
10