Vous êtes sur la page 1sur 24

C A P T U L O 7

Problemas de Fluxo em Redes



1. Conceitos fundamentais de grafos
Em muitos problemas que nos surgem, a forma mais simples de o descrever, represent-lo em
forma de grafo, uma vez que um grafo oferece uma representao visual que trar vantagens na
construo de um modelo matemtico com vista resoluo do problema.
Um grafo uma estrutura constituda por dois conjuntos finitos : de vrtices (ns ou nodos) e
de arestas (arcos ou ramos). Um grafo pode ser representado por G = (N, A), em que N = {1, ..., n} e A
= {1, ..., m} so os conjuntos de vrtices e arestas, respectivamente, em que (A NN).
Cada aresta representado por um par (i, j), com i j e i, j N, em que i o vrtice origem e j o
vrtice destino. Uma aresta (i, j) diz-se no dirigida (no orientada), se (j, i) A e diz-se dirigida
(orientada), se (j, i) A.
Existem 3 tipos de grafos :
orientado (dirigido) todas as arestas so dirigidas,


no orientado (no dirigido) todas as arestas so no dirigidas e,
misto algumas arestas so dirigidas e outras so no dirigidas.
Um grafo diz-se completo, se entre quaisquer dois vrtices existir uma aresta dirigida (grafos
dirigidos) ou no dirigida (grafos no dirigidos).
A densidade de um grafo a razo entre a quantidade de arestas do grafo e a quantidade de
arestas do grafo completo com o mesma quantidade de vrtices.
Dois vrtices so adjacentes (vizinhos), se estiverem ligados por uma aresta. Duas arestas so
adjacentes se forem ambas incidentes relativamente ao mesmo vrtice. Um vrtice de ordem k, se
tiver k arestas a ele adjacente.

90 Conceitos fundamentais de redes
Considere-se dois vrtices, S e T, do grafo G. Um caminho de S para T, uma sucesso de
vrtices e arestas, p = [S = n
1
, (n
1
, n
2
), n
2
, ..., (n
h-1
, n
h
), n
h
= T]. No entanto, aquele caminho tambm
pode ser representado apenas pela sucesso de vrtices (p = [S = n
1
, n
2
, ..., n
h-1
, n
h
= T]) ou de arestas
(p = [(S, n
2
), ..., (n
h-1
, T)]). O caminho p diz-se simples, se cada vrtice e aresta pertencem sucesso
uma nica vez.
Um ciclo um caminho em que S = T. Num ciclo simples, todos os vrtices so distintos. Um
circuito (ciclo dirigido) um ciclo formado por arestas dirigidas.
Um grafo dirigido sem ciclos dirigidos, diz-se acclico. Um grafo diz-se ligado (conexo), se
existir um caminho entre quaisquer dois vrtices.
Uma rvore um grafo orientado com um e um s caminho simples entre quaisquer dois
vrtices. Um subgrafo que seja uma rvore e contenha todos os vrtices do grafo, designado por
rvore abrangente (rvore total Spanning Tree).
2. Conceitos fundamentais de redes
Quando se associam valores aos vrtices e/ou s arestas, o grafo designa-se geralmente por
rede. Neste caso, fala-se em ns (nodos) e arcos, e em vez de vrtices e arestas, respectivamente.
Uma rede pode ser representada por G = (N, A, C), em que (N, A) um grafo e C corresponde
ao conjunto de valores associados aos arcos (comprimentos) : ao arco (i, j) est associado o valor c
ij
.
De uma maneira geral, os conceitos utilizados em grafos so extensveis s redes.
Considere-se um caminho p de S para T, na rede G. O comprimento do caminho p
corresponde soma dos comprimentos dos arcos que pertencem quele caminho; ou seja,
C

