Sunteți pe pagina 1din 10

Matemática Discreta – Aula 9 - Grafos

UFMT – Campus Universitário do Araguaia

Curso de Ciência da Computação

Prof. Ivairton M. Santos

2017
Fluxos em grafos
 Considerando grafos com pesos associados às arestas:
 Há dois tipos:
 Estático
 Dinâmico (fluxo)

 Ao considerarmos a possibilidade de representar fluxo,


temos:
 Qual a maior quantidade de fluxo possível em um grafo?
 Qual o menor custo associado a um fluxo?
 Onde intervir para ampliar a capacidade do fluxo?
UFMT - Ciência da Computação - Prof. Ivairton M. Santos

De quais fluxos estamos falando?


 Não se trata de fluxo não-linear;
 Consideraremos fluxos lineares.
 É importante ter em mente a duração da situação em
estudo.
 Os fluxos também devem ser conservativos.
 Os fluxos adotados serão de um único produto.
 Não devem existir restrições condicionais.

3
UFMT - Ciência da Computação - Prof. Ivairton M. Santos

Fluxo em grafos
 Exemplo de grafo e suas capacidades:

4
UFMT - Ciência da Computação - Prof. Ivairton M. Santos

Formalização
 Um grafo com fluxo será representado por:
𝐺 = (𝑉, 𝐸, 𝑓)
 Onde 𝑓 = (𝑓0 , 𝑓1 , … , 𝑓𝑚 ), tal que m é o número de
arestas do grafo.
 O grafo deve possuir um único vértice fonte s e outro, o
sumidouro t, como destino.

5
UFMT - Ciência da Computação - Prof. Ivairton M. Santos

Formalização

6
UFMT - Ciência da Computação - Prof. Ivairton M. Santos

O problema do Fluxo Máximo


 O problema de fluxo máximo pode ser representado por
meio de uma Programação Linear Inteira:
Max f0
Sujeito a:
Restrições de conservação
(fluxos que entram são iguais aos que saem)
Restrições de capacidade
(os fluxos não podem exceder a capacidade das arestas)

 Mas há algoritmos próprios em grafos que permitem


encontrar o fluxo máximo.

7
UFMT - Ciência da Computação - Prof. Ivairton M. Santos

Algoritmo de Ford-Fulkerson
 O algoritmo tem 2 princípios:
 Quando uma aresta possui menos fluxo do que permite a
sua capacidade temos a opção de “empurrar” fluxo na sua
direção;
 Quando uma aresta possui uma quantidade positiva de
fluxo, seja ela menor ou igual à sua capacidade, temos a
opção de fazer com que esse fluxo retroceda;

8
UFMT - Ciência da Computação - Prof. Ivairton M. Santos

Algoritmo de Ford-Fulkerson
 O algoritmo é baseado num grafo residual (GR)
construído como:
 O conjunto VR = V;
 Ao percorrer as arestas em G, vamos criando as arestas de
GR do seguinte modo:
 Para cada 𝑎 = (𝑛𝑖 , 𝑛𝑗 ) de G, que possui fluxo 𝑓 𝑎 <
𝑐𝑎 adicionamos , adicionamos uma aresta 𝑎𝑅 = (𝑛𝑖 , 𝑛𝑗 )
com 𝑐𝑎𝑅 = 𝑐𝑎 − 𝑓(𝑎) e 𝑓 𝑎𝑅 = 0
 Para cada aresta 𝑎 = (𝑛𝑖 , 𝑛𝑗 ) de G tal que 𝑓 𝑎 > 0,
podemos empurrar esse fluxo para trás, com 𝑎′𝑅 = (𝑛𝑖 , 𝑛𝑗 )
com 𝑐𝑎′𝑅 = 𝑓(𝑎)

9
UFMT - Ciência da Computação - Prof. Ivairton M. Santos

Algoritmo de Ford-Fulkerson
função Atualiza-Grafo-Residual(G, f)
Para cada aresta a(u,v) em G, com u,v∈N
Se f(a) < ca então
insira aR(u,v) com caR=(ca - f(a))
Se f(a) > 0 então
insira aR(v,u) com caR=f(a)
Retorna(GR)

função Ford-Fulkerson(G, s, t)
Inicia f(a)=0 para cada aresta a de G
Defina GR = Atualiza-Grafo-Residual(G, f)
Enquanto existir caminho de aumento s-t em GR
Seja P um caminho de aumento s-t em GR
Defina cP = min{caR : aR ∈ P}
Para cada aresta aR em P
Se aR tem direção s-t então
faça [f(a) → f(a) + cP] em G
senão
faça [f(a) → f(a) - cP] em G
GR = Atualiza-Grafo-Residual(G, f)
Retorna (f)
10

S-ar putea să vă placă și