Documente Academic
Documente Profesional
Documente Cultură
2017
Fluxos em grafos
Considerando grafos com pesos associados às arestas:
Há dois tipos:
Estático
Dinâmico (fluxo)
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
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