Vous êtes sur la page 1sur 18

Fluxo Máximo em Redes

Letícia Rodrigues Bueno

UFABC
Definição do Problema

• podemos interpretar um grafo orientado como um “fluxo


em rede” e responder perguntas sobre fluxo de materiais;
• Considere que:
• material percorre sistema com origem s (onde material é
produzido) até sorvedor t (onde é consumido);
• origem produz material em alguma taxa fixa;
• sorvedor consome material na mesma taxa;
• “fluxo” do material em qualquer ponto do sistema: taxa
na qual material se move;
• Aplicações: líquidos fluindo por tubos, peças por linhas de
montagem, corrente por redes elétricas, informações por
redes de comunicação, etc;
Definição do Problema

• aresta orientada: canal para o material;


• cada canal tem capacidade máxima;
• vértices são junções de canais (material flui sem
acumulação, exceto por origem e sorvedor);
• “conservação do fluxo”: taxa na qual material entra no
vértice deve ser igual à taxa em que deixa vértice;
• Objetivo: calcular maior taxa na qual material pode ser
enviado desde a origem até o sorvedor sem violar
restrições de capacidade;
Definição do Problema
• grafo conexo orientado G = (V (G), E (G));
• c(u, v) ≥ 0: capacidade de (u, v) ∈ E (G);
• se (u, v) ∈ / E (G), então c(u, v) = 0;
• f(u, v): fluxo da aresta (u, v);
• Restrição de capacidade: f (u, v) ≤ c(u, v);
• origem (ou fonte) s e sorvedor (ou sumidouro) t;
• por simplicidade, assuma: ∃ caminho de s a t passando
por v, ∀v ∈ V (G);
• Objetivo: encontrar fluxo máximo de s para t;

12 12/12
v1 v3 v1 v3
16 20 11/16 15/20
4/9
s 10 4 9 7 t s 10 1/4 7/7 t
13 v2 v4 4 8/13 v2 v4 4/4
14 11/14
Algoritmo de Ford-Fulkerson (1956)

• “algoritmo dos caminhos aumentantes”;


• caminho aumentante: caminho com capacidade
disponível;
• Ideia do algoritmo: enquanto existir caminho aumentante
de s até t, envia fluxo por esse caminho;
• fluxo total que sai da origem, denotado por |f |, tem valor:
X
|f | = f (s, v)
v ∈V (G)

• método de Ford-Fulkerson é guloso (chamado “método”


porque encontrar caminhos aumentantes não é
especificado);
Algoritmo de Ford-Fulkerson

12 0/12
v1 v3 0/16
v1 v3 0/20
16 20
0/9
s 10 4 9 7 t s 0/10 0/4 0/7 t
13 v2 v4 4 0/13 v2 v4 0/4
14 0/14
Algoritmo de Ford-Fulkerson

12 4/12
v1 v3 v1 v3
16 20 4/16 20
4/9
s 10 4 9 7 t s 10 4 7 t
13 v2 v4 4 13 v2 v4 4/4
14 4/14
Algoritmo de Ford-Fulkerson

8 4/12
v1 v3 v1 v3
12 4 20 11/16 7/20
4 4/9
5 4 7
s 10 4 t s 7/10 4 7/7 t
13 v2 4 v4 4 13 v2 v4 4/4
10 11/14
Algoritmo de Ford-Fulkerson

8 12/12
v1 v3 v1 v3
5 4 13 11/16 15/20
11 7 4/9
5 4 7
s 3 11 t s 10 1/4 7/7 t
13 v2 11 v4 4 8/13 v2 v4 4/4
3 11/14
Algoritmo de Ford-Fulkerson

12 12/12
v1 v3 v1 v3
5 5 11/16 19/20
11 15 9
5 4 7
s 11 3 t s 10 1/4 7/7 t
8
5 v2 11 v4 4 12/13 v2 v4 4/4
3 11/14
Algoritmo de Ford-Fulkerson

12 12/12
v1 v3 v1 v3
5 1 11/16 19/20
11 9 19 9
s 11 3 7 t s 10 1/4 7/7 t
12
1 v2 11 v4 4 12/13 v2 v4 4/4
3 11/14
Algoritmo de Ford-Fulkerson

• o algoritmo mantém as seguintes invariantes:


• Restrição de capacidade: f (u, v ) ≤ c(u, v );

• Anti-simetria oblíqua: f (u, v ) = −f (v , u).


Se, na prática, x unidades vão de u para v e y unidades
vão de v para u, temos f (u, v ) = x − y e f (v , u) = y − x ;

• Conservação de fluxo: exceto para s e t, a quantidade de


fluxo que entra em um vértice é igual ao fluxo que sai do
vértice.
Algoritmo de Ford-Fulkerson

• rede residual Gf (V (G), Ef ):


• rede com capacidade cf (u, v ) = c(u, v ) − f (u, v ) e nenhum
fluxo;
• pode acontecer de um fluxo de v para u ser permitido na
rede residual, embora não seja permitido na rede original:
se f (u, v ) > 0 e c(v , u) = 0 então
cf (v , u) = c(v , u) − f (v , u) = f (u, v ) > 0.
Algoritmo de Ford-Fulkerson

1 Ford-Fulkerson(G,s,t):
2 inicializar fluxo f como 0
3 enquanto ∃ caminho aumentante p faça
4 ampliar fluxo f ao longo de p
5 retorne f
Algoritmo de Ford-Fulkerson

1 Ford-Fulkerson(G,s,t):
2 para cada (u, v ) ∈ E faça
3 f [u, v ] = 0
4 f [v , u] = 0
5 enquanto ∃ caminho aumentante p de s para t em Gf
tal que cf (u, v ) > 0 para toda aresta (u, v ) em p faça
6 cf (p) := min{cf (u, v )|(u, v ) ∈ p}
7 para cada (u, v ) ∈ p faça
8 f [u, v ] = f [u, v ] + cf (p)
9 f [v , u] = f [v , u] − cf (p)
Algoritmo de Ford-Fulkerson

• caminho (linha 5) pode ser encontrado com BFS ou DFS


em Gf (V (G), Ef );

• Tempo de execução:
• usando BFS ou DFS, é possível encontrar caminho
aumentante em O(n + m);
• cada caminho encontrado resulta em novo fluxo a ser
acrescentado na rede;
• como os incrementos de fluxo são sempre ≥ 1, o algoritmo
tem tempo de execução O(m · |f |);

• se usamos BFS para encontrar caminhos aumentantes:


algoritmo de Edmonds-Karp (especialização do método de
Ford-Fulkerson);
Fluxo Máximo

E se houver várias origens e/ou vários sorvedouros?


• Acrescente uma super-origem com arestas indo para
todas as origens, onde cada nova aresta tem capacidade
infinita;
• Acrescente um super-sorvedouro recebendo arestas de
todos os sorvedouros, onde cada nova aresta tem
capacidade infinita;
• Dessa forma, qualquer fluxo na rede original corresponde
a um fluxo na rede modificada e vice-versa;
Bibliografia Utilizada

CORMEN, T.H.; LEISERSON, C.E.; RIVEST, R.L. e STEIN, C.


Introduction to Algorithms, 3a edição, MIT Press, 2009.

Vous aimerez peut-être aussi