=
p ) j , i (
ij
c ) p (
O conjunto de todos os caminhos de S para T, numa rede qualquer G, identifica-se por P.
Define-se rvore mnima (rvore de caminhos mais curtos) com raiz em S, como a rvore que
contm todos os ns de N acessveis a partir de S, em que para cada n n
2
o nico caminho de S para
n
2
o caminho mais curto (de comprimento mnimo) na rede G que liga S a n
2
.
Problemas de Fluxo em Redes
O Problema do Caminho Mais Curto 91
3. O Problema do Caminho Mais Curto
Os problemas de caminho mais curto, so fundamentais e frequentes quando se estuda redes de
transportes e de comunicao. Este problema surge quando se pretende determinar o caminho mais
curto, mais barato ou mais fivel, entre um ou vrios pares de ns de uma rede.
Existem trs tipos de problemas de caminho mais curto :
(i) de um n para outro,
(ii) de um n para todos os outros,
(iii) entre todos os pares de ns.
No entanto, os dois primeiros so essencialmente o mesmo problema.
Sejam S e T dois ns de uma rede G = (N, A, C), em que a cada arco associado apenas um
valor (comprimento do arco). O comprimento de um caminho de S para T, a soma dos
comprimentos dos arcos que o compem.
O problema do caminho mais curto entre os ns S e T, tem por objectivo determinar o caminho
de valor mnimo existente em P. Ou seja, determinar p P tal que C(p) C(q), q P.
Algumas observaes relacionadas com este tipo de problemas :
o comprimento de um caminho maior do que o de qualquer dos seus subcaminhos;


qualquer subcaminho de um caminho mais curto, ele prprio um caminho mais curto
(princpio da optimalidade);
para uma rede com n ns, qualquer caminho mais curto tem no mximo n-1 arcos (no
caminho mais curto entre dois ns, no existem ns repetidos).
Matematicamente, este problema pode ser formulado da seguinte forma :



=
N i N j
ij ij
x c Z Minimizar
sujeito a
1 x
N j
Sj
=

} T , S { N j , 0 x x
N k
jk
N i
ij
=


=
N i
iT
1 x
em que,

=
caminho ao pertence o n j) (i, se , 0
caminho ao ertence p j) (i, se , 1
x
ij
Existem vrios algoritmos eficientes para resolver problemas de caminho mais curto, sendo os
mais conhecidos os algoritmos de Dijkstra (i e ii) e de Floyd (iii).
Problemas de Fluxo em Redes
92 O Problema do Caminho Mais Curto
3.1. Algoritmo de Dijkstra
Este algoritmo, que foi apresentado por Dijkstra e que s pode ser aplicada a redes cujos arcos
tm associados comprimentos no negativos, baseia-se num processo de rotulao dos ns da rede e
classificao dos respectivos rtulos. A cada n i atribudo um rtulo [
i
,
i
], o qual pode ser
permanente ou temporrio. Isto quer dizer o seguinte :
[
i
,
i
] permanente, representa o caminho mais curto de S para i

i
n que antecede i no caminho mais curto de S para i

i
valor do caminho mais curto de S para i
[
i
,
i
] temporrio, representa um caminho mais curto de S para i

i
n que antecede i no melhor caminho, at ao momento, de S para i

i
valor do melhor caminho, at ao momento, de S para i
O rtulo temporrio de um n representa um limite superior da distncia mais curta de S a esse
n, uma vez que o caminho que lhe est associado pode ser ou no o mais curto.
O algoritmo consiste em rotular os ns da rede, comeando pelo S, de uma forma ordenada,
segundo as distncias de cada n a S : escolher o n com rtulo temporrio com menor valor de ,
que se torna permanente, para depois serem varridos todos os seus adjacentes, de forma a actualizar
os rtulos destes (temporrios). O algoritmo termina quando no existirem ns com rtulos
temporrios. Inicialmente apenas o n S permanente, sendo os restantes temporrios.
Algoritmo :
Passo 1.
[
S
,
S
] = [S, 0] (caminho mais curto para S custa 0 e no tem ns intermdios)
[
i
,
i
] = [S, C
Si
], i N { S } e (S, i) A
[
i
,
i
] = [, ], i N { S } e (S, i) A
Temporrios = N { S } (Temporrios = conjunto de ns com rtulos temporrios)
Permanentes = { S } (Permanentes = conjunto de ns com rtulos permanentes)
Passo 2.
Se Temporrios = (todos os ns tm rtulos permanentes)
Ento STOP
k = n de Temporrios tal que
k
mnimo (k :
k
= min {
x
, x Temporrios })
Temporrios = Temporrios { k }
Permanentes = Permanentes { k } (k passou a permanente)
Problemas de Fluxo em Redes
O Problema do Caminho Mais Curto 93
Passo 3.
Para todo o j N tal que (k, j) A e j Temporrios Fazer
Se
k
+ C
kj
<
j

Ento

j
=
k
+ C
kj


j
= k
Regressar ao Passo 2.

O algoritmo apresentado, determina o caminho mais curto entre um dado n S e todos os
outros ns da rede. Portanto, no fim do algoritmo, para se verificar se existe caminho entre S e um
qualquer n k, bastando analisar o valor de
k
: se
k
= ento no existe caminho. Se existir caminho
mais curto de S para k, este pode ser determinado percorrendo (em sentido inverso) a 1 parte dos
rtulos dos ns () de k at S, da seguinte forma :
Caminho = { k }
i = k
Enquanto i S Fazer
i =
i

Caminho Caminho { i }
Exemplo :
Determinar o caminho mais curto entre o n S = 1 e todos os outros ns da seguinte rede :

Problemas de Fluxo em Redes
94 O Problema do Caminho Mais Curto
Passo 1.
Colocar rtulo permanente no n 1 e rtulos temporrios nos restantes ns.

Permanentes = { 1 }
Temporrios = { 2, 3, 4, 5, 6, 7, 8 }
Passo 2.
k = 4, pois
4
= min {
2
,
3
,
4
,
5
,
6
,
7
,
8
} = min { 4, 5, 2, 12, , , }
Permanentes = Permanentes { 4 } = { 1, 4 }
Temporrios = Temporrios { 4 } = { 2, 3, 5, 6, 7, 8 }
Passo 3.
Varrer todos os ns adjacentes a 4, com rtulos temporrios e actualizar os seus rtulos:

3
= min {
3
,
4
+ C
43
} = min { 5, 2 + 1 } = 3 [
3
,
3
] = [4, 3]

6
= min {
6
,
4
+ C
46
} = min { , 2 + 11 } = 13 [
6
,
6
] = [4, 13]

Passo 2.
k = 3, pois
3
= min {
2
,
3
,
5
,
6
,
7
,
8
} = min { 4, 3, 12, 13, , }
Permanentes = Permanentes { 3 } = { 1, 3, 4 }
Temporrios = Temporrios { 3 } = { 2, 5, 6, 7, 8 }
Problemas de Fluxo em Redes
O Problema do Caminho Mais Curto 95
Passo 3.
Varrer todos os ns adjacentes a 3, com rtulos temporrios e actualizar os seus rtulos :

2
= min {
2
,
3
+ C
32
} = min { 4, 3 + 3 } = 4 [
3
,
3
] = [1, 4] (sem alterao)

8
= min {
8
,
3
+ C
38
} = min { , 3 + 13 } = 16 [
8
,
8
] = [3, 16]

Passo 2.
k = 2, pois
2
= min {
2
,
5
,
6
,
7
,
8
} = min { 4, 12, 13, , 16 }
Permanentes = Permanentes { 2 } = { 1, 2, 3, 4 }
Temporrios = Temporrios { 2 } = { 5, 6, 7, 8 }
Passo 3.
Varrer todos os ns adjacentes a 2, com rtulos temporrios e actualizar os seus rtulos :

5
= min {
5
,
2
+ C
25
} = min { 12, 4 + 1 } = 5 [
5
,
5
] = [2, 5]

Passo 2.
k = 5, pois
5
= min {
5
,
6
,
8
} = min { 5, 13, 16 }
Permanentes = Permanentes { 5 } = { 1, 2, 3, 4, 5 }
Temporrios = Temporrios { 5 } = { 6, 7, 8 }
Problemas de Fluxo em Redes
96 O Problema do Caminho Mais Curto
Passo 3.
Varrer todos os ns adjacentes a 5, com rtulos temporrios e actualizar os seus rtulos :

7
= min {
7
,
5
+ C
57
} = min { , 5 + 6 } = 11 [
7
,
7
] = [5, 11]

8
= min {
8
,
5
+ C
58
} = min { 16, 5 + 9 } = 14 [
8
,
8
] = [5, 14]

Passo 2.
k = 7, pois
7
= min {
6
,
7
,
8
} = min { 13, 11, 14 }
Permanentes = Permanentes { 7 } = { 1, 2, 3, 4, 5, 7 }
Temporrios = Temporrios { 7 } = { 6, 8 }
Passo 3.
Varrer todos os ns adjacentes a 7, com rtulos temporrios e actualizar os seus rtulos :

8
= min {
8
,
7
+ C
78
} = min { 14, 11 + 7 } = 14 [
8
,
8
] = [5, 14] (sem alterao)
Passo 2.
k = 6, pois
6
= min {
6
,
8
} = min { 13, 14 }
Permanentes = Permanentes { 6 } = { 1, 2, 3, 4, 5, 6, 7 }
Temporrios = Temporrios { 6 } = { 8 }
Passo 3.
Varrer todos os ns adjacentes a 6, com rtulos temporrios e actualizar os seus rtulos :

8
= min {
8
,
6
+ C
68
} = min { 14, 13 + 8 } = 14 [
8
,
8
] = [5, 14] (sem alterao)
Passo 2.
k = 8, pois
8
= min {
8
} = min { 14 }
Permanentes = Permanentes { 8 } = { 1, 2, 3, 4, 5, 6, 7, 8 }
Temporrios = Temporrios { 8 } =
Passo 3.
No existem ns adjacentes a 8, com rtulos temporrios.
Problemas de Fluxo em Redes
O Problema do Caminho Mais Curto 97
Passo 2.
Temporrios = Fim do algoritmo.

Resultados aps o trmino do algoritmo :
caminho mais curto entre os ns 1 e 8 calcula-se da seguinte forma :
p = { 8 }
i = 8
Como i 1 ento { i =
i
=
8
= 5 ; p = p { i } = { 5, 8 }
Como i 1 ento { i =
i
=
5
= 2 ; p = p { i } = { 2, 5, 8 }
Como i 1 ento { i =
i
=
2
= 1 ; p = p { i } = { 1, 2, 5, 8 }
Como i = 1 ento termina o processo.
Logo, o caminho mais curto entre 1 e 8 p = { 1, 2, 5, 8 } e o comprimento C(p) = 14 (=
8
).
a rvore de caminho mais curto do n 1 para todos os outros a seguinte :

e tem um comprimento total de 34 ( c
ij
na rvore de caminhos mais curtos).
3.2. Algoritmo de Floyd
Ao pretender-se determinar o caminho mais curto entre todos os pares de ns, pode-se aplicar o
algoritmo de Dijkstra n vezes, utilizando cada n, sucessivamente, como origem. No entanto, existem
outros algoritmos para resolver este problema, como o caso do algoritmo de Floyd, desde que no
haja circuitos negativos os arcos podem ter comprimentos negativos.
Considere-se uma rede G = (N, A, D). Um arco (i, j) designa-se por arco bsico, se constituir o
caminho mais curto entre os ns i e j. Um caminho mais curto entre quaisquer dois ns da rede ser
totalmente constitudo por arcos bsicos (embora existam arcos bsicos no pertencentes ao caminho
mais curto).
O algoritmo de Floyd utiliza a matriz D, de ordem n, das distncias directas mais curtas entre
ns. Os ns que no so adjacentes (no existe arco a lig-los) tm associado uma distncia directa
Problemas de Fluxo em Redes
98 O Problema do Caminho Mais Curto
infinita. Como os ns so (por conveno) adjacentes com eles prprios, tm associado um arco de
comprimento 0. Os ciclos prprios so ignorados.
Entre cada par de ns no ligados por um arco bsico criado um arco, atravs de um processo
identificado por tripla ligao :
d
ij
min { d
ij
, d
ik
+ d
kj
}
Fixando um k, a tripla ligao efectuada para todos os ns i, j k.
Aps efectuar a tripla ligao para cada k N com i, j N { k }, a rede (na matriz D alterada
ao longo deste processo) apenas constituda por arcos bsicos. Logo, o comprimento associado a
cada arco dirigido do n i ao n k, o caminho mais curto entre aqueles dois ns.
Para conhecer todos os ns intermdios num dado caminho, mantm-se paralelamente uma
matriz P, de ordem n, onde o elemento P
ij
representa o primeiro n intermdio entre os ns i e j.
Algoritmo :
Passo 1.
D = matriz das distncias directas
P
ij
= j, i, j N
k 0
Passo 2.
Se k n Ento STOP
k k + 1
Passo 3.
Se D
ij
> D
ik
+ D
kj
(i, j k no se considera a linha e a coluna k)
Ento
D
ij
D
ik
+ D
kj

P
ij
P
ik

No final, os elementos da matriz D so as distncias mais curtas entre qualquer par de ns.
Exemplo :
Determinar o caminho mais curto entre todos os pares de ns da seguinte rede :

Problemas de Fluxo em Redes
O Problema do Caminho Mais Curto 99
Passo 1.
D =

(
(
(
0 8 5
3 0
2 0
P =

(
(
(
1 2 3
1 2 3
1 2 3
k = 0
Passo 2.
0 3 (n = 3) Falso
k = k + 1 = 1
Passo 3.
D
22
< D
21
+ D
12
(0 < 3 + 8 = 11)
D
23
> D
21
+ D
13
( > 3 + 5 = 8) D
23
= D
21
+ D
13
= 8; P
23
= P
21
= 1
D
32
< D
31
+ D
12
(2 < + 8)
D
33
< D
31
+ D
13
(0 < + 5)
D =

(
(
(
0 8 5
3 0 8
2 0
P =

(
(
(
1 2 3
1 2 1
1 2 3
Passo 2.
1 3 Falso
k = k + 1 = 2
Passo 3.
D
11
< D
12
+ D
21
(0 < 8 + 3 = 11)
D
13
< D
12
+ D
23
(5 < 8 + 8 = 16)
D
31
> D
32
+ D
21
( > 2 + 3 = 5) D
31
= D
32
+ D
21
= 5; P
31
= P
32
= 2
D
33
< D
32
+ D
23
(0 < 2 + 8)
D =

(
(
(
0 8 5
3 0 8
5 2 0
P =

(
(
(
1 2 3
1 2 1
2 2 3
Passo 2.
2 3 Falso
k = k + 1 = 3
Passo 3.
D
11
< D
13
+ D
31
(0 < 5 + 5 = 10)
D
12
> D
13
+ D
32
(8 > 5 + 2= 7) D
12
= D
13
+ D
32
= 7; P
12
= P
13
= 3
D
21
< D
23
+ D
31
(3 < 8 + 3 = 11)
Problemas de Fluxo em Redes
100 O Problema da rvore Abrangente Mnima -- algoritmos de PRIM
D
22
< D
23
+ D
32
(0 < 8 + 2)
D =

(
(
(
0 7 5
3 0 8
5 2 0
P =

(
(
(
1 3 3
1 2 1
2 2 3
Passo 2.
3 3 Verdadeiro
STOP (termina o algoritmo)
Resultados aps o final do algoritmo :
o comprimento do caminho mais curto entre os ns 1 e 2 7 (D
12
= 7);
o caminho mais curto entre os ns 1 e 2 { 1, 3 (P
12
= 3), 2 (P
32
= 2) }.
4. O Problema da rvore Abrangente Mnima -- algoritmos de PRIM
A rvore abrangente mnima (Minimum Spanning Tree), a rvore abrangente com o menor
comprimento entre todas as rvores abrangentes. O comprimento de uma rvore abrangente o
somatrio dos comprimentos associados aos respectivos arcos.
Note-se que, em geral, a rvore abrangente mnima diferente da rvore de caminho mais curto
entre um n origem e todos os outros ns da rede (calculada pelo algoritmo de Dijkstra).
Algoritmo 1 :
Passo 1.
Toma-se arbitrariamente um n S e atribui-se-lhe um rtulo permanente nulo :
S
= 0.
Aos restantes ns da rede atribuem-se rtulos temporrios :

j
= C
Sj
se (S, j) A

j
= se (S, j) A
Permanentes = { S }
Temporrios = N { S }
Passo 2.
k = n com rtulo temporrio que possua menor valor (que vizinho de um n i);
Permanentes = Permanentes { k }
Temporrios = Temporrios { k }
O arco com o mnimo valor C
ik
=
k
passa a fazer parte da rvore abrangente mnima
Se Temporrios =
Ento STOP (foi determinada a rvore abrangente mnima)
Problemas de Fluxo em Redes
O Problema da rvore Abrangente Mnima -- algoritmos de PRIM 101
Passo 3.
Para todo o j N tal que (k, j) A e j Temporrios Fazer

j
= min {
j
, C
kj
}
Voltar ao Passo 2.
Exemplo :
Determinar a rvore abrangente mnima da seguinte rede :

Passo 1.
Colocar rtulo permanente no n 1 e rtulos temporrios nos restantes ns :

1
= 0

2
= 4;
3
= 5;
4
= 2;
5
= 12

6
=
7
=
8
=
Permanentes = { 1 }
Temporrios = { 2, 3, 4, 5, 6, 7, 8 }
Passo 2.
k = 4
Permanentes = Permanentes { 4 } = { 1, 4 }
Temporrios = Temporrios { 4 } = { 2, 3, 5, 6, 7, 8 }
O arco (1, 4) passa a fazer parte da rvore abrangente mnima, pois C
14
=
4
= 2
Passo 3.

3
= min { 5, 1 } = 1
6
= min { , 11 } = 11
Passo 2.
k = 3
Permanentes = Permanentes { 3 } = { 1, 4, 3 }
Temporrios = Temporrios { 3 } = { 2, 5, 6, 7, 8 }
O arco (4, 3) passa a fazer parte da rvore abrangente mnima, pois C
43
=
3
= 1
Problemas de Fluxo em Redes
102 O Problema da rvore Abrangente Mnima -- algoritmos de PRIM
Passo 3.

2
= min { 4, 3 } = 3

8
= min { , 13 } = 13
Passo 2.
k = 2
Permanentes = Permanentes { 2 } = { 1, 4, 3, 2 }
Temporrios = Temporrios { 3 } = { 5, 6, 7, 8 }
O arco (3, 2) passa a fazer parte da rvore abrangente mnima, pois C
32
=
2
= 3
Passo 3.

5
= min { 12, 1 } = 1
Passo 2.
k = 5
Permanentes = Permanentes { 5 } = { 1, 4, 3, 2, 5 }
Temporrios = Temporrios { 5 } = { 6, 7, 8 }
O arco (2, 5) passa a fazer parte da rvore abrangente mnima, pois C
25
=
5
= 1
Passo 3.

7
= min { , 6 } = 6

8
= min { 13, 9 } = 9
Passo 2.
k = 7
Permanentes = Permanentes { 6 } = { 1, 4, 3, 2, 5, 7 }
Temporrios = Temporrios { 7 } = { 6, 8 }
O arco (5, 7) passa a fazer parte da rvore abrangente mnima, pois C
57
=
7
= 6
Passo 3.

8
= min { 9, 7 } = 7
Passo 2.
k = 8
Permanentes = Permanentes { 8 } = { 1, 4, 3, 2, 5, 7, 8 }
Temporrios = Temporrios { 8 } = { 6 }
O arco (7, 8) passa a fazer parte da rvore abrangente mnima, pois C
78
=
8
= 7
Passo 3.

6
= min { 11, 8 } = 8
Problemas de Fluxo em Redes
O Problema da rvore Abrangente Mnima -- algoritmos de PRIM 103
Passo 2.
k = 6
Permanentes = Permanentes { 6 } = { 1, 4, 3, 2, 5, 7, 8, 6 }
Temporrios = Temporrios { 6 } =
O arco (8, 6) passa a fazer parte da rvore abrangente mnima, pois C
86
=
6
= 8
Como Temporrios = STOP (foi determinada a rvore abrangente mnima)
Resultados aps o final do algoritmo :
a rvore abrangente mnima (rvore que visita todos os ns) a seguinte :

a rvore abrangente mnima tem um comprimento total igual a 28 (2 + 1 + 3 + 1 + 6 + 7 + 8).
Existe uma outra verso do algoritmo de PRIM, que opera sobre a matriz das distncias (custos)
da rede.
Algoritmo 2 :
Passo 1.
Riscar a 1 coluna e marcar a 1 linha.
Passo 2.
Seleccionar o menor elemento (C
ij
) das linhas marcadas (no considerar as colunas riscadas).
Se tiverem todas as colunas riscadas, STOP foi determinada a rvore abrangente mnima.
Passo 3.
Riscar a coluna j e marcar a linha j.
Voltar ao Passo 2.
Os arcos que constituem a rvore abrangente mnima, so os correspondentes aos seleccionados, e o
seu valor o somatrio daqueles C
ij
.
Problemas de Fluxo em Redes
104 O Problema da rvore Abrangente Mnima -- algoritmos de PRIM
Exemplo :
Determinar o rvore abrangente mnima da rede do exemplo apresentado neste captulo.
Passo 1. Riscar a 1 coluna e marcar a 1 linha :
1 2 3 4 5 6 7 8
1 0 4 5 2 12

2 4 0 3 1
3 5 3 0 1
4 2 1 0 13
5 12 1 0 6 9
6 11 0 8
7 6 0 7
8 13 9 8 7 0
Passo 2. O menor elemento no riscado da linha 1 (a nica seleccionada) : C
14
= 2
Passo 3. Riscar a 4 coluna e marcar a 4 linha :
1 2 3 4 5 6 7 8
1 0 4 5 2 12

2 4 0 3 1
3 5 3 0 1
4 2 1 0 13
5 12 1 0 6 9
6 11 0 8
7 6 0 7
8 13 9 8 7 0
Passo 2. O menor elemento no riscado das linhas 1 e 4 (as seleccionadas) : C
43
= 1
Passo 3. Riscar a 3 coluna e marcar a 3 linha :
1 2 3 4 5 6 7 8
1 0 4 5 2 12

2 4 0 3 1
3 5 3 0 1

4 2 1 0 13
5 12 1 0 6 9
6 11 0 8
7 6 0 7
8 13 9 8 7 0
Problemas de Fluxo em Redes
O Problema da rvore Abrangente Mnima -- algoritmos de PRIM 105
Passo 2. O menor elemento no riscado das linhas 1, 3 e 4 (as seleccionadas) : C
32
= 3
Passo 3. Riscar a 2 coluna e marcar a 2 linha :
1 2 3 4 5 6 7 8
1 0 4 5 2 12

2 4 0 3 1

3 5 3 0 1

4 2 1 0 13
5 12 1 0 6 9
6 11 0 8
7 6 0 7
8 13 9 8 7 0
Passo 2. O menor elemento no riscado das linhas 1, 2, 3 e 4 (as seleccionadas) : C
25
= 1
Passo 3. Riscar a 5 coluna e marcar a 5 linha :
1 2 3 4 5 6 7 8
1 0 4 5 2 12

2 4 0 3 1

3 5 3 0 1

4 2 1 0 13
5 12 1 0 6 9
6 11 0 8
7 6 0 7
8 13 9 8 7 0
Passo 2. O menor elemento no riscado das linhas 1, 2, 3, 4 e 5 (as seleccionadas) : C
57
= 6
Passo 3. Riscar a 7 coluna e marcar a 7 linha :
1 2 3 4 5 6 7 8
1 0 4 5 2 12

2 4 0 3 1

3 5 3 0 1

4 2 1 0 13
5 12 1 0 6 9
6 11 0 8
7 6 0 7
8 13 9 8 7 0
Problemas de Fluxo em Redes
106 O Problema da rvore Abrangente Mnima -- algoritmos de PRIM
Passo 2. O menor elemento no riscado das linhas 1, 2, 3, 4, 5 e 7 (as seleccionadas) : C
78
= 7
Passo 3. Riscar a 8 coluna e marcar a 8 linha :
1 2 3 4 5 6 7 8
1 0 4 5 2 12

2 4 0 3 1

3 5 3 0 1

4 2 1 0 13
5 12 1 0 6 9
6 11 0 8
7 6 0 7
8 13 9 8 7 0
Passo 2. O menor elemento no riscado das linhas 1, 2, 3, 4, 5, 7 e 8 (as seleccionadas) : C
86
= 8
Passo 3. Riscar a 6 coluna e marcar a 6 linha :
1 2 3 4 5 6 7 8
1 0 4 5 2 12

2 4 0 3 1

3 5 3 0 1

4 2 1 0 13
5 12 1 0 6 9
6 11 0 8
7 6 0 7
8 13 9 8 7 0
Passo 2. Como todas as colunas se encontram riscadas, ento STOP foi determinada a rvore
abrangente mnima.
Resultados no final do algoritmo :
A rvore abrangente mnima constituda pelos seguintes arcos :
(1, 4), (2, 5), (3, 2), (4, 3), (5, 7), (7, 8) e (8, 6)
O valor da rvore abrangente mnima :
2 + 1 + 3 + 1 + 6 + 7 + 8 = 28
Como se pode verificar, a rvore a mesma que foi determinada pela verso anterior.
Problemas de Fluxo em Redes
O Problema do Fluxo Mximo -- algoritmo de Ford-Fulkerson 107
5. O Problema do Fluxo Mximo -- algoritmo de Ford-Fulkerson
Neste captulo, ser estudado o problema de fluxo mximo numa rede G. Os valores associados
aos arcos desta rede, b
ij
, representam as respectivas capacidades, isto , a quantidade mxima de
fluxo que pode ser enviada pelos arcos. Estes valores tero que ser positivos (b
ij
0). Portanto, pode-
se definir a rede da seguinte forma : G = (N, A, B), em que B = [b
ij
].
Em problemas de fluxo mximo, existem 2 ns especiais : n origem e n terminal. Com a
resoluo do problema de fluxo mximo, pretende-se determinar a quantidade mxima de unidades
de fluxo que podem ser enviados de um n origem S para um n terminal T.
O fluxo no arco (i, j) designado por x
ij
. Devido s restries de capacidade nos arcos, tem-se o
conjunto de restries :
0 x
ij
b
ij
, para todo (i, j) A [1]
Alm disso, em cada n (excepto em S e T) deve haver conservao de fluxo : a quantidade de fluxo
que chega a um n igual quantidade de fluxo que sai desse n; ou seja,
para todo j S, T [2]

=
k
jk
i
ij
x x
Como existe conservao de fluxo em todos os ns, o fluxo que sai do n S igual ao fluxo que chega
ao n T; isto ,
[3]

= =
j
jT
i
Si
x f x
onde f o valor de fluxo
Portanto, com a resoluo do problema de fluxo mximo, pretende-se determinar o valor do
fluxo nos arcos x
ij
[1], que maximize o valor do fluxo f, sujeito s restries de capacidade [2] e de
conservao de fluxo [3].
Matematicamente, este problema pode ser formulado da seguinte forma :

=
j
Sj
x f Maximizar
sujeito a

para todo j S, T [2]

=
k
jk
i
ij
x x

[3]

=
j
jT
i
Si
x x
0 x
ij
b
ij
, para todo (i, j) A [1]
Dado um caminho qualquer de S para T numa rede,
p = [ S = n
1
, n
2
, n
3
, . . . , n
k-1
, n
k
= T ],
Problemas de Fluxo em Redes
108 O Problema do Fluxo Mximo -- algoritmo de Ford-Fulkerson
a quantidade mxima de fluxo que pode ser enviada de S para T, satisfazendo [1], [2] e [3], por aquele
caminho, a seguinte :
min { b
ij
: (i, j) p }.
Logo, o arco com a menor capacidade fica saturado, no podendo passar mais fluxo por ele.
Um corte (cut) o conjunto de todos os arcos de um subconjunto de ns para o seu
complementar : o corte ( , o conjunto de todos os arcos (i, j), tal que i X e j ) X X X. A remoo de
todos os arcos do corte, desliga a rede em duas ou mais partes.
A capacidade de um corte :
C X . X b com i X e j X
ij
i j
( , ) ,
( , )
=


Em geral, C X X C X X ( , ) ( , ) .
Um corte separando S de T, com uma capacidade mnima, designa-se por corte mnimo.
Teorema do fluxo mximo corte mnimo (max flow min cut).
Para qualquer rede com capacidades de valor inteiro associadas aos arcos, o fluxo mximo do n
origem S, para o n terminal T, igual capacidade de um corte mnimo que separa S de T.
Enquanto existir um caminho de aumento de fluxo (c.a.f.) satisfazendo uma das condies :
x
ij
< b
ij
arco forward (sentido correcto) : pode enviar-se fluxo adicional de i para j,
x
ji
> 0 arco backward (sentido inverso) : pode enviar-se fluxo adicional de i para j,
diminuindo o fluxo que existe de j para i,
possvel aumentar a quantidade de fluxo a enviar de S para T.
Assumindo que as capacidades dos arcos so valores inteiros, definido um caminho de
aumento de fluxo constitudo por arcos forwarde arcos backward, o fluxo a enviar de S para T
pode ser alterado de unidades :
= min {
1
,
2
} [inteiro positivo]
com
1
= min { b
ij
x
ij
} nos arcos forward do c.a.f.

2
= min { x
ji
} nos arcos backward do c.a.f.
O valor do fluxo , ento, aumentado em unidades nos arcos forward e diminudo em
unidades nos arcos backward.
Como a capacidade de um corte mnimo um nmero finito e em cada caminho de aumento de
fluxo, o fluxo aumentado de pelo menos 1 unidade, o fluxo mximo obtm-se aps um nmero
finito de iteraes.
Um fluxo mximo, se e s se, no existir um caminho de aumento de fluxo.
Problemas de Fluxo em Redes
O Problema do Fluxo Mximo -- algoritmo de Ford-Fulkerson 109
Algoritmo de FordFulkerson :
Este algoritmo, um modo sistemtico de pesquisar todos os possveis c.a.f. de S para T,
atribuindo rtulos aos ns para indicar a direco em que o fluxo pode ser aumentado. Cada n pode
estar num dos 3 estados :
rotulado e varrido tem um rtulo e todos os seus vizinhos esto rotulados;
rotulado e no varrido tem um rtulo, mas nem todos os seus vizinhos esto rotulados;
no rotulado no tem rtulo.
O rtulo do n j tem 2 partes : [i
+
, (j)] (ou [i

, (j)]), em que,
i
+
(ou i

) : ndice de um n i, indicando que pode-se enviar fluxo de i para j (ou de j para i)


(j) : fluxo mximo adicional que se pode enviar de S para j.
Algoritmo :
Passo 1.
S [S
+
, ]
S fica rotulado e varrido
Passo 2. (processo de rotulao)
j (rotulado e no varrido) [i
+
, (j)] ou [i

, (j)]
Para todo o k N tal que (j, k) A e x
jk
< b
jk
Fazer
k [j
+
, (k)] com (k) = min { (j), b
jk
x
jk
}
Para todo o k N tal que (k, j) A e x
kj
> 0 Fazer
k [j

, (k)] com (k) = min { (j), x


kj
}
j fica rotulado e varrido.
Todos os k ficam rotulados e no varridos.
Se (T est rotulado) ou (no possvel rotular T)
Ento (foi determinado um c.a.f.) ou (no existe c.a.f. o fluxo actual mximo)
Seno Regressar ao Passo 2 (incio)
Passo 3. (mudana de fluxo)
T [k
+
, (T)] x
kT
= x
kT
+ (T)
Enquanto k S Fazer
Se k [j
+
, (k)] x
jk
= x
jk
+ (T)
Se k [j

, (k)] x
kj
= x
kj
(T)
k j
Apagar os rtulos e regressar ao Passo 1.
Problemas de Fluxo em Redes
110 O Problema do Fluxo Mximo -- algoritmo de Ford-Fulkerson
Exemplo :
Considere a rede em baixo, onde os valores correspondem s capacidades e ao fluxo nos arcos.

Pretende-se determinar o fluxo mximo a enviar do n 1 para o n 4, atendendo a que o fluxo
actual enviado entre aqueles 2 ns de 2 unidades.
Passo 1.
Fluxo actual = 2
1 [1
+
, ]
RotuladosVarridos =
RotuladosNoVarridos = { 1 }
NoRotulados = { 2, 3, 4 }
Passo 2.
j 1 (rotulado e no varrido)
Vizinhos (no rotulados) do n 1 : 2 e 3.
2 no pode ser rotulado, pois b
12
= x
12

3 [1
+
, min { (1), b
12
x
12
}] [1
+
, min { , 1 }] [1
+
, 1]
RotuladosVarridos = { 1 }
RotuladosNoVarridos = { 3 }
NoRotulados = { 2, 4 }
Passo 2.
j 3 (rotulado e no varrido)
Vizinhos (no rotulados) do n 3 : 2 e 4.
2 [3

, min { (3), x
23
}] [3

, min { 1, 1 }] [3

, 1]
4 no pode ser rotulado, pois b
34
= x
34

RotuladosVarridos = { 1, 3 }
RotuladosNoVarridos = { 2 }
NoRotulados = { 4 }
Problemas de Fluxo em Redes
O Problema do Fluxo Mximo -- algoritmo de Ford-Fulkerson 111
Passo 2.
j 2 (rotulado e no varrido)
Vizinhos (no rotulados) do n 2 : 4.
4 [2
+
, min { (2), b
24
x
24
}] [2
+
, min { 1, 3 }] [2
+
, 1]
RotuladosVarridos = { 1, 3, 2 }
RotuladosNoVarridos = { 4 }
NoRotulados =
Como T = 4 foi rotulado, foi determinado um caminho de aumento de fluxo.
Passo 3. (mudana de fluxo : o aumento de fluxo de (4) = 1 unidades)
fluxo = fluxo + (4) =2 + 1 = 3
4 [2
+
, 1] x
24
= x
24
+ (4) = 0 + 1 = 1
2 [3

, 1] x
23
= x
23
(4) = 1 1 = 0
3 [1
+
, 1] x
13
= x
13
+ (4) = 1 + 1 = 2

Passo 1.
Fluxo actual = 3
1 [1
+
, ]
RotuladosVarridos =
RotuladosNoVarridos = { 1 }
NoRotulados = { 2, 3, 4 }
Passo 2.
j 1 (rotulado e no varrido)
Vizinhos (no rotulados) do n 1 : 2 e 3.
2 no pode ser rotulado, pois b
12
= x
12

3 no pode ser rotulado, pois b
13
= x
13

Como no possvel rotular mais nenhum n, e como o n T = 4 no foi rotulado, ento no
existe caminho de aumento de fluxo; logo, o fluxo actual mximo.
Problemas de Fluxo em Redes
112 O Problema do Fluxo Mximo -- algoritmo de Ford-Fulkerson
Resultados a retirar aps o final do algoritmo :
Fluxo mximo = 3.
X = { 1 }
X = { 2, 3, 4 }
C(X, X ) = b
12
+ b
13
= 3 = Fluxo mximo


Problemas de Fluxo em Redes

Vous aimerez peut-être aussi