Escolar Documentos
Profissional Documentos
Cultura Documentos
Otimização Combinatória
www.ime.usp.br/~pf/otimizacao-combinatoria/
Paulo Feofiloff
Departamento de Ciência da Computação
Instituto de Matemática e Estatística
Universidade de São Paulo
2022-03-10
2 FEOFILOFF
Prefácio
—P.F.
i
ii FEOFILOFF
Sumário
iii
iv SUMÁRIO FEOFILOFF
B Poliedros 157
B.1 O que é um poliedro? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
B.2 Vértices de poliedros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
B.3 Poliedros limitados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
B.4 Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
D Politopos 171
D.1 Cascos convexos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
D.2 Hiperplanos separadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
D.3 Politopos versus poliedros limitados . . . . . . . . . . . . . . . . . . . . . 173
D.4 Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
Bibliografia 190
Este capítulo discute o problema dos caminhos dirigidos de custo mínimo em grafos.
Algoritmos para esse problema são usados como ferramenta na resolução de muitos
problemas de otimização combinatória.
(Veja a terminologia e os conceitos básicos de grafos dirigidos no apêndice F. Para
outros termos e conceitos, consulte o índice remissivo na página 191.)
1.1 O problema
Uma rede (= network) consiste em um grafo dirigido D e uma função c que atribui um
número real — positivo, negativo, ou nulo — a cada arco de D. (Seria mais realista
supor que os custos são números racionais, uma vez que computadores digitais não
conhecem números irracionais.) Dizemos que c é uma função-custo ou vetor de custos.
Para cada arco e, o número ce é o custo do arco.1
O custo de um caminho dirigido2 (v0 , e1 , v1 , e2 , . . . , ep , vp ) na rede (D, c) é o número
ce1 + ce2 + · · · + cep . (Note que cada arco contribui para essa soma tantas vezes quantas
aparece em P .) Se o nome do caminho é P , seu custo é denotado por c(P ). Se P não
tem arcos repetidos e todos os arcos têm custo 1 então c(P ) é o número de arcos de P .
Um caminho dirigido P tem custo mínimo se c(P ) ≤ c(P 0 ) para todo caminho dirigido
P 0 que tenha a mesma origem e o mesmo término que P .
Problema 1.A (dos caminhos dirigidos mínimos) Dado um nó r de uma rede (D, c),
encontrar, para cada nó v, um caminho dirigido de r a v que tenha custo mínimo.
1
2 1.1. O PROBLEMA FEOFILOFF
É importante lembrar que um caminho pode não ser simples nem quase-simples. Mais
precisamente, um caminho pode ter nós repetidos e até arcos repetidos. Entretanto,
se os custos de todos os arcos forem positivos então todo caminho dirigido mínimo
é simples. Se os custos forem arbitrários, todo caminho dirigido mínimo tem um
subcaminho que é simples, mínimo, e tem a mesma origem e o mesmo término do
caminho original.
Para que uma instância do problema 1.A tenha solução, é necessário que todos os nós
da rede estejam ao alcance do nó inicial r. É fácil verificar algoritmicamente se essa
condição está satisfeita.
Uma segunda condição necessária para a existência de solução é mais difícil de veri-
ficar: é preciso que todos os ciclos dirigidos tenham custo não-negativo. Adotaremos
a abreviatura “ciclo dirigido negativo” para a expressão “ciclo dirigido de custo ne-
gativo”. Se uma instância do problema tem um tal ciclo então, para algum nó v da
rede, não existe caminho dirigido mínimo de r a v pois existem caminhos dirigidos de
r a v que têm custo menor que qualquer número dado. Poderíamos dizer que o custo
mínimo é −∞ nesse caso.
Cabe perguntar: as duas condições necessárias que acabamos de apontar são suficien-
tes? Em outras palavras, é verdade que toda instância do problema 1.A que satisfaz as
duas condições tem solução? Mostraremos adiante que a resposta é afirmativa.
E XEMPLO 1.1: Considere o grafo dirigido representado pela matriz de adjacências à esquerda e o
vetor de custos representado à direita. Um caminho dirigido mínimo de r a u tem sequência de
nós (r, v, w, u). É um bom exercício encontrar os demais caminhos dirigidos mínimos.
r s u v w rs su rw wu rv vw
r − 1 − 1 1 2 −2 4 −3 3 −1
s − − 1 − −
u − − − − −
v − − − − 1
w − − 1 − −
E XEMPLO 1.2: No grafo dirigido descrito abaixo não há caminho dirigido algum de r a s. Essa
instância do problema 1.A não tem solução qualquer que seja a função-custo.
r s t
r − − 1
s − − 1
t − − −
E XEMPLO 1.3: Considere o grafo dirigido com custos representado abaixo. Essa instância do
problema 1.A não tem solução porque não existe caminho dirigido mínimo de r a s. (É um bom
exercício exibir todos os caminhos dirigidos simples de custo mínimo que têm origem r.)
r u v w s ru uv vw wu us
r − 1 − − − 1 1 −3 1 1
u − − 1 − 1
v − − − 1 −
w − 1 − − −
s − − − − −
FEOFILOFF CAMINHOS DIRIGIDOS DE CUSTO MÍNIMO 3
E XEMPLO 1.4: Se c ≥ 0 e y tem o mesmo valor em todos os nós então y é um potencial viável.
E XEMPLO 1.5: Suponha que uma instância do problema 1.A tem solução. Para cada nó v, seja dv
o custo de um caminho dirigido mínimo de r a v. Então d é um potencial viável. Com efeito, se
um arco vw estivesse tenso, teríamos dv + cvw < dw e então um caminho dirigido que vai de r a w
passando por vw teria custo menor que dw , o que é contraditório.
Em relação a um dado potencial, se todos os arcos da rede estão relaxados então todos
os caminhos dirigidos também estão “relaxados” num certo sentido. O seguinte lema
torna essa afirmação precisa:
Corolário 1.2 (condição de minimalidade) Numa rede (D, c) com nó inicial r, dada
uma coleção (Pw : w ∈ V (D)) de caminhos dirigidos em que cada Pw tem origem r e
término w, se existe um potencial viável y tal que c(Pw ) = yw − yr para cada w então
cada Pw é um caminho dirigido mínimo.
E XEMPLO 1.6: Veja novamente o exemplo 1.1, repetido abaixo. O potencial y é viável. Seja P o
caminho cuja sequência de nós é (r, v, w, u). Como c(P ) = −1 = yu − yr , o caminho é mínimo.
r s u v w rs su rw wu rv vw y
r − 1 − 1 1 2 −2 4 −3 3 −1 r 5
s − − 1 − − s 7
u − − − − − u 4
v − − − − 1 v 8
w − − 1 − − w 7
E XEMPLO 1.7: Aplique o algoritmo de Ford à rede que tem nós r s u v w e os arcos e custos
indicados na tabela. (Use o gabarito de posição dos nós para fazer uma figura.)
rs su rw wu rv vw r s
2 −2 4 −3 3 −1 v
w u
Veja os valores de y (tabela esquerda) e p (tabela direita) no início de sucessivas iterações. A última
coluna da figura registra o arco que é relaxado no fim da iteração:
r s u v w r s u v w
0 ∞ ∞ ∞ ∞ − − − − − rs
0 2 ∞ ∞ ∞ − r − − − rv
0 2 ∞ 3 ∞ − r − r − rw
0 2 ∞ 3 4 − r − r r wu
0 2 1 3 4 − r w r r su
0 2 0 3 4 − r s r r vw
0 2 0 3 2 − r s r v wu
0 2 −1 3 2 − r w r v
Para analisar o algoritmo de Ford, é preciso estabelecer os invariantes (não muito intui-
tivos) do processo iterativo descrito nas linhas 3 a 6. O enunciado desses invariantes
usa a seguinte notação: V ∗ é o conjunto dos nós i para os quais yi < ∞ e D(p) é o V ∗
subgrafo de D induzido pelo conjunto de arcos da forma (pj , j). D(p)
Lema 1.3 (dos invariantes) Se a rede (D, c, r) não tem ciclo dirigido negativo então, no
início de cada iteração,
(i1) todo arco do grafo D(p) está justo ou tenso,
(i2) para cada arco ij de D, se existe caminho dirigido de j a i em D(p)
então ij não está tenso,
(i3) para cada i em V ∗ , existe um caminho dirigido de r a i em D(p),
(i4) para cada i em V ∗ , tem-se yi ≤ |V ∗ | ω, sendo ω := maxvw∈E(D) |cvw |.4
4
Não confunda “ω” com “w”.
6 1.3. ALGORITMO DE FORD FEOFILOFF
c(Pw ) ≤ yw − yr
(basta fazer um raciocínio análogo ao da prova do lema 1.1). Por outro lado, c(Pw ) ≥
yw −yr pelo lema 1.1. Assim, c(Pw ) = yw −yr . Segue daí e da condição de otimalidade 1.2
que o caminho Pw é mínimo, como desejamos.
Para concluir a prova, precisamos garantir que a execução do algoritmo termina depois
de um número finito de iterações se as hipóteses (1) e (2) estiverem satisfeitas. Será
preciso supor também que o vetor c não tem componentes irracionais. Comecemos
supondo que c é inteiro. Então, no início de cada iteração, temos yi ≤ nω para cada
n i em V ∗ , sendo n o número de nós de D. Por outro lado, se Pi é o caminho dirigido
simples de r a i em D(p) então yi − yr ≥ c(Pi ) por um raciocínio análogo ao da prova
do lema 1.1. Como yr = 0 e Pi tem menos que n arcos, temos yi ≥ c(Pi ) ≥ −nω. Em
suma,
−nω ≤ yi ≤ nω
para cada i em V ∗ . Ao longo da execução do algoritmo, todas as componentes do
vetor y permanecem inteiras e cada iteração subtrai pelo menos 1 unidade de alguma
componente de y. Como −nω ≤ yw ≤ nω, cada nó da rede pode fazer o papel de w na
linha 6 no máximo 2ωn vezes. Como y tem n componentes, o número de iterações não
passa de 2ωn2 . Em particular, a execução do algoritmo termina depois de um número
finito de iterações se c for inteiro.
Esse raciocínio pode ser estendido às instâncias em que os custos são racionais. Se c
é racional, então existe ζ em Z+ tal que ζce ∈ Z para cada e. Com isso, o número de
iterações não passa de 2ωn2 ζ. Em particular, a execução do algoritmo termina depois
de um número finito de iterações se c é racional.
FEOFILOFF CAMINHOS DIRIGIDOS DE CUSTO MÍNIMO 7
Como a cota superior do número de iterações depende dos custos dos arcos, não po-
demos dizer que o algoritmo de Ford é polinomial, mas apenas pseudopolinomial.
A próxima seção introduz uma variante do algoritmo que organiza a ordem em que os
arcos são relaxados e assim torna o algoritmo polinomial.
Lema 1.4 Depois que uma sequência de varredura S tiver sido processada, tem-se yv ≤
c(P ) para cada nó v e todo caminho dirigido P de r a v que está imerso em S.
Digamos que uma sequência de varredura S é boa se todo caminho dirigido simples
com origem r estiver imerso em S. Como todo caminho dirigido mínimo é simples, ao
final do processamento de uma sequência boa teremos yv ≤ c(P ) para todo caminho
dirigido mínimo P de r a v. Por outro lado, existe um caminho dirigido de r a v de
custo yv (veja o lema 1.3). Logo, o vetor y representa os custos de todos os caminhos
dirigidos mínimos com origem r (a menos, é claro, que a rede tenha um ciclo dirigido
negativo). Segue daí que a execução do algoritmo termina assim que uma sequência
de varredura boa for examinada.
8 1.4. ALGORITMO DE FORD–BELLMAN FEOFILOFF
Um tipo natural de sequência de varredura boa para uma rede com n nós é a que
resulta da concatenação de sequências S1 , S2 , . . . , Sn−1 em que cada Si uma permu-
tação do conjunto de arcos da rede. Essa ideia leva ao algoritmo proposto por R. E.
Bellman [Bel] (1958):
Teorema 1.5 (Ford–Bellman) Se a rede (D, c, r) não tem ciclo dirigido negativo e todos
os nós estão ao alcance de r, o algoritmo de Ford–Bellman produz um potencial viá-
vel y e um vetor de predecessores p tais que, para cada nó w, o caminho dirigido de r
a w definido por p tem custo yw − yr .
O teorema tem a seguinte consequência: se a rede não tem ciclo dirigido negativo e
todos os nós estão ao alcance de r, então existe um potencial viável y tal que, para cada
nó w, a diferença yw − yr é a distância de r a w, ou seja, o custo de uma caminho de
custo mínimo de r a w. Há quem diga que um tal y é um potencial viável máximo.
O(nm)
unidades de tempo. Com isso, o algoritmo pode ser considerado fortemente polino-
mial (veja o apêndice G). Não se conhece uma versão do algoritmo de Ford que seja
assintoticamente mais rápida. Para certos tipos de redes, entretanto, há versões bem
mais rápidas do algoritmo, como veremos nas próximas seções.
FEOFILOFF CAMINHOS DIRIGIDOS DE CUSTO MÍNIMO 9
Na linha 4, ∂ − (vi ) denota o conjunto de todos os arcos que saem de vi , conforme se-
ção F.5 do apêndice F.
A análise do algoritmo usa a ideia de sequências de varredura boas da seção 1.4. Diga-
mos que S é a sequência em que o algoritmo examina os arcos. Então S tem a seguinte
propriedade: se i < j então todos os arcos em ∂ − (vi ) aparecem em S antes de todos
os arcos em ∂ − (vj ). Portanto, todo caminho dirigido com origem r está imerso em S.
De acordo com o lema 1.4, o potencial y fica viável tão logo o algoritmo termina de
percorrer S.
Consumo de tempo. Como cada arco aparece apenas uma vez em S, o algoritmo
consome apenas O(m) unidades de tempo.
10 1.7. ALGORITMO ESPECIAL PARA CUSTOS NÃO-NEGATIVOS FEOFILOFF
D IJKSTRA (D, c, r) c ≥ 0
01 para cada w em V (D) faça yw ← ∞
02 yr ← 0
03 Q ← V (D) r {r}
04 enquanto Q 6= ∅ faça
05 escolha v em Q tal que yv é mínimo
06 Q ← Q r {v}
07 para cada vw em ∂ − (v) faça
08 se yw − yv > cvw vw está tenso
09 então yw ← yv + cvw relaxação de vw
10 pw ← v
11 devolva p e y
O algoritmo mantém um conjunto Q de nós que ainda não foram completamente pro-
cessados. Para provar que o algoritmo está correto, basta verificar que no início de cada
iteração temos (i1) yu ≤ yq para cada u em V (D) r Q e cada q em Q e (i2) para cada u
em V (D) r Q, todos os arcos em ∂ − (u) estão relaxados. Assim, no fim da execução do
algoritmo, todos os arcos estarão relaxados e portanto o potencial y terá a propriedade
desejada.
Esta versão do algoritmo de Dijkstra é conhecida como busca em largura. Ela consome
O(m) unidades de tempo.
Teorema 1.6 (min-max) Dados dois nós r e s de uma rede (D, c), se s está ao alcance
de r e a rede não tem ciclo dirigido negativo então
sendo maxy tomado sobre todos os potenciais viáveis y e minP tomado sobre todos os
caminhos dirigidos P de r a s.
12 1.9. PROGRAMAÇÃO LINEAR FEOFILOFF
E XEMPLO 1.8: Seja y o vetor e A a matriz representados abaixo. Suponha que o vetor y e as linhas
da matriz A são indexados por r, v, w, s de cima para baixo. Então o vetor representado abaixo de
A é yA.
−2 −1 −1 0 0 0
3 +1 0 −1 −1 0
−4 0 +1 +1 0 −1
5 0 0 0 +1 +1
5 −2 −7 2 9
Programa dual. O dual do pl (1) pede um vetor x indexado por E(D) que
minimize cx
sujeito a Ax = b
x ≥ 0.
Para verificar que este é de fato o dual, tome qualquer solução viável y do primal,
qualquer solução viável x do dual, e observe que a prova “yb = y(Ax) = (yA)x ≤ cx”
do teorema fraco da dualidade usa todas as restrições dos dois pl’s.
E XEMPLO 1.9: Seja A a matriz e x o vetor representados abaixo com x na horizontal abaixo de A.
Suponha que o vetor x e as colunas de A são indexados por a, b, c, d, e da esquerda para a direita.
Então o vetor representado à direita de A é Ax.
−1 −1 0 0 0 −1
+1 0 −1 −1 0 0
0 +1 +1 0 −1 0
0 0 0 +1 +1 +1
1 0 1 0 1
Folgas complementares. A relação fraca de dualidade entre os pl’s (1) e (2) consiste
na sequência de desigualdades yb = y(Ax) = (yA)x ≤ cx, válida para qualquer solução
viável y do pl primal e qualquer solução viável x do dual. Portanto, yb = cx se e
somente se (yA)x = cx, ou seja, se e somente se
P
vw∈E ((yw − yv ) − cvw )xvw = 0.
Como (yw − yv ) ≤ cvw e x ≥ 0, essa igualdade vale se e somente se, para cada arco vw,
xvw = 0 ou yw − yv = cvw .
Essas são as condições de folgas complementares (veja a seção C.3) do par dual de
pl’s. Essas condições correspondem à seguinte afirmação: todos os arcos de qualquer
caminho dirigido mínimo de r a s estão justos em relação ao potencial y.
Soluções ótimas dos pl’s. Suponha que o pl (1) é viável e o pl (2) é viável. Nessas
condições, o teorema forte da dualidade C.2 (veja a seção C.2) garante que o pl (1) tem
uma solução ótima y ∗ , que o pl (2) tem uma solução ótima x∗ , e que
y ∗ b = cx∗ .
Mesmo que x∗ não seja o vetor característico de um caminho dirigido, o número cx∗
é igual ao custo de um caminho mínimo de r a s. Para verificar essa afirmação, basta
lembrar que cx∗ = y ∗ b e observar que o teorema de Ford–Bellman 1.5 garante que y ∗ b é
igual ao custo de um caminho mínimo.
Y (·) Seja Y (D, c) o poliedro do pl (1), isto é, o conjunto de todos os vetores y que satisfazem
as restrições yA ≤ c.
Se o grafo D tem um ciclo dirigido negativo então Y (D, c) é vazio conforme o lema 1.1.
A recíproca é verdadeira, embora menos óbvia: se a rede não tem um ciclo dirigido
negativo então Y (D, c) não é vazio.
Agora considere a existência de vértices em Y (D, c). Para qualquer y em Y (D, c), os
vetores y + 1 e y − 1 também estão em Y (D, c), pois yw + 1 − yv + 1 = yw − yv . (Aqui,
“1” representa o vetor constante cujas componentes são todas iguais a 1.) Portanto,
Y (D, c) não tem vértices. A continuação dessa argumentação acaba por mostrar que
Y (D, c) não é limitado (ou seja, não cabe em um cubo).
E XEMPLO 1.10: Seja D a rede com nós r v w s definida pela matriz de incidências A à esquerda e
considere o vetor de custos c à direita.
rv rw vw vs ws rv rw vw vs ws
r −1 −1 5 7 1 8 6
v +1 −1 −1
w +1 +1 −1
s +1 +1
Veja as restrições que definem o poliedro Y (D, c) escritas explicitamente abaixo. Veja também um
vetor de Y (D, c) mais à direita.
yv − yr ≤ 5
yw − yr ≤ 7 r 0
v 5
yw − yv ≤ 1
w 6
ys − yv ≤ 8 s 12
ys − yw ≤ 6
Observe que 1A = 0. (Toda matriz de incidências tem essa propriedade. Na linguagem da álgebra
linear, diríamos que o conjunto das linhas de A é linearmente dependente.) Logo, para qualquer
y em Y (D, c), temos (y ± 1)A = yA ≤ c. Isso mostra que Y (D, c) não tem vértices. Ademais, o
poliedro Y (D, c) não é limitado, uma vez que y+α1 está em Y (D, c) qualquer que seja y em Y (D, c)
e α real.
X(·) Seja X(D, r, s) o poliedro do pl (2), isto é, o conjunto de todos os vetores x que satis-
fazem as restrições Ax = b e x ≥ 0. Em que condições o poliedro é vazio? Em que
condições é limitado? Como são seus vértices?
É evidente que o vetor característico de qualquer caminho dirigido de r a s pertence
ao poliedro X(D, r, s). Reciprocamente, para qualquer vetor x do poliedro, existe um
caminho dirigido de r a s cujos arcos pertencem ao suporte (veja a seção A.2 do apên-
dice A) de x. Assim, X(D, r, s) é vazio se e somente se não existe caminho dirigido de
r a s. (Veja o exercício 1.54.)
FEOFILOFF CAMINHOS DIRIGIDOS DE CUSTO MÍNIMO 15
E XEMPLO 1.11: Considere novamente a rede D do exemplo 1.10. Ela tem nós r v w s e é definida
pela matriz de incidências abaixo.
rv rw vw vs ws
r −1 −1
v +1 −1 −1
w +1 +1 −1
s +1 +1
Veja as restrições lineares que definem o poliedro X(D, r, s):
−xrv − xrw = −1
xrv − xvw − xvs = 0
xrw + xvw − xws = 0
xvs + xws = +1
xrv ≥ 0
xrw ≥ 0
xvw ≥ 0
xvs ≥ 0
xws ≥ 0.
ru uv us vw wu ru uv vw wu us
r −1 r u s x 1 99 99 99 1
u +1 −1 −1 +1 x0 1 0 0 0 1
v +1 −1 w v
w +1 −1
s +1
Se d é o vetor característico do ciclo (u, v, w, u), então tanto x+d quanto x−d pertencem a X(D, r, s).
Logo, x não é vértice de X(D, r, s). Já x0 é vértice de X(D, r, s). Note que x0 é o vetor característico
de um caminho dirigido simples de r a s.
Suponha que o pl (2) tem solução ótima para um determinado vetor de custos c. De
acordo com o corolário C.3 no apêndice C, alguma solução ótima do pl é um vértice
do poliedro X(D, r, s). Portanto, alguma solução ótima do pl é (o vetor característico
de) um caminho dirigido simples de r a s. Podemos supor então (veja a seção C.4) que
qualquer algoritmo de programação linear — como o Simplex, por exemplo — resolve
o problema 1.A. Mas é claro que um algoritmo especializado, como o de Ford-Bellman,
é mais eficiente.
1.11 Exercícios
Seção 1.1
1.1 Esboce um algoritmo que decida se todos os nós de um grafo dirigido estão ao alcance de um dado
nó r.
1.2 ? Caminhos mínimos simples. Seja P um caminho dirigido mínimo numa rede (D, c). Mostre que
algum subcaminho P 0 de P é dirigido, é mínimo, é simples, e tem a mesma origem e o mesmo
término de P .
1.3 ? Subcaminhos de caminhos mínimos. Prove que qualquer subcaminho de um caminho dirigido
mínimo é mínimo. Mostre que essa propriedade deixa de valer se nos restringirmos a caminhos
dirigidos simples. [CCPS 2.19]
1.4 Árvores. Calcule um caminho dirigido mínimo de r a v numa rede (D, c) em que D é uma árvore
radicada. Calcule um caminho mínimo de r a v numa rede (D, c) em que D é uma árvore orientada.
1.5 ? Problema dos caminhos dirigidos simples mínimos. Por que não restringir o problema 1.A aos cami-
nhos dirigidos quase-simples? Melhor ainda: por que não restringir o problema 1.A aos caminhos
dirigidos simples? Se fizermos isso, ciclos dirigidos negativos deixarão de ser um empecilho para
a existência de solução.
1.6 Dada uma rede (D, c) e subconjuntos disjuntos R e S de V (D) queremos encontrar um caminho
dirigido mínimo dentre os que vão de algum nó de R algum nó de S. Mostre como esse problema
pode ser reduzido ao problema 1.A. [CCPS 2.22]
1.7 No problema 1.A, podemos supor que o grau de entrada de r é 0?
FEOFILOFF CAMINHOS DIRIGIDOS DE CUSTO MÍNIMO 17
Seção 1.2
1.8 Árvores. Calcule um potencial viável numa rede (D, c) em que D é uma árvore radicada. Calcule
um potencial viável numa rede (D, c) em que D é uma árvore orientada.
1.9 Seja y um potencial viável e α um número. Mostre que y − α1 é um potencial viável. (Aqui, 1 é um
vetor indexado pelos nós cada um de cujos elementos vale 1.)
1.10 Prove o corolário 1.2. Prove também que a condição “existe um potencial viável y tal que c(Pw ) =
yw − yr para cada w” equivale à condição “existe um potencial viável y tal que todos os arcos de
cada Pw estão justos”.
1.11 ? Potencial versus ciclo dirigido negativo. Suponha que y é um potencial viável numa rede. Deduza
do lema 1.1 que a rede não tem ciclos dirigidos negativos.
1.12 Seja (D, c, r) uma rede. Para cada nó w, suponha dado um caminho dirigido simples Pw de r a w.
Descreva um algoritmo que decida se a coleção (Pw : w ∈ V (D)) é uma solução dessa instância do
problema 1.A.
Seção 1.3
1.13 Complete a prova do lema 1.3. Deduza de (i2) e (i3) que yr = 0 no início de cada iteração.
1.14 Complete os detalhes da prova da correção do algoritmo de Ford.
1.15 Árvores. Aplique o algoritmo de Ford a uma rede (D, c, r) em que D é uma árvore radicada. Aplique
o algoritmo de Ford a uma rede (D, c, r) em que D é uma árvore orientada.
1.16 Potencial finito. Mostre que na linha 1 do algoritmo F ORD o ∞ pode ser substituído pelo número nω,
onde ω := 1 + max (|ce | : e ∈ E(D)) e n := |V (D)|. (Dica: Qualquer caminho dirigido simples na
rede tem custo menor que nω.) (Se essa substituição for feita, será preciso adotar a convenção
nω + λ = nω qualquer que seja λ.)
Seção 1.4
1.17 ? Corolário do teorema de Ford–Bellman. Prove o seguinte corolário do teorema 1.5: Uma instância
(D, c, r) do problema 1.A tem solução se e somente se (1) todos os nós de D estão ao alcance de r e
(2) a rede (D, c) não há ciclo dirigido negativo. (Dica: Enuncie e prove em separado a parte “se” e
a parte “somente se”.)
1.18 ? Potencial e distâncias. Prove o seguinte corolário do teorema 1.5: se a rede (D, c, r) não tem ciclo
dirigido negativo e todos os nós estão ao alcance de r, então existe um potencial viável y tal que,
para cada nó w, a diferença yw − yr é a distância de r a w.
1.19 Ciclos dirigidos negativos versus potencial. Conforme o exercício 1.11, se uma rede tem um potencial
viável então não tem ciclo dirigido negativo. Use o teorema 1.5 para provar a recíproca.
1.20 Considere uma instância do problema 1.A em que todos os custos são não-negativos e todos os nós
estão ao alcance de r. Deduza do teorema 1.5 que essa instância tem solução.
1.21 Considere uma instância do problema 1.A em que o grafo é acíclico e todos os nós estão ao alcance
de r. Deduza do teorema 1.5 que essa instância tem solução.
1.22 Aplique o algoritmo F ORD B ELLMAN ao grafo dirigido com nós r s t u v w e arcos rs st tu uv vw .
Todos os arcos têm custo 1 e o nó inicial é r. Examine o conjunto de arcos sempre na ordem
(vw, uv, tu, st, rs).
1.23 Prove a seguinte afirmação (feita depois da prova do lema 1.4): se a rede não tem ciclo dirigido ne-
gativo e a sequência de varredura S é boa então o potencial y torna-se viável assim que o algoritmo
tiver processado S.
18 1.11. EXERCÍCIOS FEOFILOFF
1.24 No algoritmo F ORD B ELLMAN, não seria suficiente repetir o bloco de linha 4–7 até que y se “estabi-
lize”? Discuta essa ideia.
1.25 Potencial inteiro. Suponha que a vetor c de custos é inteiro. Mostre que o potencial y produzido pelo
algoritmo de Ford–Bellman é inteiro.
1.26 Nem tudo ao alcance de r. Como interpretar o resultado (y, p) do algoritmo F ORD B ELLMAN no caso
em que nem todos os nós da rede estão ao alcance de r?
1.27 Árvores. Escreva uma versão especializada do algoritmo F ORD B ELLMAN para redes (D, c) em que
D é uma árvore radicada. Escreva uma versão especializada de F ORD B ELLMAN para redes (D, c)
em que D é uma árvore orientada.
1.28 Aplique o algoritmo de Ford–Bellman à rede cujos nós são r a b f g h j k e cujos arcos e custos são
dados pela tabela a seguir. [CCPS 2.21]
ra rk rb ad af bk bf dh fg fj gh gj jh kd kh kg kf
2 7 5 8 4 3 2 5 3 7 4 3 3 2 9 6 1
1.29 Mostre todos os caminhos dirigidos mínimos a partir do nó r. Mostre um potencial viável que
prove a minimalidade dos caminhos. [Sch17 1.2]
Seção 1.5
1.30 Acrescente código ao algoritmo F ORD B ELLMAN para que ele devolva um ciclo dirigido negativo
se tal existir.
1.31 Arbitragem cambial. Seja (D, c, r) uma rede com custos positivos. Para cada nó v, queremos en-
contrar um caminho dirigido de r a v que maximize o produto dos custos dos arcos do caminho
dirigido. Como resolver o problema? (Aplicação: Cada nó é uma moeda, como dólar, euro, real,
yen, etc., e o custo de um arco vw é a taxa de câmbio na conversão de v em w.)
Seção 1.6
1.32 Árvores radicadas. Escreva uma versão especial do algoritmo F ORD B ELLMAN DAG para tratar de
árvores radicadas.
1.33 Aplique o algoritmo F ORD B ELLMAN DAG à rede acíclica (D, c, r) com nós r s t u v e os arcos e
custos definidos abaixo. Adote a permutação topológica (r, s, t, u, v).
rs rt su st tv uv
2 2 4 3 1 −4
1.34 Mostre todos os caminhos dirigidos mínimos a partir do nó r no grafo abaixo. Mostre um potencial
viável que prove a minimalidade dos caminhos. [Sch17 1.2]
FEOFILOFF CAMINHOS DIRIGIDOS DE CUSTO MÍNIMO 19
1.35 Suponha que v1 , v2 , . . . , vn é uma permutação topológica dos nós de uma rede. Quero encontrar
caminhos dirigidos mínimos a partir de um nó vh , com h > 1. Modifique o algoritmo F ORD -
B ELLMAN DAG para resolver o problema.
1.36 Aplique o algoritmo F ORD B ELLMAN DAG à rede do exercício 1.28. [CCPS 2.21]
1.37 ? Segmento de soma mínima. Dados números e1 , . . . , en , queremos encontrar i e j, 1 ≤ i ≤ j ≤ n + 1,
tais que ei + · · · + ej−1 seja mínimo. Dê um algoritmo que resolva o problema em O(n) unidades
de tempo. [CCPS 2.34]
1.38 ? Escalonamento de tarefas. Suponha dadas tarefas T1 , . . . , Tn . A execução de cada tarefa Ti consome
tempo ci ≥ 0. Para certos pares (i, j), a execução de Ti deve preceder a execução de Tj (ou seja, o
processamento de Tj só pode começar depois que o processamento de Ti tiver terminado). Quere-
mos planejar a execução das tarefas de modo que as restrições de precedência sejam respeitadas e
cada tarefa seja concluída tão cedo quanto possível. (Note que várias tarefas podem ser executadas
ao mesmo tempo.) Reduza esse problema ao cálculo de um potencial viável máximo em um DAG.
[CCPS 2.35]
Seção 1.7
1.39 Mostre que o algoritmo de Dijkstra pode dar resultados errados se a rede tiver ciclos dirigidos
negativo. [CCPS 2.36]
1.40 Prove os invariantes (i1) e (i2) do algoritmo D IJKSTRA.
1.41 Prove que w ∈ Q sempre que o arco vw está tenso na linha 08 do algoritmo D IJKSTRA.
1.42 Para i = 1, 2, . . . , vn−1 , seja vi o nó que o algoritmo D IJKSTRA escolha na linha 05 na i-ésima
iteração. Adote v0 := r. Agora considere a sequência S = (e1 , e2 , . . . , em ) de arcos que o algoritmo
examina nas sucessivas passagens pela linha 07: primeiro todos os arcos que saem de v0 , depois
todos os arcos que saem de v1 , e assim por diante. Mostre que no fim da execução do algoritmo
todos os caminhos dirigidos mínimos que começam em r estão imersos em S.
1.43 Aplique o algoritmo de Dijkstra à rede do exercício 1.28. [CCPS 2.21]
1.44 Translação de custos. Suponha que a função-custo c de uma rede tem valores negativos. Eis uma
ideia simples para eliminar os custos negativos. Seja µ := min(ce : e ∈ E(D)) e subtraia µ do custo
de cada arco. Agora todos os custos são não-negativos. Execute o algoritmo de Dijkstra usando os
novos custos. Os caminhos dirigidos mínimos produzidos pelo algoritmo têm custo mínimo em
relação à função c original? [AMO 5.21]
1.45 Redes não-dirigidas. Considere a variante do problema 1.A que procura por caminhos não-dirigi-
dos mínimos em grafos não-dirigidos com custos não-negativos nas arestas. Mostre como reduzir
esse problema ao problema 1.A. Qual a dificuldade de usar a mesma redução no caso de custos
arbitrários? [CCPS 2.37]
Seção 1.8
1.46 Árvores. Escreva uma versão especial de B USCA E M L ARGURA para árvores radicadas. Escreva uma
versão especial de B USCA E M L ARGURA para árvores orientadas.
1.47 ? Caminhos versus cortes. Sejam r e s dois nós de um grafo dirigido. Dizemos que um corte dirigido
separa s de r se existe um conjunto S de nós tal que s ∈ S, r ∈
/ S e ∂ + (S) = ∅. Mostre que um corte
dirigido separa s de r se e somente se não existe caminho dirigido de r a s. (Dica: Enuncie e prove
em separado a parte “se” e a parte “somente se”.)
20 1.11. EXERCÍCIOS FEOFILOFF
Seção 1.9
1.48 Prove o teorema min-max 1.6 a partir do teorema de Ford–Bellman 1.5 e do lema 1.1.
1.49 É verdade que toda solução ótima x do pl (2) tem a propriedade 0 ≤ x ≤ 1?
1.50 Prove que todo caminho dirigido simples de r a s descreve uma solução viável do pl (2). Prove que
qualquer caminho dirigido mínimo de r a s descreve uma solução ótima do pl (2).
1.51 É verdade que toda solução viável binária do pl (2) descreve um caminho dirigido de r a s? É ver-
dade que toda solução ótima do pl (2) descreve um caminho dirigido de r a s?
1.52 ? Escalonamento de tarefas (mais uma vez). Refaça o exercício 1.38 depois de representar o problema
por um programa linear. [CCPS 2.35]
Seção 1.10
1.53 Mostre que Y (D, c) = ∅ se e somente se a rede tem um ciclo dirigido negativo.
1.54 ? Mostre que X(D, r, s) = ∅ se e somente se não existe caminho dirigido de r a s.
1.55 ? Mostre que X(D, r, s) é limitado se e somente se D não tem ciclos dirigidos.
1.56 ? Seja P um caminho dirigido de r a s. Seja x o vetor característico de E(P ). Mostre que x é vértice
do poliedro X(D, r, s).
1.57 ? Vértices versus ciclos. Prove que x é vértice de X(D, r, s) se e somente se D não tem ciclo (dirigido
ou não) cujos arcos estão no suporte de x.
1.58 ? Vértices são caminhos dirigidos. Mostre que todo vértice do poliedro X(D, r, s) é o vetor caracterís-
tico de um caminho dirigido simples de r a s.
Exercícios adicionais
1.59 Suponha dada uma rede (D, c, r) e um nó w que incide em exatamente dois arcos (ou seja, apenas
dois arcos têm w como ponta inicial ou ponta final). Mostre como reduzir o problema dos caminhos
dirigidos mínimos nessa rede a uma rede menor. [CCPS 2.23]
1.60 ? Árvores. Seja (T, c) uma rede em que T é uma árvore orientada e c uma função-custo. Escreva um
algoritmo que receba T , c, e um nó r e calcule, para cada nó v, um caminho (não necessariamente
dirigido!) de custo mínimo de r a v em T .
1.61 Suponha que (D, c, r) é uma rede em que todos os arcos têm o mesmo custo. Qual o algoritmo
assintoticamente mais rápido para resolver o problema dos caminhos dirigidos mínimos nessa
rede?
1.62 Suponha dada uma rede com custos não-negativos. Suponha que r, s e t são três nós da rede.
Queremos encontrar um caminho dirigido mínimo dentre os que começam em r, passam por s,
e terminam em t. Uma solução desse problema é necessariamente um caminho dirigido simples?
Descreva informalmente um algoritmo para resolver o problema. Prove que o seu algoritmo resolve
o problema. [AMO 4.45]
1.63 Capacidade mínima. Digamos que a capacidade de um caminho dirigido é o mínimo dos custos de
seus arcos. Problema: Determine um caminho dirigido de capacidade mínima dentre os que vão
de r a s.
1.64 Custos diretos e custos inversos. Suponha que cada arco e de uma rede tem
P 0doisPcustos, c0e e c00e , ambos
em R. O custo de um caminho P , não necessariamente dirigido, é ce + c00e , onde a primeira
soma se estende a todos os arcos diretos de P e a segunda a todos os arcos inversos de P . Problema:
Determinar um caminho de custo mínimo dentre os que vão de um nó r a um nó s. Enuncie uma
condição de otimalidade apropriada.
FEOFILOFF CAMINHOS DIRIGIDOS DE CUSTO MÍNIMO 21
1.65 Caminhos dirigidos de comprimento ímpar. Numa rede com custos não-negativos e dois nós r e s,
considere o problema de encontrar um caminho dirigido mínimo de r a s dentre os que têm um
número ímpar de arcos. Note que um caminho dirigido pode não ser simples. Mostre como reduzir
esse problema ao problema ordinário dos caminhos dirigidos mínimos (sem restrição de paridade).
(Sugestão: Troque cada nó diferente de r e s por dois novos nós.) Repita o problema depois de
trocar “ímpar” por “par”. [CCPS 2.38]
1.66 Análise de sensibilidade. Seja (D, c, r) uma rede sem ciclos dirigidos negativos. Para cada nó v,
digamos que dv é a distância de r a v, ou seja, o custo de um caminho dirigido mínimo de r a v. De
quanto podemos diminuir o custo de um certo arco ij sem que os valores da função d se alterem?
22 1.11. EXERCÍCIOS FEOFILOFF
Capítulo 2
O problema do fluxo máximo entre dois nós de uma rede é fundamental em otimi-
zação combinatória. O correspondente teorema Max-flow Min-cut é uma poderosa
ferramenta com muitas aplicações.
(Use o índice remissivo na página 191 para localizar as definições de conceitos e termos
técnicos.)
2.1 Fluxo
Um fluxo em um grafo dirigido D é qualquer função de E(D) em R+ . Em outras
palavras, um fluxo é uma função que atribui um número real1 não-negativo a cada
arco de D.
Se x é um fluxo e R é um conjunto de nós do grafo, denotamos por x(∂ + (R)) a soma
dos valores de x nos arcos de ∂ + (R), ou seja, nos arcos que entram em R. Convém
simplificar essa expressão e escrever apenas x+ (R).2 Portanto,
P
x+ (R) := (xuv : uv ∈ ∂ + (R)) .
Analogamente, denotamos por x− (R) a soma dos valores de x nos arcos que saem
de R: 3 P
x− (R) := (xvw : vw ∈ ∂ − (R)) .
É claro que x− (R) = x+ (R), sendo R := V (D) r R. O excesso, ou acúmulo, ou saldo
(= net flow) de x em R é a “quantidade” de fluxo que fica “retida” em R. Esse excesso é
denotado por x+− (R):
x+− (R) := x+ (R) − x− (R) .
1
Poderíamos nos restringir aos números racionais, uma vez que computadores digitais não conhe-
cem números irracionais.
2
Já usamos essa notação na seção 1.9.
3
Para justificar os superscritos “+” e “−”, você pode imaginar que os nós são contas bancárias e os
arcos representam movimentação de dinheiro: tudo que entra numa conta é somado ao saldo e tudo
que sai é subtraído.
23
24 2.1. FLUXO FEOFILOFF
Lema 2.1 (soma de excessos) Para qualquer fluxo x em um grafo dirigido D e qual-
quer subconjunto R de V (D), a soma dos excessos nos nós de R é igual ao excesso
em R: P
v∈R x− (v) = x− (R) .
+ +
P P
P ROVA : Para mostrar que v∈R x+ (v) − v∈R x− (v) = x+ (R) − x− (R), basta verificar
que cada arco do grafo dá a mesma contribuição para o lado esquerdo e o lado direito
dessa igualdade.
Um arco ij que tem ambas as pontas em R contribui xij para o primeira somatória e xij
para o segunda somatória, e portanto a contribuição total para o lado esquerdo é nula.
A contribuição de ij para o lado direito também é nula. Um raciocínio análogo mostra
que é nula a contribuição dos arcos que têm ambas as pontas em R.
Um arco que entra em R contribui apenas para o primeira somatória do lado esquerdo
e para o primeiro termo do lado direito. Analogamente, um arco que sai de R contribui
apenas para o segunda somatória do lado esquerdo e o segundo termo do lado direito.
Resumindo: cada arco com uma ponta em R e outra em R dá a mesma contribuição
para os dois lados da igualdade.
2.1.1 Circulação
Uma circulação (= circulation) em uma grafo dirigido é qualquer fluxo que tenha ex-
cesso nulo em cada nó. Mais precisamente, uma circulação é qualquer fluxo x tal que
x+− (v) = 0
para cada nó v. (Essa igualdade é conhecida como conservação de fluxo em v.) Segue do
lema 2.1 que a “quantidade” de circulação que atravessa um corte “da esquerda para
a direita” é igual à “quantidade” que atravessa o corte “da direita para a esquerda”:
Corolário 2.2 Para qualquer circulação x e qualquer conjunto R de nós, vale a igual-
dade x− (R) = x+ (R).
Qualquer família de ciclos dirigidos define uma circulação. (Poderíamos nos restringir
a ciclos simples, mas isso não afetaria os conceitos.) Se C1 , . . . , Cj é uma família de
ciclos dirigidos e xe é o número desses ciclos que contêm o arco e então x é uma
circulação. Reciprocamente, toda circulação pode ser representada por uma família
de ciclos dirigidos, como mostramos a seguir.
E SBOÇO DA PROVA : Seja E 0 o suporte de x, isto é, o conjunto dos arcos e tais que
xe 6= 0. Se E 0 é vazio, a conclusão do lema vale com j = 0. Senão, seja D0 o subgrafo
de D induzido por E 0 . Como x+ (v) = x− (v) para cada nó v, o grafo D0 tem um ciclo
dirigido simples, digamos C. (Veja o lema F.1 no apêndice F.) Seja α := mine∈E(C) xe .
Subtraia α de xe para cada arco e de C. Essa operação produz uma nova circulação.
Repita o processo com a nova circulação.
02 03 04 12 14 24 34 35 45 51
x 0 0 0 2 1 2 0 0 3 3
Esta circulação pode ser decomposta nos ciclos dirigidos (1, 2, 4, 5, 1) e (1, 4, 5, 1). O primeiro ciclo
conduz 2 unidades de fluxo e o segundo conduz 1 unidade.
Lema 2.4 Para qualquer fluxo x de r a s e qualquer conjunto R que separa r de s, tem-
se int(x) = −x+− (R), ou seja, a intensidade de x é igual à diferença x− (R) − x+ (R).
E SBOÇO DA PROVA : Seja E 0 o suporte de x. Seja D0 o grafo (V, E 0 ). Graças ao lema 2.1,
se int(x) > 0 então existe um caminho dirigido de r a s em D0 . Seja P esse caminho
e β := mine∈E(P ) xe . Subtraia β de xe para cada e em P . Isso produz um novo fluxo
de r a s. A intensidade do novo fluxo é int(x) − β. Repita o processo até obter um
fluxo de intensidade 0. Esse fluxo será uma circulação, e portanto o lema 2.3 poderá
ser aplicado.
02 03 04 12 14 24 34 35 45 51
x 1 3 2 0 4 1 0 3 7 4
Este fluxo pode ser decomposto em três caminhos dirigidos e um ciclo dirigido: (0, 3, 5), (0, 4, 5),
(0, 2, 4, 5) e (1, 4, 5, 1). Os caminhos conduzem 3, 2 e 1 unidades de fluxo respectivamente. O ciclo
conduz 4 unidades de fluxo.
Problema 2.A (fluxo máximo) Dados nós r e s de uma rede capacitada (D, u), encon-
trar um fluxo de r a s que respeite u e tenha intensidade máxima.
de “fluxo viável de intensidade máxima”. Podemos até mesmo dizer “fluxo máximo”,
subentendendo o “viável”.
Toda instância do problema tem solução. Com efeito, toda instância tem um fluxo
viável (o fluxo nulo, por exemplo) e toda instância tem um fluxo máximo (uma vez
que a intensidade de qualquer fluxo não passa da soma das capacidades de todos os
arcos).
Os cortes mais relevantes numa rede de fluxo (D, u, r, s) são os que separam r de s.
Dizemos que um corte ∂ − (R) separa r de s se r ∈ R e s ∈ / R. Usamos também a
expressão (r, s)-corte para designar um corte que separa r de s.
E XEMPLO 2.3: Seja D o grafo dirigido com nós r v w s descrito abaixo por sua matriz de adjacên-
cias. À direita, uma função-capacidade u.
r v w s rv rw vw vs ws
r − 1 1 − 7 9 4 9 7
v − − 1 1
w − − − 1
s − − − −
Segue imediatamente do lema 2.4 que a capacidade de qualquer corte que separa r de s
limita a intensidade de qualquer fluxo viável:
Lema 2.6 (fluxo versus corte) Para qualquer fluxo x de r a s que respeita as capacida-
des e qualquer corte C que separa r de s, vale a desigualdade int(x) ≤ cap(C).
O lema leva ao seguinte critério de maximalidade para fluxos: dado um fluxo viável x,
se int(x) = cap(C) para algum corte C que separa r e s então x é máximo, ou seja, x é
solução do problema 2.A.
O lema também leva ao seguinte critério de minimalidade para cortes: dado um (r, s)-
corte C, se cap(C) = int(x) para algum fluxo viável x então C é mínimo, ou seja, tem
capacidade mínima dentre todos os cortes que separam r de s.
28 2.4. TEOREMA DO FLUXO MÁXIMO E CORTE MÍNIMO FEOFILOFF
Teorema 2.7 Em qualquer rede de fluxo (D, u, r, s), para qualquer fluxo viável x de
intensidade máxima existe um (r, s)-corte C tal que int(x) = cap(C).
A prova do teorema usa a técnica dos caminhos de aumento que passamos a descrever.
Um caminho (não necessariamente dirigido) é compatível com um fluxo viável x se
(i) é quase-simples; (ii) seus arcos diretos6 não estão cheios de fluxo; e (iii) seus arcos
inversos não estão vazios de fluxo. Em outras palavras, um caminho quase-simples P
é compatível com x se
xe < ue para cada arco direto e de P e
xe > 0 para cada inverso e de P .
Um caminho de aumento (= augmenting path) é qualquer caminho compatível com x
que vai r a s. A largura (= width) de um caminho de aumento P é o maior número ε
tal que xe − ε ≥ 0 para cada arco inverso e de P e xe + ε ≤ ue para cada arco direto e
de P .
Dada a largura ε de um caminho de aumento P , podemos executar a seguinte operação
de envio de ε unidades de fluxo ao longo de P :
para cada arco direto e de P , some ε a xe ;
para cada arco inverso e de P , subtraia ε de xe .
Essa operação produz um novo fluxo que é viável e tem intensidade int(x) + ε. Como ε
é positivo, a intensidade do novo fluxo é maior que a de x. Podemos agora empreender
a prova do teorema 2.7.
O lema 2.4 permite dizer então que x− (R) − x+ (R) = u− (R). Portanto, int(x) =
cap(∂ − (R)), como queríamos mostrar.
E XEMPLO 2.4: A tabela abaixo descreve uma fluxo viável x na rede (D, u, r, s) do exemplo 2.3.
rv rw vw vs ws
u 7 9 4 9 7
x 7 5 2 5 7
A sequência de nós (r, w, v, s) define um caminho de aumento. A largura desse caminho é 2. É fácil
calcular o fluxo x0 que resulta do envio de 2 unidades de fluxo ao longo do caminho de aumento.
Feito isso, é fácil calcular um (r, s)-corte mínimo.
A prova do teorema 2.7, combinada com o lema 2.6, produz a seguinte manifestação
da condição de folgas complementares da programação linear (veja a seção C.3):
E XEMPLO 2.5: A tabela abaixo descreve uma fluxo viável x na rede (D, u, r, s) do exemplo 2.3.
rv rw vw vs ws
u 7 9 4 9 7
x 7 7 0 7 7
A combinação do teorema 2.7 com o lema 2.6 pode ser resumida no seguinte teorema,
conhecido pelas iniciais MFMC de “Max-Flow Min-Cut”:
Teorema 2.9 (MFMC) Em qualquer rede de fluxo (D, u, r, s), vale a igualdade
sendo maxx tomado sobre todos os fluxos viáveis x e minC tomado sobre todos os cortes
C que separam r de s.
30 2.5. ALGORITMO DE FORD–FULKERSON FEOFILOFF
Teorema 2.10 (MFMC inteiro) Em qualquer rede de fluxo (D, u, r, s), se a função-ca-
pacidade u é inteira então algum fluxo viável máximo é inteiro.
P ROVA : Refaça a prova do teorema 2.7 começando com o fluxo nulo. A largura ε de
qualquer caminho de aumento será inteira. Portanto, o envio de ε unidades de fluxo
ao longo de um caminho de aumento produzirá um novo fluxo inteiro.
O(nm2 )
32 2.7. PROGRAMAÇÃO LINEAR FEOFILOFF
unidades de tempo. Essa delimitação não depende de u, e portanto podemos dizer que
o algoritmo é fortemente polinomial.
sendo V := V (D) e E := E(D). Todo fluxo viável na rede (D, u, r, s) é solução viá-
vel desse pl. Reciprocamente, toda solução viável do pl é um fluxo viável na rede.
Portanto, x é um fluxo de intensidade máxima se e somente x é solução ótima do pl.
Convém escrever esse pl em notação matricial. Seja A a matriz de incidências de D e
I a matriz identidade indexada por E × E. Além disso, adote as abreviaturas V 0 :=
V r {r, s}, A0 := A[V 0 , E] e c := A[s, E]. Com essa notação, o pl (1) fica assim:
maximize cx
sob as restrições A0 x = 0
(2)
Ix ≤ u
x ≥ 0
sendo o primeiro “0” o vetor nulo indexado por V 0 e o segundo o vetor nulo indexado
por E.
minimizem y 0 0 + zu
sob as restrições y 0 A0 + zI ≥ c (3)
z ≥ 0.
O problema 2.A do fluxo máximo pode também ser formulado como um programa
linear que representa a decomposição de fluxos em caminhos (veja o lema 2.5). Se de-
notarmos por P o conjunto de todos os caminhos dirigidos simples de r a s, o problema
pode ser formulado assim: encontrar um vetor (wP : P ∈ P) que
P
maximize (wP : P ∈ P)
P
sujeito a (wP : e ∈ P ∈ P) ≤ ue para cada e ∈ E (6)
wP ≥ 0 para cada P ∈ P.
P
minimize (ze ue : e ∈ E)
P
sujeito a (ze : e ∈ P ) ≥ 1 para cada P ∈ P (7)
ze ≥ 0 para cada e ∈ E.
(Em outras palavras, trata-se de atribuir pesos não-negativos z aos arcos de modo que
a soma dos pesos em cada caminho de P seja pelo menos 1.) Para qualquer corte que
separa r de s, o vetor característico z do corte é solução viável de (7).
E XEMPLO 2.6: Considere a rede descrita abaixo por sua matriz de adjacências e sua função-capaci-
dade.
rv rw vw vs ws rv rw vw vs ws
r −1 −1 7 9 4 9 7
v +1 −1 −1
w +1 +1 −1
s +1 +1
A seguir, as restrições do pl (1) escritas por extenso:
xrv − xvw − xvs = 0
xrw + xvw − xws = 0
xrv ≤ 7
xrw ≤ 9
xvw ≤ 4
xvs ≤ 9
xws ≤ 7
xrv ≥ 0
xrw ≥ 0
xvw ≥ 0
xvs ≥ 0
xws ≥ 0
FEOFILOFF FLUXO MÁXIMO E CORTE MÍNIMO 35
O poliedro X(D, u, r, s) é limitado pois 0 ≤ x ≤ u para todo x no conjunto. O poliedro não é vazio
pois contém o vetor 0. Os vetores x0 e x00 descritos a seguir também estão no poliedro.
rv rw vw vs ws
0
x 7 7 0 7 7
x00 4 0 4 0 4
O vetor x000 abaixo está em X(D, u, r, s) mas não é vértice pois tanto x000 + d000 quanto x000 − d000
também estão no poliedro. Observe que o suporte de d000 é o ciclo (v, w, s, v). Observe também que
o conjunto de colunas da matriz de incidências que correspondem ao ciclo é l.d. (veja a seção F.7).
rv rw vw vs ws
000
x 5 5 1 4 6
d000 0 0 0.5 −0.5 0.5
O vetor x0000 está em X(D, u, r, s) mas não é vértice porque x0000 + d0000 e x0000 − d0000 estão no poliedro.
Observe que o suporte de d0000 é o caminho (r, w, v, s).
rv rw vw vs ws
0000
x 7 6 1 6 7
d0000 0 0.2 −0.2 0.2 0
De acordo com o corolário C.3 no apêndice C, para qualquer vetor de custos c, alguma
solução ótima do pl (1) é um vértice do poliedro X(D, u, r, s).
Qualquer solução ótima do pl (1) é um fluxo máximo de r a s. Portanto (veja a se-
ção C.4), qualquer algoritmo de programação linear — como o Simplex, por exem-
plo — resolve o problema 2.A. Mas é claro que um algoritmo especializado, como o de
Edmonds–Karp, é mais eficiente.
Seja Y (D, r, s) o poliedro do pl (5), isto é, o conjunto de todos os pares (y, z) que satis-
fazem as restrições do pl. O poliedro não é vazio e não é limitado, como passamos
a mostrar. Seja y qualquer vetor indexado por V tal que yr = 1 e ys = 0. Faça
zpq := max (0, yp − yq ) para todo arco pq. (Em outras palavras, se yq ≥ yp então zpq := 0 e
se yq < yp então zpq := yp − yq .) Com z assim definido, o par (y, z) pertence ao poliedro.
E XEMPLO 2.7: Considere novamente a rede do exemplo 2.6. Veja as restrições do pl (5) escritas por
extenso:
yr = 1
ys = 0
yv − yr + zrv ≥ 0
yw − yr + zrw ≥ 0
yw − yv + zvw ≥ 0
ys − yv + zvs ≥ 0
ys − yw + zws ≥ 0
zrv ≥ 0
zrw ≥ 0
zvw ≥ 0
zvs ≥ 0
zws ≥ 0
36 2.9. CAPACIDADES INFINITAS FEOFILOFF
r 1 1 1 1 1
v 0 0 1 0.5 0.5
w 0 1 0 1 0.5
s 0 0 0 0 0
rv 1 1 0 0.5 0.5
rw 1 0 1 0 0.5
vw 0 0 1 0 0
vs 0 0 1 0.5 0.5
ws 0 1 0 1 0.5
Muitos outros vetores de Y (D, r, s) podem ser obtidos a partir destes se observarmos que, para
todo (y, z) em Y (D, r, s) e qualquer z 0 ≥ z, o vetor (y, z 0 ) também está em Y (D, r, s). Com isso, fica
claro que Y (D, r, s) não é limitado.
O poliedro não tem vértices, como passamos a mostrar. Seja (y, z) um elemento de Y (D, r, s) e
tome qualquer nó p diferente de r e de s. Se trocarmos yp por yp + 1 e trocarmos zpq por zpq + 1 para
cada arco pq que sai de p, o vetor modificado estará em Y (D, r, s). Analogamente, se trocarmos yp
por yp − 1 e zqp por zqp + 1 para cada arco qp que entra em p, o vetor resultante estará em Y (D, r, s).
Agora considere um vetor binário (y, z) em Y (D, r, s). Seja R o conjunto de nós cujo vetor caracte-
rístico é y. Então r ∈ R, s ∈
/ R, zpq ≥ 1 para todo arco em ∂ − (R), e zpq ≥ 0 para os demais arcos. Se
(y, z) minimiza zu e u não tem componentes nulas, temos zpq = 1 para todo pq em ∂ − (R) e zpq = 0
para todos os demais arcos. Assim, z é o vetor característico de ∂ − (R).
2.10 Exercícios
Seção 2.1
P +
2.1 Se x é um fluxo e R um conjunto de nós, é verdade que (x (v) : v ∈ R) = x+ (R)?
2.2 Complete os detalhes da prova do lema 2.3.
FEOFILOFF FLUXO MÁXIMO E CORTE MÍNIMO 37
2.3 Seja x um fluxo de r a s e x0 uma circulação. Mostre que x + x0 é um fluxo de r a s e que int(x + x0 ) =
int(x).
− (t) 6= 0.
2.4 Seja x um fluxo em um grafo dirigido. Seja T o conjunto de todos os nós t para os quais x+
Mostre que se |T | ≤ 2 então x é um fluxo de r a s para algum par (r, s) de nós.
2.5 Prove os lemas 2.4 e 2.5.
2.6 Por que podemos supor que j ≤ m no lema 2.3, sendo m o número de número de arcos do grafo
dirigido? Por que podemos supor que j + k ≤ m no lema 2.5?
Seção 2.2
2.7 Seja x um fluxo máximo numa rede (D, u, r, s). É verdade que x+ (r) e x− (s) são nulos?
2.8 Mostre que toda instância do problema 2.A tem um fluxo máximo.
2.9 ? Calcule um fluxo máximo numa rede de fluxo (D, u, r, s) em que D é uma árvore divergente.
2.10 ? Circulação máxima. Mostre que o problema do fluxo máximo equivale ao seguinte: Dada uma
rede capacitada (D, u, r, s) que tem um arco sr de capacidade muito grande (maior que a soma das
capacidades dos demais arcos), encontrar uma circulação x que respeite u e maximize xsr .
2.11 No problema do fluxo máximo, suponha que um nó v distinto de r e de s tem grau de entrada nulo.
Podemos remover esse nó sem afetar a intensidade de um fluxo máximo? E se v tem grau de saída
nulo? [AMO 6.26]
2.12 Caminhos dirigidos disjuntos. Sejam r e s dois nós de um grafo dirigido. Uma coleção de caminhos
dirigidos de r a s é disjunta nos arcos se cada arco do grafo pertence a no máximo um dos caminhos.
Mostre que o problema de encontrar uma coleção disjunta máxima de caminhos dirigidos simples
de r a s é uma instância do problema 2.A.
Seção 2.3
2.13 ? Prove o lema 2.6.
2.14 Seja (D, u, r, s) uma rede capacitada e α um número positivo. É verdade que todo (r, s)-corte
mínimo continua sendo mínimo se multiplicarmos a capacidade de cada arco por α? É verdade
que todo (r, s)-corte mínimo continua sendo mínimo se somarmos α à capacidade de cada arco?
[AMO 6.34]
2.15 Calcule um corte mínimo numa rede de fluxo (D, u, r, s) em que D é uma árvore divergente.
2.16 ? Submodularidade. Sejam X e Y dois conjuntos de nós numa rede capacitada (D, u). Prove a
seguinte propriedade submodular:
u− (X ∪ Y ) + u− (X ∩ Y ) ≤ u− (X) + u− (Y ).
r t u v w s
r − 1 1 1 − −
t − − 1 − − −
u − − − 1 − 1
v − − − − 1 1
w − − − − − 1
s − − − − − −
Seção 2.4
2.19 Seja ε a largura de um caminho de aumento P para um fluxo viável x numa rede (D, u, r, s). Prove
que o envio de ε unidades de fluxo ao longo de P produz um novo fluxo viável. Prove que a
intensidade do novo fluxo é int(x) + ε.
2.20 Seja x um fluxo viável e P um caminho de aumento de largura máxima. Seja ε a largura de P . Seja
x0 o fluxo resultante do envio de ε unidades de fluxo ao longo de P . Um caminho de aumento para
x0 pode ter largura maior que ε? [CCPS 3.10]
2.21 Prove condições necessárias para que uma rede (D, u, r, s, k) tenha um fluxo viável x de intensidade
≥ k.
2.22 Discuta o seguinte problema: dada uma rede de fluxo (D, u, r, s) e um número inteiro f , encontrar
um fluxo viável que tenha intensidade igual a f .
2.23 Suponha que x é um fluxo viável numa rede de fluxo. Discuta a seguinte afirmação: “para provar
que o fluxo x é máximo basta mostrar que não existe caminho de aumento para x”.
2.24 Curiosidade. Discuta o seguinte problema: dada uma rede de fluxo (D, u, r, s), encontrar um con-
junto R de nós que separe r de s e minimize a diferença u− (R) − u+ (R). [CCPS 3.9]
2.25 Encontre um fluxo máximo na rede de fluxo descrita abaixo por sua matriz de adjacências.
rv rw vw vs ws rv rw vw vs ws
r −1 −1 9 7 4 7 9
v +1 −1 −1
w +1 +1 −1
s +1 +1
2.26 A matriz abaixo dá as capacidades dos arcos de uma rede de fluxo. (Faça uma boa figura). Encontre,
iterativamente, um fluxo viável máximo. Exiba o fluxo no início de cada iteração. Mostre um corte
que separa r de s e tem capacidade mínima. [AMO 6.14]
r a b c d e s
r − 4 3 − − − −
a 4 − − 2 3 − −
b 3 − − 2 − − −
c − 2 2 − − 5 −
d − 3 − − − 4 −
e − − − 5 4 − 8
s − − − − − 8 −
2.27 ? A figura mostra uma rede de fluxo (D, u, r, s). Os rótulos “u, x” representam a função-capacidade
e um fluxo viável. Mostre que x tem intensidade máxima ou encontre um fluxo de intensidade
maior. Mostre um corte de capacidade mínima dentre os que separam r de s. [CCPS fig.3.1]
FEOFILOFF FLUXO MÁXIMO E CORTE MÍNIMO 39
2.28 Caminhos dirigidos disjuntos. Considere o problema de encontrar uma coleção disjunta máxima
de caminhos dirigidos simples de r a s num grafo dirigido (veja o exercício 2.12). Mostre que
uma tal coleção máxima tem o mesmo tamanho que um (r, s)-corte com número mínimo de arcos.
[AMO 6.45]
2.29 Fluxo não inteiro. Seja x um fluxo viável máximo numa rede de fluxo com capacidades inteiras.
Sugira um algoritmo que converta x em um fluxo viável x0 que tenha a mesma intensidade que x e
seja inteiro. (Sugestão: Envie fluxo ao longo de ciclos dirigidos.) Qual o consumo de tempo do seu
algoritmo? [AMO 6.40]
2.30 Seja x um fluxo máximo numa rede de fluxo (D, u, r, s). Quais das seguinte afirmações são ver-
dadeiras? A. Se a capacidade de cada arco é um múltiplo de α, então xe é múltiplo de α para
cada arco e. B. Se somarmos α à capacidade de cada arco, estaremos somando um múltiplo de α à
intensidade do fluxo máximo. [AMO 7.9]
Seção 2.5
2.31 Descreva a rotina E NVIA F LUXO em código.
2.32 Aplique o algoritmo de Ford–Fulkerson a uma rede de fluxo (D, u, r, s) em que D é uma árvore
divergente.
2.33 Encontre um fluxo máximo de r a s e um (r, s)-corte mínimo na rede capacitada da figura.
[CCPS 3.2]
2.34 Os rótulos “x (u)” nos arcos representam uma função-capacidade u e um fluxo viável x de S a F .
Mostre que o fluxo x é máximo ou calcule um fluxo máximo.
2.35 Considere a variante do algoritmo de Ford–Fulkerson que usa apenas caminhos de aumento sem
arcos inversos. Essa variante do algoritmo é capaz de encontrar um fluxo máximo?
2.36 ? Capacidades inteiras. Aplique o algoritmo de Ford–Fulkerson a uma rede (D, u, r, s) em que a
função-capacidade u é inteira. Supondo que um fluxo máximo tem intensidade k, mostre que o
algoritmo executa no máximo k iterações. Deduza daí que se u for racional então o número de
iterações é finito.
40 2.10. EXERCÍCIOS FEOFILOFF
Seção 2.6
2.37 Complete a prova do teorema 2.11.
2.38 Escreva, em código, a versão Edmonds–Karp do algoritmo de Ford–Fulkerson.
2.39 Caminho de aumento com número mínimo de arcos inversos. Suponha que algoritmo de Ford–Fulkerson
sempre escolhe um caminho de aumento que tem o menor número possível de arcos inversos.
Prove que o número de aumentações de fluxo (e portanto o número de iterações) será O(m).
Dê um algoritmo que encontre um caminho de aumento desse tipo em O(m) unidade de tempo.
[CCPS 3.15]
2.40 Suponha dado um fluxo máximo em uma rede de fluxo. Mostre como é possível encontrar um
(r, s)-corte mínimo em tempo O(m). Agora suponha dado um (r, s)-corte mínimo. Esse corte pode
ser usado para obter um fluxo máximo rapidamente (ou seja, em tempo menor que o necessário
para resolver o problema sem qualquer informação adicional)? [AMO 6.28]
2.41 Corte mínimo com número mínimo de arcos. Queremos determinar um corte mínimo que tenha o
menor número possível de arcos em uma rede de fluxo (D, u, r, s). Para cada arco vw, seja u0e :=
m ue + 1. Mostre que um corte mínimo na rede (D, u0 , r, s) resolve o problema. [AMO 7.27]
2.42 Capacidades nos nós. Dada uma rede (D, u, r, s), suponha que cada nó v distinto de r e de s tem
uma capacidade não-negativa av que limita a “quantidade” de fluxo que pode passar por v. Como
resolver o problema de determinar um fluxo máximo que respeite as capacidades dos nós e as
capacidades dos arcos? Transforme esse problema em um problema padrão de fluxo máximo (que
só tem capacidades nos arcos). Do ponto de vista da complexidade de pior caso, o problema com
capacidades nos nós é mais difícil que o problema padrão? [AMO 6.25]
2.43 Análise de sensibilidade e arcos vitais. Numa rede (D, u, r, s), um arco a é vital se a redução de ua a 0
causa a maior redução possível na intensidade do fluxo máximo. Prove ou desprove cada uma das
afirmação a seguir: A. Se a é vital então ua é máximo. B. Se x é um fluxo máximo e a é vital então
xa é máximo. C. Se x é um fluxo máximo e a é vital então existe um corte de capacidade mínima tal
que xa ≥ xe para todo arco e no corte. D. Se a é vital então a pertence a algum corte de capacidade
mínima. E. A rede pode ter mais de um arco vital. [AMO 7.7]
2.44 Análise de sensibilidade e arcos dispensáveis. Numa rede (D, u, r, s), um arco a é dispensável se a
redução de ua a 0 causa a menor redução possível na intensidade do fluxo máximo. Prove ou
desprove cada uma das afirmação a seguir: A. Se x é um fluxo máximo e xa = 0 então a é
dispensável. B. Se x é um fluxo máximo e xa é mínimo então a é dispensável. C. Se a pertence
a um corte de capacidade mínima então a não é dispensável. [AMO 7.8]
2.45 Seja D um grafo dirigido completo e (D, u, r, s) uma rede de fluxo. Seja ϕ a intensidade de um
fluxo máximo na rede. Para cada par (i, j) de nós, seja α[i, j] o aumento no valor de ϕ que
obteríamos se uij fosse ∞. A. Mostre que α[i, j] ≤ α[r, j] e α[i, j] ≤ α[i, s]. B. Mostre que
α[i, j] = min (α[r, j], α[i, s]). C. Mostre como α[i, j] pode ser calculado para todo par (i, j) mediante
resolução de O(n) problemas de fluxo máximo. [AMO 7.26]
2.46 Re-otimização. Seja x um fluxo máximo numa rede de fluxo (D, u, r, s). Suponha que um número
k > 0 foi somado à capacidade de um determinado arco e. Mostre como encontrar um novo fluxo
máximo em tempo O(km). Agora suponha que um número k > 0 foi subtraído da capacidade de
um determinado arco e; é possível encontrar um novo fluxo máximo em tempo O(km)? [AMO 6.35]
Seção 2.7
2.47 Discuta as semelhanças e diferenças entre o pl (1) acima e o pl (2) da seção 1.9, que procura um
caminho mínimo.
2.48 Verifique que o pl (3) é o dual o pl (2). Reciprocamente, verifique que (2) é dual de (3).
2.49 Verifique que o pl (4) é idêntico ao pl (3). Verifique que o pl (4) é equivalente ao pl (5).
FEOFILOFF FLUXO MÁXIMO E CORTE MÍNIMO 41
2.50 ? Trocando fluxo por circulação. Suponha dada uma rede (D, u, r, s) em que sr é um arco e usr é muito
grande, maior que u− (r), por exemplo. Mostre que o problema do fluxo máximo (1) equivale ao
problema encontrar uma circulação que maximize xsr . Escreva o pl que represente esse segundo
problema. Escreva o dual do pl.
2.51 Mostre que qualquer corte que separa r de s corresponde a uma solução viável (y, z) do pl (5) e
que o valor zu da solução viável (y, z) é igual à capacidade do corte. Mostre ainda que qualquer
(r, s)-corte mínimo define uma solução ótima do pl (5). (Sugestão: use o teorema 2.7 para obter
uma solução ótima do pl (1).)
2.52 Prove que o pl (7) é o dual do pl (6). Reciprocamente, prove que (6) é dual de (7).
Seção 2.8
2.53 Mostre que o poliedro X(D, u, r, s) é limitado e não é vazio.
2.54 Seja x um vértice do poliedro X(D, u, r, s). Mostre que (i) não existe ciclo cujos arcos não estão
vazios nem cheios e (ii) não existe caminho de r a s cujos arcos não estão vazios nem cheios.
2.55 Seja x um vértice do poliedro X(D, u, r, s). Suponha que (i) não existe ciclo cujos arcos não estão
vazios nem cheios e (ii) não existe caminho de r a s cujos arcos não estão vazios nem cheios. Mostre
que x é vértice do poliedro.
2.56 Seja x um fluxo viável de intensidade máxima numa rede. Mostre um exemplo em que x não é
vértice do poliedro X(D, u, s, t).
2.57 Analise o poliedro X(D, u, r, s) correspondente à rede descrita abaixo por sua matriz de adjacências
e seu vetor de capacidades.
rv rw vw vs ws rv rw vw vs ws
r −1 −1 9 7 4 7 9
v +1 −1 −1
w +1 +1 −1
s +1 +1
2.58 Sejam r e s dois nós de um grafo dirigido D. Seja X o poliedro do pl abaixo. Suponha que x é um
vértice de X. É verdade que x+ (r) = 0?
maximize x+ − (s)
sob as restrições x+
− (v) = 0 para cada v em V r {r, s}
xe ≥ 0 para cada e em E.
Seção 2.9
2.59 Suponha que, ao contrário da definição adotada até aqui, a função-capacidade u pode atribuir ∞ a
alguns arcos. Mostre que uma instância (D, u, r, s) do problema do fluxo máximo não tem solução
se e somente se todos os arcos de algum caminho dirigido de r a s têm capacidade ∞. (Dica:
Enuncie e prove em separado a parte “se” e a parte “somente se”.) [CCPS 3.3]
2.60 Suponha que, ao contrário da definição adotada até aqui, a função-capacidade u pode atribuir ∞
a alguns arcos. Dada uma rede de fluxo (D, u, r, s), suponha que não existe caminho dirigido de
r a s cujos arcos têm capacidade ∞. Seja E 0 é o conjunto de e tais que ue < ∞. Mostre que, do
ponto de vista do problema do fluxoPmáximo, podemos substituir a capacidade de cada arco que
está em E(D) r E 0 pelo número 1 + (ue : e ∈ E 0 ). [AMO 6.23]
2.61 Considere uma instância (D, u, r, s) do problema do fluxo máximo e suponha que, ao contrário da
definição adotada até aqui, a função-capacidade u pode atribuir ∞ a alguns arcos. Quando ue = ∞,
a restrição xe ≤ ue do pl (1) deveria ser ignorada, fazendo desaparecer a componente ze de z no pl
dual (4). Reescreva o pl’s (1) da forma correta. Calcule o pl dual. Escreva as condições de folgas
complementares para o par dual de pl’s.
42 2.10. EXERCÍCIOS FEOFILOFF
Capítulo 3
1
Na área de biologia molecular, emparelhamentos são chamados alinhamentos.
43
44 3.1. EMPARELHAMENTOS BIPARTIDOS E COBERTURA POR NÓS FEOFILOFF
E XEMPLO 3.2: A figura mostra um emparelhamento com 4 arestas num grafo não-dirigido bipar-
tido. Não existe emparelhamento com 5 arestas ou mais.
Se uma dada instância do problema não tem solução, queremos receber uma prova —
um certificado — da inexistência de solução. Para obter um tal certificado, usaremos
o conceito de cobertura. Uma cobertura por nós (= cover) de um grafo não-dirigido é
um conjunto C de nós tal que toda aresta do grafo tem pelo menos uma ponta em C.
Quando não houver confusão, diremos “cobertura” no lugar de “cobertura por nós”.
A validade desse lema é evidente. Segue do lema que uma cobertura pequena é um
certificado de inexistência de um emparelhamento grande. Mais precisamente, uma
cobertura com menos que k nós é um certificado de que o grafo não tem emparelha-
mento com k ou mais arestas. D. Kőnig [Kon] descobriu (1931) que a recíproca do lema
é verdadeira em grafos bipartidos:
Teorema 3.2 (condição suficiente) Num grafo não-dirigido bipartido, se toda cober-
tura tem k ou mais nós então existe um emparelhamento com k ou mais arestas.
considere o conjunto
(P r R) ∪ (Q ∩ R) .
Se esse conjunto é uma cobertura de G então nenhuma aresta tem uma ponta em P ∩ R
e outra em Q r R e portanto u− (R) = |P r R| + |Q ∩ R| ≥ k. Se (P r R) ∪ (Q ∩ R) não
é um cobertura de G então alguma aresta de G tem uma ponta em P ∩ R e outra em
Q r R, donde u− (R) = ∞ > k.
Em qualquer caso, u− (R) ≥ k para todo R que separa r de s. O teorema MFMC 2.9
garante então que a rede (D, u) tem um fluxo viável x tal que int(x) ≥ k. De acordo
com o teorema MFMC inteiro 2.10, podemos supor que x é inteiro e portanto binário.
O conjunto M das arestas pq de G tais que xpq = 1 é então é um emparelhamento.
Ademais, |M | = int(x) ≥ k.
Problema 3.B (do transporte) Dada uma rede de transporte (D, P, Q, a, b), encontrar
um vetor inteiro não-negativo (xe : e ∈ E(D)) tal que x− (p) ≤ ap para cada p em P e
x+ (q) = bq para cada q em Q.
E XEMPLO 3.3: Uma empresa tem um conjunto de fábricas de produzem pneus e um conjunto de
lojas que vendem esses pneus. Cada fábrica p é capaz de produzir no máximo ap pneus por mês
e cada loja q pede bq pneus por mês. Pneus podem ser levados da fábrica p para a loja q apenas se
houver um transportador apropriado ligando p a q. [CCPS fig.3.9]
Queremos saber se um dado conjunto de transportadores pode atender as demandas das lojas
respeitando as capacidades das fábricas.
46 3.2. O PROBLEMA DO TRANSPORTE FEOFILOFF
Diremos que um vetor x é viável se satisfaz as restrições do problema 3.B. Para discutir
as condições de existência de um vetor viável, precisamos da seguinte notação: para
qualquer C ⊆ Q, a vizinhança de C é o conjunto de todos os nós p em P para os quais
existe um arco pq com q em C. A vizinhança de C será denotada por N (C).2
P
Para
P qualquer subconjunto C de Q, seja b(C) a soma (bq : q ∈ C) e a(N (C)) a soma
(ap : p ∈ N (C)). A seguinte condição necessária é evidente:
Lema 3.4 (condição necessária) Se uma rede de transporte (D, P, Q, a, b) tem um vetor
viável então a(N (C)) ≥ b(C) para todo subconjunto C de Q.
Portanto, para provar que não existe vetor viável basta exibir C ⊆ Q tal que a(N (C)) <
b(Q). O seguinte teorema mostra que a condição necessária dada no lema 3.4 é também
suficiente:
P ROVA : A prova é uma redução ao teorema MFMC inteiro 2.10. Construa uma rede de
fluxo (Ď, u, r, s) da seguinte maneira. O conjunto de nós de Ď é P ∪ Q ∪ {r, s}, sendo r
e s dois novos nós. O conjunto de arcos de Ď é definido assim:
para cada arco pq de D com p ∈ P e q ∈ Q, há um arco pq em Ď com upq = ∞;
para cada p em P , há um arco rp em Ď com urp = ap ;
para cada q em Q, há um arco qs em Ď com uqs = bq .
Suponha que a(N (C)) ≥ b(C) para todo subconjunto C de Q no grafo dirigido origi-
nal D; vamos mostrar que todo corte que separa r de s na rede (Ď, u, r, s) tem capaci-
dade pelo menos b(Q).
Seja R um conjunto de nós de Ď que separa r de s. A capacidade do corte ∂ˇ− (R) na
rede (Ď, u) é a soma de três parcelas: as capacidades dos arcos que vão de r a P r R,
as capacidades dos arcos que vão de Q ∩ R a s, e as capacidades dos arcos que vão de
P ∩ R a Q r R. Se algum arco vai de P ∩ R a Q r R então u− (R) = ∞ ≥ b(Q). Se
nenhum arco vai de P ∩ R a Q r R então N (Q r R) ⊆ P r R e portanto
Assim, u− (R) ≥ b(Q) em ambos os casos. O teorema 2.10 garante agora que existe um
fluxo viável inteiro x̌ tal que int(x̌) ≥ b(Q) na rede (Ď, u, r, s). É claro que x̌rp ≤ ap para
cada p em P e
x̌qs ≤ bq (1)
2
A letra “N ” é a inicial de neighborhood (= vizinhança).
FEOFILOFF APLICAÇÕES DE FLUXO MÁXIMO E CORTE MÍNIMO 47
P P
para cada q em Q. Mas q∈Q x̌qs = int(x̌) ≥ b(Q) = q∈Q bq , e portanto o “≤” em (1)
vale com “=”. Logo, se x é a restrição de x̌ aos arcos de D então x− (p) ≤ ap para cada
p em P e x+ (q) = bq para cada q em Q. Ou seja, x é um vetor viável na rede (D, P, Q,
a, b).
x+− (v) = bv
Problema 3.C Dada uma rede capacitada (D, u) e uma função-demanda b, encontrar
um fluxo que respeite as capacidades dos arcos e satisfaça b.
Uma rede (D, u) com função-demanda b pode ser denotada por (D, b, u). O conjunto
de nós de D será denotado por V . Para simplificar o palavreado, diremos que um fluxo
é viável se satisfaz b e respeita u.
E XEMPLO 3.4: Seja D o grafo dirigido com nós p i j q descrito abaixo por sua matriz de adjacências.
À direita da matriz, temos uma função-demanda b. Mais à direita, uma função-capacidade u.
p i j q b pi pj iq ji jq qp
p − 1 1 − +2 u 6 4 3 1 2 3
i − − − 1 −2 x 0 1 2 0 0 3
j − 1 − 1 +1
q 1 − − − −1
Lema 3.6 (condição necessária) Se uma rede (D, b, u) tem um fluxo viável então
b(V ) = 0 e b(X) ≤ u+ (X) para todo subconjunto X de V .
Assim, para tornar evidente que não existe fluxo viável basta mostrar que b(V ) 6= 0 ou
exibir um conjunto X tal que b(X) > u+ (X). A condição necessária descrita no lema é
conhecida como condição de Gale em referência a D. Gale [Gal], que mostrou (1957)
que a condição é também suficiente:
48 3.3. O PROBLEMA DE GALE FEOFILOFF
Teorema 3.7 (Gale) Em qualquer rede (D, b, u), se b(V ) = 0 e b(X) ≤ u+ (X) para
todo subconjunto X de V então existe um fluxo viável. Ademais, se b e u são inteiros,
essa mesma condição garante a existência de um fluxo viável inteiro.
P ROVA : A prova é uma redução ao teorema MFMC inteiro 2.10. Suponha que a rede
(D, b, u) satisfaz as condições do enunciado; vamos mostrar que existe um fluxo viável.
Seja P o conjunto dos nós para os quais b é negativo e Q o conjunto dos nós para os
quais b é positivo ou nulo. Seja (Ď, ǔ) a rede capacitada definida da seguinte maneira.
O conjunto de nós de Ď é V ∪ {r, s}, sendo r e s dois novos nós, e o conjunto de arcos
de Ď é definido assim:
para cada p em P , há um arco rp em Ď com ǔrp := −bp ;
para cada q em Q, há um arco qs em Ď com ǔqs := bq ;
para cada arco vw de D, há um arco vw em Ď com ǔvw := uvw .
Seja R um conjunto que separa r de s em Ď. A capacidade do corte ∂ˇ− (R) na rede
(Ď, ǔ) é a soma de três parcelas: as capacidades dos arcos que vão de r a P r R, as
capacidades dos arcos que vão de Q ∩ R a s, e as capacidades dos arcos que vão de
V ∩ R a V r R. Adote a notação X := V r R e observe que
Concluímos assim que todo corte que separa r de s na rede (Ď, ǔ) tem capacidade pelo
menos b(Q). Segue daí, pelo teorema MFMC 2.9, que existe um fluxo viável x̌ na rede
(Ď, ǔ) tal que int(x̌) ≥ b(Q). Como int(x̌) = x̌+ (s) ≤ ǔ+ (s) = b(Q), todos os arcos
que entram em s estão cheios de fluxo e portanto x̌qs = bq para todo q em Q. Como
b(P ) = b(V ) − b(Q) = −b(Q), temos também x̌rp = −bp para todo p em P .
Seja x a restrição de x̌ à rede original (D, u). É claro que x respeita u. Resta mostrar que
x satisfaz b. Para cada q em Q temos x+− (q) = x̌+− (q) + x̌qs = x̌qs = bq . Analogamente,
x+− (p) = −bp para cada p em P . Portanto, x respeita b.
A segunda parte da prova é uma mera aplicação do teorema MFMC inteiro 2.10.
E XEMPLO 3.5: Para a rede (D, b, u) do exemplo 3.4, veja a rede auxiliar (Ď, ǔ) construída na prova
do teorema 3.7 (complete a figura):
r p i j q s r ri rq pi pj iq ji jq qp ps js
r − − 1 − 1 − i ǔ 2 1 6 4 3 1 2 3 2 1
p − − 1 1 − 1 x̌ 2 1 0 1 2 0 0 3 2 1
p q
i − − − − 1 −
j − − 1 − 1 1 j
q − 1 − − − − s
s − − − − − −
E XEMPLO 3.6: Seja (D, b, u) a rede definida abaixo (igual à do exemplo 3.4 exceto pelo valor de uqp ).
p i j q b pi pj iq ji jq qp
p − 1 1 − +2 u 6 4 3 1 2 2
i − − − 1 −2
j − 1 − 1 +1
q 1 − − − −1
Essa rede não tem fluxo viável porque o conjunto X := {p, j} não satisfaz a condição b(X) ≤ u+ (X).
Tal como apresentada acima, a condição de Gale é assimétrica. Mas ela equivale à
seguinte condição simétrica: −u− (X) ≤ b(X) ≤ u+ (X) para todo conjunto X de nós.
Problema 3.D (circulação viável) Dada uma rede (D, l, u) em que l é uma demanda
nos arcos e u é uma função-capacidade, encontrar uma circulação que satisfaça l e
respeite u, ou seja, uma circulação x tal que l ≤ x ≤ u.
E XEMPLO 3.7: Seja D o grafo dirigido com nós p i j q descrito abaixo por sua matriz de adjacências.
As funções l e u e uma circulação viável x são dados à direita da matriz:
p i j q pi pj iq ji jq qp
p − 1 1 − u 7 5 3 2 3 3
i − − − 1 x 1 2 2 1 1 3
j − 1 − 1 l 1 1 0 1 1 0
q 1 − − −
Lema 3.8 (condição necessária) Se uma rede (D, l, u) tem uma circulação viável então
l ≤ u e l− (X) ≤ u+ (X) para cada conjunto X de nós.
(O significado das expressões l− (X) e u+ (X) foi definido na seção 2.1.) Assim, para
tornar evidente que não existe circulação viável basta exibir um arco e tal que le > ue
ou exibir um conjunto X de nós tal que l− (X) > u+ (X). A condição necessária dada
no lema 3.8 é conhecida como condição de Hoffman. A. J. Hoffman4 [Hof] mostrou
(1960) que essa condição é suficiente:
3
A letra l é a inicial de lower bound.
4
Não confunda com D.A. Huffman, inventor do código de Huffman.
50 3.4. O PROBLEMA DE HOFFMAN FEOFILOFF
Teorema 3.9 (Hoffman) Para qualquer rede (D, l, u), se l ≤ u e l− (X) ≤ u+ (X) para
todo subconjunto X de V (D) então existe uma circulação viável. Ademais, se l e u são
inteiros, essa mesma condição garante a existência de uma circulação viável inteira.
P ROVA : A prova é uma redução do teorema de Gale 3.7. Suponha que a rede (D, l, u)
satisfaz a condição do teorema. Para mostrar que existe uma circulação viável x, usa-
remos o teorema de Gale com −l−+ no papel da função-demanda e a diferença u − l no
papel da função-capacidade.
Comece por observar que l é um fluxo em D e considere o excesso l−+ (v) de fluxo em
cada nó v. Em virtude do lema 2.1 do capítulo 2,
− l−+ (V ) = 0 . (2)
Agora considere a hipótese l− (X) ≤ u+ (X). Se subtrairmos l+ (X) dos dois lados da
desigualdade teremos
− l−+ (X) ≤ (u − l)+ (X) . (3)
Nossa rede (D, l, u) pode ser vista como uma instância (D, b, ǔ) do problema de Gale
com b e ǔ definidos assim:
b := −l−+ e ǔ := u − l .
O parâmetro b é uma função-demanda. Como l ≤ u, o parâmetro ǔ é uma função-
capacidade. Graças a (2) e (3), a rede (D, b, ǔ) satisfaz a condição de Gale:
b(V ) = 0 e b(X) ≤ ǔ+− (X)
para cada X ⊆ V . O teorema de Gale garante então que a rede (D, b, ǔ) tem um fluxo
x̌ tal que x̌+− = b e x̌ ≤ ǔ. Para retornar à rede original (D, l, u), considere o fluxo
x := x̌ + l (trata-se de um fluxo pois x̌ ≥ 0 e l ≥ 0). É claro que l ≤ x ≤ ǔ + l = u.
Ademais, x é uma circulação pois
x+− (v) = x̌+− (v) + l−+ (v) = bv + l−+ (v) = −l−+ (v) + l−+ (v) = 0
para cada nó v. Em suma, x é uma circulação viável, como queríamos provar.
E XEMPLO 3.8: Veja a rede (D, b, ǔ) construída na prova do teorema 3.9 a partir da rede (D, l, u) do
exemplo 3.7:
b pi pj iq ji jq qp
p +2 ǔ 6 4 3 1 2 3
i −2 x̌ 0 1 2 0 0 3
j +1
q −1
A tabela à direita também mostra um fluxo x̌ que satisfaz b e respeita ǔ. Essa rede (D, b, ǔ) é igual
à rede (D, b, u) do exemplo 3.6.
E XEMPLO 3.9: A rede (D, l, u) a descrita abaixo é igual à rede do exemplo 3.7 exceto por uqp . A
rede não tem circulação viável pois o conjunto X := {p, j} não satisfaz a condição l− (X) ≤ u+ (X).
p i j q pi pj iq ji jq qp
p − 1 1 − l 1 1 0 1 1 0
i − − − 1 u 7 5 3 2 3 2
j − 1 − 1
q 1 − − −
FEOFILOFF APLICAÇÕES DE FLUXO MÁXIMO E CORTE MÍNIMO 51
Vale a seguinte generalização comum dos teoremas de Gale 3.7 e Hoffman 3.9:
x≥l e int(x) ≤ k .
(Como de hábito, a expressão “fluxo x de r a s” significa que x+− (s) ≥ 0 e x+− (v) = 0 para
cada v diferente de r e de s.) Para simplificar o palavreado, diremos que um fluxo x
numa rede (D, l, r, s) é k-viável se vai de r a s e satisfaz as condições x ≥ l e int(x) ≤ k.
Nosso problema consiste então em encontrar um fluxo k-viável.
E XEMPLO 3.10: Seja D o grafo dirigido com nós p i j q descrito abaixo por uma matriz de
adjacências. O nó inicial é p e o nó final é q. A função l e um fluxo x ≥ l de p a q são dados à
direita da matriz. O fluxo x é 3-viável.
p i j q pi pj iq ji jq
r=p − 1 1 − l 1 1 0 1 1
i − − − 1 x 1 2 2 1 1
j − 1 − 1
s=q − − − −
Para formular condições de existência de um fluxo k-viável, vamos recorrer aos cortes
dirigidos que separam r de s. (Como se sabe, um corte ∂ − (X) é dirigido se ∂ + (X) = ∅.)
É fácil verificar a seguinte condição necessária:
Lema 3.11 (condição necessária) Se uma rede (D, l, r, s) tem um fluxo k-viável então
l− (X) ≤ k para todo corte dirigido ∂ − (X) que separa r de s.
52 3.5. FLUXO MÍNIMO FEOFILOFF
Todo arco de uma tal rede pertence a algum caminho dirigido de r a s. Numa rede
fonte-sorvedouro, existe algum fluxo x de r a s tal que x ≥ l. Como não existe caminho
dirigido de s a r, um fluxo x ≥ l não pode ter intensidade arbitrariamente pequena.
P ROVA : A prova é uma redução ao teorema de Hoffman 3.9. Suponha que a condição
enunciada está satisfeita. Seja E o conjunto de arcos de D. Construa um grafo dirigido
Ď acrescentando um novo arco sr a D e seja Ě o conjunto de arcos de Ď. Seja ˇl a função
de Ě em R+ definida por ˇlsr = 0 e ˇle = le para cada e em E. Seja ǔ a função-capacidade
definida em Ě pelas seguintes propriedades:
Mostraremos a seguir que a rede (Ď, ˇl, ǔ) satisfaz a condição de Hoffman. É claro que
l ≤ u. Resta mostrar que ˇl− (X) ≤ ǔ+ (X) para todo subconjunto X de V (Ď). Há três
casos a considerar, dependendo dos valores de ∂ − (X) e ∂ + (X) em D:
• Se ∂ + (X) = ∂ − (X) = ∅ em D então ˇl− (X) = 0 ≤ ǔ+ (X) onde quer que o arco sr
esteja em relação a X.
• Se ∂ + (X) 6= ∅ então ˇl− (X) ≤ ǔ+ (X) pois algum arco de D entra em X e portanto
ǔ+ (X) = ∞.
• Suponha agora que ∂ + (X) = ∅ e ∂ − (X) 6= ∅. Seja e um arco de D que sai de X.
Como a rede é fonte-sorvedouro, e pertence a algum caminho dirigido de r a s.
Como o corte ∂ − (X) é dirigido, temos r ∈ X e s ∈ / X, ou seja, X separa r de s.
+ ˇ
Logo l (X) ≤ u (X), e portanto l (X) = l (X) ≤ u+ (X) ≤ ǔ+ (X).
− − −
Como ˇl− (X) ≤ ǔ+ (X) para todo subconjunto X de V (Ď), o teorema de Hoffman 3.9
garante que a rede (Ď, ˇl, ǔ) tem uma circulação viável, digamos x̌. A restrição de x̌ ao
conjunto E de arcos é um fluxo x de r a s em D. Ademais, x ≥ l e int(x) ≤ ǔsr = k. Em
outras palavras, x é um fluxo k-viável.
E XEMPLO 3.11: Para a rede (D, l, r, s) do exemplo 3.10, eis a rede (Ď, ˇl, ǔ) construída na prova do
teorema 3.12:
FEOFILOFF APLICAÇÕES DE FLUXO MÁXIMO E CORTE MÍNIMO 53
p i j q pi pj iq ji jq qp
r=p − 1 1 − ˇl 1 1 0 1 1 0
i − − − 1 ǔ ∞ ∞ ∞ ∞ ∞ 3
j − 1 − 1 x̌ 1 2 2 1 1 3
s=q 1 − − −
(A rede (Ď, ˇl, ǔ) só difere da rede do exemplo 3.7 porque ǔ é diferente.) A última linha da tabela dá
uma circulação x̌ tal que ˇl ≤ x̌ ≤ ǔ.
E XEMPLO 3.12: Para verificar que não existe fluxo 2-viável na rede do exemplo 3.10, tome o con-
junto X := {p, j} e observe que o corte dirigido ∂ − (X) separa r de s e que l− (X) > 2.
sendo minx tomado sobre todos os fluxos x de r a s tais que x ≥ l e sendo maxX tomado
sobre todos os cortes dirigidos ∂ − (X) que separam r de s. Ademais, se l é inteiro então
a igualdade min-max é satisfeita por um fluxo x que é inteiro.
Problema 3.F Encontrar uma cobertura mínima (por caminhos dirigidos) dos arcos de
um grafo.
O objeto dual de uma cobertura dos arcos é um corte dirigido. Um corte dirigido num
grafo é máximo se nenhum outro tem mais arcos.
E XEMPLO 3.13: Seja D o grafo dirigido que tem nós r s t u v w e os arcos indicados na tabela
abaixo. Os caminhos (r, t, u, v), (t, v), (r, u, w) e (s, u, w) constitutem uma cobertura mínima dos
arcos de D. A segunda linha da tabela é o vetor característico de um corte dirigido máximo.
rt ru su tu tv uv uw
0 1 1 1 1 0 0
54 3.6. COBERTURAS POR CAMINHOS FEOFILOFF
Teorema 3.14 Em qualquer DAG, uma cobertura mínima dos arcos (por caminhos di-
rigidos) tem o mesmo tamanho que um corte dirigido máximo.
P ROVA : A prova é uma redução ao teorema 3.13 do fluxo mínimo e corte máximo.
Como já observamos, |P| ≥ |C| para qualquer cobertura P e qualquer corte dirigido C.
Resta mostrar que |P| = |C| para alguma P e algum C.
Seja D o DAG em questão. Construa um grafo dirigido Ď da seguinte maneira. O
conjunto de nós de Ď é V (D) ∪ {r, s}, sendo r e s dois novos nós. Todos os arcos de D
também são arcos de Ď. Além disso, Ď tem um arco rv para cada fonte v de D e um
arco ws para cada sorvedouro w de D. É claro que Ď é um DAG, que r é a única fonte
de Ď, e que s é o único sorvedouro de Ď. Portanto, a rede (Ď, r, s) é fonte-sorvedouro
no sentido da seção 3.5.
Seja l a função-demanda definida sobre os arcos de Ď pelas seguintes propriedades:
le = 1 para cada e em E(D) e lf = 0 para cada f em E(Ď) r E(D). Na rede (Ď, l, r, s),
seja x um fluxo de intensidade mínima dentre aqueles que vão de r a s e satisfazem
x ≥ l. Seja ∂ − (X) um corte dirigido que maximiza l− (X) dentre os cortes dirigidos que
separam r de s. De acordo com o teorema 3.13,
int(x) = l− (X) .
Denote por X−r o conjunto X r {r}. No grafo D, temos |∂ − (X−r)| = l− (X), donde
int(x) = |∂ − (X−r)|.
De acordo com o adendo do teorema 3.13, podemos supor que x é inteiro. Mais que
isso, podemos supor que x é binário. Logo, o fluxo x pode ser decomposto em int(x)
caminhos dirigidos simples em Ď, todos de r a s, conforme o lema 2.5 do capítulo 2.
Digamos que P1 , . . . , Pk são os caminhos da decomposição, com k = int(x). Como
x ≥ l, cada arco de D pertence a algum dos caminhos. Cada Pi induz um caminho
dirigido Qi em D. O conjunto {Q1 , . . . , Qk } de caminhos é uma cobertura dos arcos
de D. Ademais, o número de caminhos é k = |∂ − (X−r)| e ∂ − (X−r) é um corte dirigido
em D.
Uma cobertura dos nós5 (= dipath cover) de um grafo dirigido D é uma coleção de
caminhos dirigidos tal que cada nó de D pertence a pelo menos um dos caminhos da
coleção. Uma cobertura dos nós é mínima se nenhuma outra tem menos caminhos.
5
Não confunda com o conceito de cobertura por nós da seção 3.1.
FEOFILOFF APLICAÇÕES DE FLUXO MÁXIMO E CORTE MÍNIMO 55
Problema 3.H Encontrar uma cobertura mínima dos nós de um grafo dirigido.
O dual de uma cobertura dos nós é uma anticadeia. Uma anticadeia (= antichain) é
qualquer conjunto B de nós tal que não existe caminho dirigido com origem e término
em dois nós distintos de B. Uma anticadeia é máxima se nenhuma outra tem mais nós.
E XEMPLO 3.14: A primeira figura mostra uma anticadeia em um DAG. (Veja os nós marcados
com 3.) Cada traço na figura representa um arco dirigido “de cima para baixo”. A segunda figura
mostra uma cobertura dos nós do DAG. A anticadeia tem 6 nós e a cobertura tem 6 caminhos.
Em qualquer grafo dirigido, para qualquer cobertura P dos nós e qualquer antica-
deia B, é claro que |P| ≥ |B|. Se vale a igualdade, a cobertura é mínima e a anticadeia
é máxima. R. P. Dilworth [Dil] mostrou (1950) que a recíproca dessa afirmação é ver-
dadeira quando o grafo é um DAG.6
Teorema 3.15 (Dilworth) Em qualquer DAG, uma cobertura mínima dos nós tem o
mesmo tamanho que uma anticadeia máxima.
P ROVA : A prova é uma redução ao teorema 3.13 do fluxo mínimo e corte máximo.
Como já observamos, |P| ≥ |B| para qualquer cobertura P e qualquer anticadeia B.
Resta mostrar que |P| = |B| para alguma P e alguma B.
Seja D o DAG em questão. Construa um grafo dirigido Ď da seguinte maneira. Para
cada nó v de D, o grafo Ď tem dois nós, v1 e v2 ,
ligados por um v1 v2 .
Para cada arco vw de D, o grafo Ď tem um arco v2 w1 . Além disso, Ď tem dois novos
nós, r e s, um arco rv1 para cada fonte v de D, e um arco w2 s para cada sorvedouro w
de D. Os arcos da forma v1 v2 serão chamados especiais; eles representam os nós de D.
A rede (Ď, r, s) é fonte-sorvedouro no sentido da seção 3.5.
Defina uma função-demanda l sobre os arcos de Ď da seguinte maneira: le = 1 se e é
um arco especial e le = 0 em caso contrário. O teorema 3.13, aplicado à rede (Ď, l, r, s),
garante que existe um fluxo x de r a s tal que x ≥ l e existe um corte dirigido ∂ − (X)
que separa r de s tal que
int(x) = l− (X) .
6
Dilworth provou o teorema no contexto de ordens parciais. Aqui, o teorema foi traduzido para
DAGs.
56 3.7. EXERCÍCIOS FEOFILOFF
Seja B o conjunto dos nós de D que X “quebra”, isto é, o conjunto dos nós v de D tais
que X separa v1 de v2 em Ď. Observe que |B| = l− (X) e portanto
int(x) = |B| .
Imagine agora, por um momento, que B não é uma anticadeia. Então existe um cami-
nho dirigido em D que vai de um nó v de B a outro nó w de B. Em Ď, esse caminho
corresponde a um caminho dirigido que vai de v2 a w1 . Portanto, o caminho começa
em V (Ď) r X e termina em X, e assim tem um arco em ∂ + (X). Mas isso é impossível,
pois o corte ∂ − (X) é dirigido. Essa contradição mostra que B é uma anticadeia.
De acordo com o adendo do teorema 3.13, podemos supor que x é inteiro. Mais que
isso, podemos supor que x é binário. Logo, de acordo com o lema 2.5, o fluxo x pode
ser decomposto em int(x) caminhos dirigidos simples em Ď, todos de r a s. Sejam
P1 , . . . , Pk esses caminhos, com k = int(x). É claro que cada arco especial de Ď pertence
a algum dos caminhos. Cada Pi induz um caminho dirigido Qi em D. O conjunto
{Q1 , . . . , Qk } de caminhos é uma cobertura dos nós de D. Ademais, o número de
caminhos é |B|.
3.7 Exercícios
Seção 3.1
3.1 ? Prove o lema 3.1. Note que o lema vale em qualquer grafo não-dirigido, mesmo que não seja
bipartido.
3.2 Mostre que um emparelhamento máximo num grafo não-dirigido pode ser menor que uma co-
bertura mínima. (Um emparelhamento M é máximo se não existe emparelhamento M 0 tal que
|M 0 | > |M |. Uma cobertura C é mínima se não existe cobertura C 0 tal que |C 0 | < |C|.)
3.3 ? Complete os detalhes da prova do teorema 3.2.
3.4 Na prova do teorema 3.2, por que não adotar a função-capacidade u = 1? Por que não definir as
capacidades assim: upq = 1 para cada aresta pq de G, urp = ∞ para cada p em P e uqs = ∞ para
cada q em Q?
3.5 Encontre um emparelhamento máximo e uma cobertura mínima no grafo da figura.
3.6 ? Algoritmo. Mostre como podemos usar o algoritmo de Ford–Fulkerson (veja a seção 2.6) para
resolver o problema 3.A. Mais precisamente, descreva um algoritmo que receba um grafo não-
dirigido G com bipartição {P, Q} e um número k e devolva (a) um emparelhamento M com pelo
menos k arestas ou (b) uma cobertura com menos que k nós.
3.7 Prove o teorema 3.3 a partir do teorema 3.2 e do lema 3.1.
3.8 Emparelhamentos perfeitos. Um emparelhamento é perfeito se incide em cada nó do grafo. Um grafo
não-dirigido é k-regular se todos os seus nós têm grau k. Dado um inteiro k ≥ 1, prove que todo
grafo bipartido k-regular tem um emparelhamento perfeito. Deduza daí que todo grafo bipartido
k-regular tem k emparelhamentos perfeitos disjuntos entre si. [CCPS 3.23]
3.9 Mostre que as conclusões do exercício 3.8 são falsas se “grau k” for trocado por “grau pelo me-
nos k”. [CCPS 3.24]
FEOFILOFF APLICAÇÕES DE FLUXO MÁXIMO E CORTE MÍNIMO 57
3.10 Cobertura por caminhos curtos. Um conjunto X de nós de um grafo não-dirigido é independente se
nenhuma aresta tem ambas as pontas em X. Uma cobertura de um grafo por caminhos curtos é uma
coleção de caminhos de comprimento ≤ 1 tal que todo nó do grafo está em pelo menos um dos
caminhos da coleção. Prove que num grafo não-dirigido bipartido qualquer conjunto independente
máximo tem o mesmo tamanho que uma cobertura mínima por caminhos curtos. (Dica: Use o
teorema de Kőnig.)
3.11 Teorema de Menger dirigido. Num grafo dirigido, dois caminhos dirigidos são internamente disjuntos
se os únicos nós que eles têm em comum são o primeiro e o último. Dados nós r e s de um grafo
dirigido D, um subconjunto S de V (D) r {r, s} isola r de s se não existe caminho dirigido de r a s
em D r S. Prove o seguinte teorema de K. Menger [Men] (1927): o número máximo de caminhos
dirigidos de r a s que são internamente disjuntos é igual ao tamanho de um conjunto de nós que
isola r de s. [CCPS 3.42]
3.12 Teorema de Menger não-dirigido. Enuncie e prove um resultado análogo ao teorema de Menger (veja
o exercício 3.11) para grafos não-dirigidos. [CCPS 3.43]
3.13 Programa linear para emparelhamento. Seja G um grafo não-dirigido em que cada aresta e tem um
custo ce . Queremos encontrar um emparelhamento de custo máximo. Formule o problema como
um pl e calcule o seu dual. Descreva o dual como um problema combinatório sobre G.
3.14 Programa linear para cobertura. Seja G um grafo não-dirigido em que cada nó v tem um peso bv .
Queremos encontrar uma cobertura de peso mínimo. Formule o problema como um pl e calcule o
seu dual. Descreva o dual como um problema combinatório sobre G. [CCPS 3.17]
Seção 3.2
3.15 Mostre que as condições a(P ) ≥ b(Q) e a(N (Q) ≥ b(Q) não são suficientes para a existência de um
vetor viável no problema 3.B.
3.16 ? Prove o lema 3.4.
3.17 Complete os detalhes da prova do teorema 3.5.
3.18 ? Algoritmo. Mostre como podemos usar o algoritmo de Ford–Fulkerson (veja a seção 2.6) para
resolver o problema 3.B. Mais precisamente, descreva um algoritmo que receba uma rede de trans-
porte (D, P, Q, a, b) e devolva (i) uma solução x para a rede ou (ii) um subconjunto C de Q tal que
a(N (C)) < b(C).
3.19 Programa linear. Formule o problema 3.B como um programa linear. Escreva o dual do pl.
Seção 3.3
3.20 ? Prove o lema 3.6.
3.21 ? Versão simétrica da condição de Gale. Mostre que a condição de Gale é equivalente à seguinte:
−u− (X) ≤ b(X) ≤ u+ (X) para todo X ⊆ V .
3.22 Deduza o teorema MFMC 2.9 do teorema de Gale 3.7 e do lema 3.6.
3.23 ? Rede sem capacidades. Seja b uma função-demanda em um grafo dirigido D := (V, E). Mostre que
a rede (D, b) tem um fluxo que satisfaz b se e somente se b(V ) = 0 e b(X) ≤ 0 para todo X ⊆ V tal
que ∂ + (X) = ∅. (Dica: Enuncie e prove em separado a parte “se” e a parte “somente se”.)
3.24 ? Árvore orientada sem capacidades. Seja (T, b) uma rede em que T é uma árvore orientada e b uma
função-demanda. Descreva informalmente um algoritmo que receba T e b e calcule um fluxo em T
que satisfaça b ou decida que um tal fluxo não existe. (Sugestão: faça um algoritmo recursivo que
começa pelas folhas da árvore.)
3.25 Árvore orientada sem capacidades. Seja (T, b) uma rede em que T é uma árvore orientada e b uma
função-demanda. Dê uma condição necessária e suficiente para que (T, b) tenha um fluxo que
58 3.7. EXERCÍCIOS FEOFILOFF
r a b c d s ra rb ac bd cs ds sr
b +3 +2 +2 −1 −3 −3 u 8 7 6 5 7 8 6
7
O adjetivo “euleriano” é uma referência a L. Euler [Eul].
FEOFILOFF APLICAÇÕES DE FLUXO MÁXIMO E CORTE MÍNIMO 59
Mostre também que a condição para a existência de solução pode ser formulada assim: a(V ) = |E|
e iG (X) ≤ a(X) para todo X ⊆ V . [CCPS 3.34]
3.38 Torneio viável. Imagine um torneio de tênis com n participantes. Suponha que cada participante
joga exatamente uma partida com cada um dos outros e suponha que não há empates. Seja di
o número de derrotas do tenista i. Dê uma condição necessária e suficiente para que um dado
vetor (d1 , . . . , dn ) represente um torneio. Dê um algoritmo que decida se (d1 , . . . , dn ) representa
um torneio. [CCPS 3.35]
3.39 Problema generalizado do transporte. Temos p fábricas, todas produzindo um mesmo produto, e q
consumidores que usam o produto. Todo mês, a fábrica i é capaz de produzir no máximo ai tone-
ladas e o consumidor j consome exatamente bj toneladas. Podemos levar no máximo uij toneladas
por mês da fábrica i ao consumidor j. É possível satisfazer as demandas dos consumidores?
Seção 3.4
3.40 Mostre que as partes “l ≤ u” e “l− (X) ≤ u+ (X)” da condição de Hoffman são independentes.
3.41 Seja D := (V, E) um grafo dirigido que consiste em um ciclo dirigido simples e nada mais. Sejam l e
u duas funções de E em R+ . Parte 1: Supondo que existe uma circulação x tal que l ≤ x ≤ u, mostre
que max (le : e ∈ E) ≤ min (ue : e ∈ E). Parte 2: Supondo que max (le : e ∈ E) > min (ue : e ∈ E),
mostre que a rede (D, l, u) viola a condição de Hoffman.
3.42 ? Prove o lema 3.8.
3.43 Encontre uma circulação viável na rede (D, l, u) descrita a seguir. Os nós são r a b c d s e a tabela
dá os arcos e as funções l e u:
ra rb ac bd cs ds sr
l 1 2 3 4 2 1 0
u ∞ ∞ ∞ ∞ ∞ ∞ 6
3.44 Encontre uma circulação viável na rede (D, l, u) descrita a seguir. Os nós são r a b c d s e a tabela
dá os arcos e as funções l e u:
ra rc ab dc bs ds sr
l 1 1 1 1 1 1 0
u 9 9 9 9 9 9 8
3.45 Seja (D, l, u) uma rede acíclica em que l 6= 0 e l ≤ u. Deduza da condição de Hoffman que não
existe circulação viável em (D, l, u).
3.46 Seja (D, l, u) uma rede em que l ≤ u. Use a condição de Hoffman para provar a seguinte proposição:
se l+ (X) ≤ u− (X) para todo conjunto X de nós então a rede tem uma circulação viável.
3.47 Um ciclo dirigido num grafo dirigido é euleriano 8 se passa por cada arco e cada nó do grafo. (Por
definição, ciclos não têm arcos repetidos. Portanto, um ciclo euleriano passa exatamente uma vez
por cada arco; mas pode passar mais de uma vez por cada nó. Um ciclo euleriano dirigido é o
trajeto ideal de um caminhão de coleta de lixo.) Mostre que um grafo dirigido D tem um ciclo
dirigido euleriano se e somente se D é conexo e |∂ + (v)| = |∂ − (v)| para cada nó v. [CCPS 4.4]
3.48 Seja (D, l, u) uma rede em que le > 0 e ue = ∞ para cada arco e. Mostre que a rede tem uma
circulação viável se e somente se D é fortemente conexo (ou seja, para cada par (r, s) de nós existe
um caminho dirigido de r a s e um caminho dirigido de s a r). (Dica: Enuncie e prove em separado
a parte “se” e a parte “somente se”.) [AMO 3.53]
3.49 Prove o teorema 3.10, que generaliza os teoremas de Gale e Hoffman.
8
Referência a L. Euler [Eul].
60 3.7. EXERCÍCIOS FEOFILOFF
Seção 3.5
3.50 Mostre que toda rede fonte-sorvedouro (D, l, r, s) tem um fluxo x de r a s (possivelmente de grande
intensidade) tal que x ≥ l.
3.51 É verdade que toda rede dotada de k-fluxo é fonte-sorvedouro?
3.52 Prove o lema 3.11.
3.53 Aponte os detalhes obscuros da prova do teorema 3.12 do fluxo mínimo. Complete esses detalhes.
3.54 Encontre um fluxo 9-viável na rede (D, l, r, s) que tem nós r a b s e as demandas nos arcos dadas
na tabela.
ra as sb br
l 1 1 1 1
3.55 Considere a rede (D, l, r, s) que tem nós r a b c d s e os arcos dados abaixo. Encontre um fluxo
7-viável. Encontre um fluxo 6-viável.
ra rb ac bd cs ds
l 1 2 3 4 2 1
3.56 Considere a rede (D, l, r, s) que tem nós r a b c d s e os arcos dados abaixo. Encontre um fluxo
viável de intensidade ≤ 9.
ra rc ab dc bs ds
l 1 1 1 1 1 1
3.57 Considere a rede (D, l, r, s) com nós r a b s e os arcos e demandas dados na tabela. Existe fluxo
2-viável de r a s? Existe fluxo 1-viável de r a s?
ra ar ab bs sb
l 2 0 1 3 0
3.58 Fluxo mínimo versus corte máximo. Prove o teorema 3.13.
3.59 Programas lineares. Formule os pl’s que representam o problema do fluxo mínimo e o do corte
dirigido máximo. (Veja o exercício 3.58.)
Seção 3.6
3.60 ? Seja D um digrafo e P uma cobertura (por caminhos dirigidos) dos arcos de D. Seja ∂ − (X) um
corte dirigido em D. Prove diretamente que |P| ≥ |∂ − (X)|.
3.61 ? Seja D um digrafo e P uma cobertura (por caminhos dirigidos) dos nós de D. Seja B uma
anticadeia em D. Prove diretamente que |P| ≥ |B|.
3.62 Desenhe uma árvore radicada com 8 ou mais nós. Encontre uma cobertura mínima dos arcos e
um corte dirigido máximo na árvore. Encontre uma cobertura mínima dos nós e uma anticadeia
máxima na árvore.
3.63 Mostre uma anticadeia máxima e um cobertura mínima dos nós por caminhos dirigidos no DAG
da figura. [CCPS fig 2.5]
Exercícios adicionais
3.72 ? Escalonamento em máquinas paralelas uniformes. Suponha dadas n tarefas (= jobs) T1 , T2 , . . . , Tn e
k processadores idênticos. Cada tarefa Tj precisa ser processada durante pj dias em qualquer dos
processadores. O processamento permite preemption, ou seja, o processamento de Tj num certo
processador pode ser interrompido e depois retomado em outro (ou no mesmo) processador. Em
cada instante, cada processador só pode cuidar de uma tarefa e cada tarefa só pode estar sendo
excutada por um processador. Cada tarefa Tj está disponível para processamento a partir de uma
certa data (= release date) rj e deve estar concluída até uma certa data (= due date) dj . (Suponha que
dj ≥ rj + pj .) Exemplo:
j 1 2 3 4
pj 25 31 50 18
rj 10 50 0 20
dj 30 70 60 50
Formule um problema de fluxo máximo que resolva o escalonamento. (Dica: Coloque o conjunto
{r1 , d1 , r2 , d2 , . . . , rn , dn } de datas em ordem crescente. Seja t1 < t2 < · · · < tm+1 , com m + 1 ≤ 2n,
o conjunto ordenado de datas. Agora, basta decidir que parte do processamento de cada tarefa Tj
será feita durante o intervalo (ti , ti+1 ).) [CCPS 3.41, AMO 6.17]
3.73 Custos menos prêmios. Seja r um nó de um grafo dirigido D. Para cada arco e, seja ce um número
não-negativo que mede o custo de destruir o arco. Se um atacante destrói um conjunto X de arcos,
recebe um prêmio bv para cada nó v que não pode mais ser alcançado por um caminho dirigido a
partir de r. O atacante quer escolher X de modo a minimizar custos menos prêmios. Sugira um
algoritmo. [CCPS 3.44]
62 3.7. EXERCÍCIOS FEOFILOFF
Capítulo 4
Este capítulo generaliza o problema de Gale da seção 3.3 e procura um fluxo que sa-
tisfaça demandas dos nós, respeite capacidades dos arcos, e faça tudo isso ao menor
custo possível. Para resolver o problema, o capítulo usa as duas ferramentas discutidas
nos capítulos anteriores: caminhos dirigidos de custo mínimo (capítulo 1) e fluxos de
intensidade máxima (capítulo 2).
Os ingredientes do problema são os mesmos dos capítulos anteriores: um grafo diri-
gido D := (V, E), uma função-demanda (bv : v ∈ V ) com valores em R, uma função-
capacidade (ue : e ∈ E) com valores em R+ , e uma função-custo (ce : e ∈ E) com
valores em R.1 (Note que u ≥ 0 mas b e c não têm restrição de sinal.)
4.1 O problema
Como nos capítulos anteriores, um fluxo numa rede (D, b, u) é qualquer vetor (xe :
e ∈ E) com valores em R+ . Um fluxo x respeita u se x ≤ u e satisfaz b se
x+− = b .
(A notação x+− foi definida na seção 2.1.) Um fluxo x é viável se satisfaz b e respeita u.
Dada uma função-custo c, o custo de um fluxo x é o número cx.
Problema 4.A (fluxo de custo mínimo) Encontrar um fluxo viável de custo mínimo
numa rede (D, b, u, c).
63
64 4.2. PROGRAMAÇÃO LINEAR FEOFILOFF
lema 3.6 e o teorema de Gale 3.7 (veja o capítulo 3), a rede é viável se e somente se
b(V ) = 0 e b(X) ≤ u+ (X)
para todo subconjunto X de V . (Como observamos na seção 3.3, essas condições tam-
bém podem ser escritas assim: −u− (X) ≤ b(X) ≤ u+ (X) para todo X ⊆ V .) Toda rede
viável tem um fluxo de custo mínimo pois todo fluxo viável é limitado: xe ≤ u(E) para
todo fluxo viável x e todo arco e.
E XEMPLO 4.1: Seja D o grafo dirigido com nós p v w q descrito abaixo por sua matriz de adja-
cências. A função-demanda b está representada à direita da matriz. Mais à direita, as capacidades
e os custos dos arcos bem como dois diferentes fluxos viáveis, x e x0 . Verifique que cx = 240 e
cx0 = 180. Observe como é fácil conferir a viabilidade e o custo de um fluxo percorrendo as linhas
da tabela.
p v w q b pv pw vw vq wq
p − 1 1 − −2 u 3 3 3 3 3
v − − 1 1 −1 x 0 2 0 1 1
w − − − 1 +1 x0 0 2 1 0 2
q − − − − +2 c −30 +80 +40 +90 −10
minimize cx
sujeito a x+− (v) = bv para cada v ∈ V
(1)
xe ≤ ue para cada e ∈ E
xe ≥ 0 para cada e ∈ E.
Para qualquer solução viável x do pl (1) e qualquer solução viável (y, z) do pl (2) temos
então
cx ≥ (yA + z)x = (yA)x + zx = y(Ax) + zx ≥ yb + zu . (3)
Lema 4.1 (folgas complementares) Para qualquer solução viável x do pl (1) e qual-
quer solução viável (y, z) do pl (2), a igualdade cx = yb + zu vale se e somente se
1. xvw = 0 ou yw − yv + zvw = cvw e
2. xvw = uvw ou zvw = 0
para cada arco vw.
para cada arco vw. Em outras palavras, se yw − yv ≤ cvw então zvw := 0, senão zvw :=
cvw − yw + yv . Observe que o par (y, z) é solução viável do pl (2). Além disso, para
2
Um potencial é qualquer vetor y indexado pelos nós da rede.
66 4.4. CICLOS DE AUMENTO FEOFILOFF
cada arco vw, temos xvw = 0 ou yw −yv +zvw = cvw bem como xvw = uvw ou zvw = 0.
O lema 4.1 garante agora que cx = yb + zu e portanto x minimiza cx.
Suponha agora que x minimiza cx. De acordo com o teorema forte da dualidade C.2,
existe uma solução viável (y, z) do pl (2) tal que cx = yb+zu. De acordo com o lema 4.1,
temos xvw = 0 ou yw −yv +zvw = cvw bem como xvw = uvw ou zvw = 0 para cada arco vw.
Como yw − yv + zvw ≤ cvw e zvw ≤ 0, as condições 1 e 2 estão satisfeitas.
E XEMPLO 4.2: Considere a rede (D, b, u, c) do exemplo 4.1. Veja novamente a matriz de adjacências
de D e o vetor de demandas b. À direita de b temos um potencial y. Mais à direita, um fluxo viável x
(diferente dos fluxos do exemplo 4.1), o custo c dos arcos, e o custo reduzido c(y) associado a y.
p v w q b y pv pw vw vq wq
p − 1 1 − −2 −10 u 3 3 3 3 3
v − − 1 1 −1 −40 x 2 0 3 0 2
w − − − 1 +1 0 c −30 +80 +40 +90 −10
q − − − − +2 −10 c(y) 0 +70 0 +60 0
O número c(C) é o custo de C. Se esse custo for negativo e ε for positivo, o fluxo x0 será
mais barato que x. Por isso, qualquer ciclo compatível com x que tenha custo negativo
é chamado ciclo de aumento.3
E XEMPLO 4.3: No exemplo 4.1, o ciclo induzido por (v, w, q, v) é compatível com o fluxo x e tem
largura 1. O custo do ciclo é 40 − 10 − 90 = −60 e portanto o ciclo é de aumento. Se enviarmos
1 unidade de fluxo ao longo desse ciclo teremos o fluxo viável x0 do exemplo 4.1. Observe que
cx0 = cx − 60 × 1 = 240 − 60 = 180.
Ainda no exemplo 4.1, o ciclo (p, v, w, p) é compatível com o fluxo x0 e tem largura 2. O custo do
ciclo é −30 + 40 − 80 = −70 e portanto trata-se de um ciclo de aumento. Se enviarmos 2 unidades
de fluxo ao longo desse ciclo teremos o fluxo viável x00 abaixo. Observe que cx00 = cx0 − 70 × 2 =
180 − 140 = 40.
pv pw vw vq wq
c −30 +80 +40 +90 −10
x00 2 0 3 0 2
Teorema 4.3 (dos ciclos de aumento) Um fluxo viável x numa rede (D, b, u, c) é ótimo
se e somente se não existe ciclo de aumento para x.
P ROVA : Considere inicialmente a parte “somente se” do teorema. Suponha que o custo
de x é mínimo. Se existisse um ciclo de aumento, poderíamos usar esse ciclo, como
indicado acima, para obter um novo fluxo viável de custo menor que cx. Portanto, um
tal ciclo não existe.
Agora considere a parte “se” do teorema, ou seja, suponha que não existe ciclo de
aumento para x. Gostaríamos de usar os resultados do capítulo 1, desenvolvidos para
caminhos e ciclos dirigidos, para mostrar que x tem custo mínimo. Para fazer isso,
será preciso construir uma rede auxiliar residual (D0 , c0 ). O grafo dirigido residual D0
é definido da seguinte maneira. O conjunto de nós de D0 é D ∪ {r}, sendo r um novo
nó. Para cada arco vw de D tal que xvw < uvw , há um arco vw de custo c0vw = cvw em D0 .
Para cada arco vw de D tal que xvw > 0, há um
em D0 . (Se 0 < xvw < uvw então D0 tem arcos vw e wv.) Finalmente, para cada nó v
de D, o grafo residual D0 tem um arco rv de custo c0rv = 0.
É fácil entender a relação entre D e D0 : todo ciclo C em D que é compatível com x
corresponde a um ciclo dirigido C 0 em D0 , e vice-versa. Ademais, o custo de C em D é
igual ao custo de C 0 em D0 .
3
Quem sabe “ciclo de decremento” seria mais apropriado, já que queremos diminuir o custo do
fluxo.
68 4.4. CICLOS DE AUMENTO FEOFILOFF
Submeta a rede (D0 , c0 ), com nó inicial r, ao algoritmo de Ford dos caminhos dirigidos
de custo mínimo (veja a seção 1.3). Por hipótese, a rede não tem ciclo dirigido de
custo negativo. Portanto, de acordo com o teorema de Ford–Bellman 1.5, o algoritmo
produzirá um potencial viável, ou seja, um potencial y tal que yw − yv ≤ c0vw para cada
arco vw de D0 .
Agora considere as propriedades do potencial y no grafo dirigido original D. Se xvw <
uvw então vw é um arco de D0 e c0vw = cvw , donde yw − yv ≤ cvw , e portanto o custo
reduzido de vw não é negativo:
c(y)vw ≥ 0.
Por outro lado, se xvw > 0 então wv é um arco de D0 e c0wv = −cvw , donde yv − yw ≤ c0wv .
Logo yw − yv ≥ cvw , e portanto
c(y)vw ≤ 0.
Assim, o par (x, y) satisfaz as condições de otimalidade (5). Isso garante que x é ótimo.
E XEMPLO 4.4: Seja D o grafo dirigido descrito abaixo por sua matriz de adjacências. À direita da
matriz, temos as demandas b. Mais à direita, as capacidades u, os custos c, e um fluxo viável x.
O ciclo induzido por (c, b, a, c) é de aumento. Envie 1 unidade de fluxo ao longo do ciclo. O novo
fluxo é ótimo?
a b c d b ab ac ad bc bd cd
a − 1 1 1 −3 u 9 9 9 9 9 9
b − − 1 1 +1 c +20 +20 +20 +10 +10 +10
c − − − 1 +1 x 3 0 0 1 1 0
d − − − − +1
Muitas aplicações precisam de fluxos x que são inteiros e de potenciais y que são intei-
ros. Supreendentemente, tais fluxos e potencias existem desde que os parâmetros da
rede sejam inteiros.
Teorema 4.4 (fluxo inteiro) Seja (D, b, u, c) uma rede que tem um fluxo viável. Se b e u
são inteiros então existe um fluxo ótimo que é inteiro.
E SBOÇO DA PROVA : Dentre os fluxos viáveis inteiros, escolha um fluxo x que mini-
mize cx. Se existisse um ciclo de aumento para x, poderíamos enviar uma quantidade
inteira de fluxo ao longo do ciclo e assim produzir um novo fluxo viável inteiro de
custo menor que cx. Logo, não existe ciclo de aumento. Então a prova do teorema 4.3
mostra que existe um potencial y que satisfaz as condições de otimalidade (5). Logo,
cx ≤ cx0 para todo fluxo viável x0 , inteiro ou não. Portanto, x é ótimo.
FEOFILOFF FLUXO VIÁVEL DE CUSTO MÍNIMO 69
Teorema 4.5 (dual inteiro) Seja x um fluxo ótimo numa rede (D, b, u, c). Se c é inteiro
então as condições de otimalidade descritas no teorema 4.2 são satisfeitas por um vetor
y que é inteiro e assim o pl (2) tem uma solução ótima (y, z) que é inteira.
P ROVA : Como mostra a prova do teorema 4.3 e a análise dos algoritmos de caminhos
dirigidos mínimos do capítulo 1, existe um potencial y tal que, para cada v, o número
yv é o custo de um caminho dirigido de custo mínimo de r a v na rede residual (D0 , c0 ).
Como c é inteiro, todos esses custos são inteiros.
A rotina G ALE (D, b, u) devolve um fluxo x que satisfaz b e respeita u. Se tal fluxo não
existe, x fica indefinido. Na linha 03, o algoritmo poderia devolver um conjunto de nós
que viola as condições de Gale.
A rotina C ICLO A UMENTO (D, u, c, x) devolve um ciclo de aumento, conforme a prova
do teorema 4.3. A rotina P OTENCIAL (D, u, c, x) recebe um fluxo ótimo x e calcula um
potencial y que satisfaz as condições de otimalidade do teorema 4.2. (Veja o exercí-
cio 4.26.)
A rotina E NVIA F LUXO (D, x, C, ε) atualiza x enviando ε unidades de fluxo ao longo do
ciclo C, conforme discussão no início da seção 4.4.
70 4.6. CAPACIDADES INFINITAS FEOFILOFF
O algoritmo F LUXO D E C USTO M ÍNIMO é muito útil para redes pequenas, quando pode
ser executado com lápis e papel. Para redes grandes, entretanto, o algoritmo é inefici-
ente pois cada iteração consome muito tempo e o número de iterações pode aumentar
exponencialmente com o número de nós da rede. Isso acontece pelos mesmos moti-
vos que tornam ineficiente o algoritmo de Ford–Fulkerson para o problema do fluxo
máximo (veja a seção 2.5).
Se b, u e c são inteiros e a rede (D, b, u, c) é viável então o número de iterações é
finito. Segue daí que se b, u e c são racionais o número de iterações é finito. (Veja o
exercício 2.36.)
Teorema 4.6 (rede ilimitada) Seja (D, b, u, c) uma rede viável em que u tem valores em
R+ ∪ {∞}. A rede tem um fluxo ótimo se e somente se não tem um ciclo dirigido de
custo negativo cujos arcos têm capacidade infinita.
Lema 4.7 Toda bipartição viável de uma rede (D, b) induz um único fluxo viável.
E SBOÇO DA PROVA : Para cada arco ij de T , xij é igual a b(Xj ), sendo Xj a componente
conexa de T − ij que contém j.
Dizemos que uma bipartição viável (T, L) é degenerada se o fluxo induzido pela bi-
partição deixa vazio algum arco de T .
Podemos nos dar ao luxo de tratar apenas de fluxos que são induzidos por bipartições
arbóreas porque se uma rede tem um fluxo viável então também tem um fluxo indu-
zido (por uma bipartição arbórea). Além disso, se a rede tem um fluxo ótimo então
também tem um fluxo ótimo que é induzido.
A propósito, um fluxo é induzido (por uma bipartição arbórea) se e somente se todo
ciclo do grafo dirigido tem um arco vazio. Isso é assim pois estamos supondo que o
grafo é conexo.
Para toda bipartição arbórea (T, L) de uma rede (D, c), existe um potencial y tal que
cvw = yw − yv para cada arco vw de T . Dizemos que um tal potencial é induzido
por (T, L). Um potencial induzido por uma bipartição arbórea é quase único: se y e
y 0 são potenciais induzidos então a diferença yv − yv0 é constante, ou seja, não depende
de v.
Como mostra o seguinte lema, qualquer potencial induzido por uma bipartição ar-
bórea “mede” os custos de caminhos na árvore. O custo de um caminho P numa
rede (D, c) é definido da mesma forma que o custo de um ciclo na seção 4.4: c(P ) :=
c(É(P )) − c(È(P )), sendo É(P ) o conjunto dos arcos diretos de P e È(P ) o conjunto
dos arcos inversos.
Lema 4.8 Se y é um potencial induzido por uma bipartição arbórea (T, L) e r e s são
dois nós quaisquer então ys − yr = c(P ), sendo P o único caminho simples de r a s
em T .
Lema 4.9 Se c(y) é o custo reduzido associado a um potencial y induzido por uma
bipartição arbórea (T, L) então c(y)e = 0 para todo arco e de T e c(y)e = c(C) para todo
arco e de L, sendo C o ciclo fundamental de T + e.
FEOFILOFF FLUXO VIÁVEL DE CUSTO MÍNIMO 73
sendo c(y) o custo reduzido associado a y. Assim, de acordo com o teorema 4.2, o fluxo
x induzido por (T, L) é ótimo.
A rotina B IPARTIÇÃO V IÁVEL (D, b) produz uma bipartição arbórea viável (T, L). Se
uma tal bipartição não existe, a rede é inviável e (T, L) fica indefinido. A rotina pode
ser implementada da seguinte maneira: calcule um fluxo viável x (veja o problema de
Gale na seção 3.3); em seguida, aplique o algoritmo sugerido no exercício 4.36 para
obter uma bipartição viável.
No fim da linha 07, c(y)e = 0 para todo arco e de T . No fim da linha 08, as condições
de otimalidade (6) estão satisfeitas e portanto temos um fluxo ótimo.
Nas linhas 16–17, o arco e é transferido de L para T e o arco h é transferido de T para L.
No fim da linha 17, (T, L) é uma bipartição viável e o fluxo induzido pela bipartição
deixa o arco h vazio.
Não é eficiente calcular x, y e c(y) diretamente a partir de (T, L), como sugerem as
linhas 05–07. É melhor atualizar essas variáveis a partir de seus valores na iteração
anterior. (No caso de x, por exemplo, basta enviar ε unidades de fluxo ao longo do
ciclo C.) Uma implementação séria do algoritmo faz isso.
E XEMPLO 4.5: Considere a rede de transbordo (D, b, c) descrita a seguir. O grafo dirigido D é dado
por sua matriz de adjacências. A função-demanda b e os custos c dos arcos são dadas nas tabelas.
74 4.7. ALGORITMO SIMPLEX FEOFILOFF
p v w q b pv pw vw vq wq
p − 1 1 − −3 c +10 +30 +10 +10 +10
v − − 1 1 +2
w − − − 1 −1
q − − − − +2
Suponha que a primeira iteração começa a bipartição viável (T, L) cuja árvore T está indicada em
vermelho na tabela abaixo. A tabela também registra o fluxo x e o potencial y induzidos por (T, L),
bem como os custos reduzidos c(y). O custo do fluxo é cx = 70.
pv pw vw vq wq y
x 2 1 0 0 2 p 0
c(y) 0 0 −10 −20 0 v +10
w +30
q +40
O algoritmo escolhe o arco vw e envia 1 unidade de fluxo ao longo do ciclo induzido por (v, w, p, v).
O novo fluxo terá custo cx = 70 − 10 × 1 = 60. O arco vw é transferido de L para T e o arco pw é
transferido de T para L.
A segunda iteração começa com a bipartição arbórea (T, L) indicada abaixo em vermelho. A tabela
dá o fluxo induzido x, o potencial induzido y, e o custo reduzido c(y). O fluxo tem custo cx = 60.
pv pw vw vq wq y
x 3 0 1 0 2 p 0
c(y) 0 +10 0 −10 0 v +10
w +20
q +30
O algoritmo escolhe o arco vq e envia 1 unidade de fluxo ao longo do ciclo (v, q, w, v). O novo fluxo
terá custo cx = 60 − 10 × 1 = 50.
A terceira iteração começa a bipartição arbórea (T, L), o fluxo x, e o potencial y indicados a seguir:
pv pw vw vq wq y
x 3 0 0 1 1 p 0
c(y) 0 0 +10 0 0 v +10
w +10
q +20
Como c(y) ≥ 0, a execução do algoritmo termina. Para detetar eventuais erros de cálculo cometi-
dos durante a execução do algoritmo, convém verificar que cx = yb.
No fim da linha 17, o custo do fluxo induzido por (T, L) é cx+εc(y)e (veja a seção 4.4 e o
lema 4.9). Se ε não for nulo, o novo fluxo será mais barato que o anterior. Se ε for nulo,
o fluxo não se altera, embora a bipartição (T, L) seja modificada. Se isso acontece, a ite-
ração é considerada degenerada. É claro que uma iteração degenerada só acontece se
a bipartição arbórea (T, L) no início da iteração for degenerada. Iterações degeneradas
merecem atenção pois podem levar o algoritmo a ser executado ad æternum.
E XEMPLO 4.6: Considere a rede de transbordo (D, b, c) descrita a seguir. O grafo dirigido D é dado
por sua matriz de adjacências. (Complete a figura.) A função-demanda b e os custos c dos arcos
são dados nas tabelas.
FEOFILOFF FLUXO VIÁVEL DE CUSTO MÍNIMO 75
a b c d e f b ab ac be cd ce db df ef
a − 1 1 − − − −4 c +20 +50 +60 +30 +30 +30 +20 +30
b − − − − 1 − 0
c − − − 1 1 − −1 b e
d − 1 − − − 1 0
e − − − − − 1 +1 a f
f − − − − − − +4
c d
A primeira iteração começa com a bipartição arbórea (T, L) indicada abaixo em vermelho. A tabela
dá o fluxo induzido x, o potencial induzido y, e o correspondente custo reduzido c(y). O custo do
fluxo é cx = 560.
ab ac be cd ce db df ef y
x 4 0 5 1 0 1 0 4 a +10
c(y) 0 +90 0 0 −90 0 −100 0 b +30
c −30
d 0
e +90
f +120
O algoritmo escolhe o arco ce e envia 1 unidade de fluxo ao longo do ciclo induzido por (c, e, b, d, c).
Os arcos cd e db ficam vazios. O primeiro sai da árvore mas o segundo continua na árvore. O novo
fluxo tem custo cx = 560 − 90 × 1 = 470.
A segunda iteração começa com os dados a seguir. A bipartição arbórea é degenerada.
ab ac be cd ce db df ef y
x 4 0 4 0 1 0 0 4 a +10
c(y) 0 0 0 +90 0 0 −100 0 b +30
c +60
d 0
e +90
f +120
O algoritmo escolhe o arco df e portanto o ciclo (d, f, e, b, d). Apenas 0 unidades de fluxo podem
ser enviadas ao longo do ciclo. A iteração é degenerada. O fluxo x não se altera mas os arcos df
e db são transferidos entre T e L. A terceira iteração começa com os dados indicados a seguir:
ab ac be cd ce db df ef y
x 4 0 4 0 1 0 0 4 a −90
c(y) 0 0 0 −10 0 +100 0 0 b −70
c −40
d 0
e −10
f +20
O algoritmo escolhe o arco cd e envia 1 unidade de fluxo ao longo do ciclo (c, d, f, e, c). O novo
fluxo tem custo cx = 470 − 10 × 1 = 460. A quarta iteração começa com os seguintes dados:
ab ac be cd ce db df ef y
x 4 0 4 1 0 0 1 3 a −90
c(y) 0 −10 0 0 +10 +100 0 0 b −70
c −30
d 0
e −10
f +20
O algoritmo escolhe o arco ac e envia 3 unidades de fluxo ao longo do ciclo (a, c, d, f, e, b, a). O novo
fluxo tem custo cx = 460 − 10 × 3 = 430. A quinta iteração começa com os seguintes dados:
76 4.7. ALGORITMO SIMPLEX FEOFILOFF
ab ac be cd ce db df ef y
x 1 3 1 4 0 0 4 0 a −80
c(y) 0 0 0 0 0 +90 0 +10 b −60
c −30
d 0
e 0
f +20
Tal como descrito acima, T RANSSHIPMENT S IMPLEX não é um algoritmo pois sua exe-
cução pode ser infinita no pior caso. Mas o pior caso é muito raro na prática.
Cada iteração não-degenerada diminui o custo do fluxo. Como os fluxos são induzidos
por bipartições arbóreas e o número de árvores D é finito, o número de iterações não-
degeneradas também é finito. Já o número de iterações degeneradas pode ser infinito,
pois uma mesma bipartição arbórea degenerada (T, L) pode aparecer no início de duas
(e portanto infinitas) iterações. Para evitar esse desastre, basta que no início de cada
iteração a bipartição arbórea (T, L) seja mais que viável, no sentido que passamos a
definir.
Antes de começar a execução do algoritmo, escolha um nó r (arbitrário mas fixo) para
Pj fazer o papel de raiz. No início de cada iteração, para cada nó j, seja Pj o único caminho
de r a j em T . A bipartição arbórea viável (T, L) é considerada fortemente viável se
o fluxo induzido pela bipartição tem a seguinte propriedade: cada arco vazio de T
“aponta para longe de r”, ou seja, se ij é um arco vazio de T então ij é um arco (direto)
de Pj .
Suponha que (T, L) é fortemente viável no início de uma iteração. Para que a bipartição
(T −e+h, L−h+e) no início da linha 16 do código também seja fortemente viável, é
preciso escolher o arco h na linha 15 do código como passamos a explicar. Seja s o nó
de C que está mais próximo de r em T , isto é, o último nó comum aos caminhos Pv
e Pw . Percorra o ciclo fundamental C a partir de s e escolha para h
E XEMPLO 4.7: Considere a rede de transbordo (D, b, c) descrita a seguir. O grafo dirigido D é
dado por sua matriz de adjacências. (Faça uma figura.) Os custos c, o potencial y, e o custos
reduzidos c(y) foram omitidos. Adote o nó r como raiz e suponha que c(y)ij < 0.
FEOFILOFF FLUXO VIÁVEL DE CUSTO MÍNIMO 77
r i j k l p q b rl ij kj lk lp qp iq
r − − − − 1 − − −2 x 2 0 1 2 0 1 1
i − − 1 − − − 1 −1
j − − − − − − − +1
k − − 1 − − − − +1
l − − − 1 − 1 − 0
p − − − − − − − +1
q − − − − − 1 − 0
Execute uma iteração do T RANSSHIPMENT S IMPLEX começando com a bipartição arbórea (T, L)
que tem T = {rl, kj, lk, lp, qp, iq}. Note que (T, L) é fortemente viável. O algoritmo escolhe o arco
ij pois c(y)ij < 0. O ciclo fundamental de T + ij é (i, j, k, l, p, q, i). A largura do ciclo é 1. Qualquer
um dos arcos kj, qp, iq poderia ser removido de T para dar lugar a ij. Para garantir que a nova
bipartição arbórea seja fortemente viável, o algoritmo remove o arco qp.
E XEMPLO 4.8: Considere a rede de transbordo (D, b, c) descrita a seguir. O grafo dirigido D é dado
por sua matriz de adjacências. (Faça uma figura.) A função-demanda b e os custos c dos arcos são
dadas nas tabelas. Adote o nó p como raiz. [CCPS fig.4.10]
p v w q b vp wp vw vq wq
p − − − − +10 c +10 +10 +10 +10 +20
v 1 − 1 1 −10
w 1 − − 1 −10
q − − − − +10
A primeira iteração começa com a bipartição arbórea (T, L) indicada a seguir (os arcos de T estão
destacados em vermelho). A bipartição é degenerada mas fortemente viável. O fluxo induzido tem
custo cx = 30.
vp wp vw vq wq y
x 1 0 0 0 1 p 0
c(y) 0 +10 0 −20 0 v −10
w 0
q +20
O algoritmo escolhe o arco vq. A sequência de nós do correspondente ciclo fundamental, escrita a
partir do nó mais próximo da raiz, é (v, q, w, v). Como ε = 0, a iteração é degenerada. O envio de 0
unidades de fluxo ao longo do ciclo não altera o fluxo mas altera a bipartição arbórea.
A segunda iteração começa com uma bipartição arbórea degenerada mas fortemente viável. O
fluxo induzido tem custo cx = 30.
vp wp vw vq wq y
x 1 0 0 0 1 p 0
c(y) 0 −10 +20 0 0 v −10
w −20
q 0
O algoritmo escolhe o arco wp. O correspondente ciclo fundamental, a partir do nó mais próximo
da raiz, é (p, v, q, w, p). Temos ε = 1 e o arco vp faz o papel de h. O envio de 1 unidade de fluxo ao
longo do ciclo produz um novo fluxo de custo cx = 30 − 10 × 1 = 20.
A terceira iteração começa com uma bipartição arbórea degenerada mas fortemente viável. (Se a
iteração anterior tivesse escolhido h = wq, a bipartição não seria fortemente viável.)
vp wp vw vq wq y
x 0 10 0 10 0 p 0
c(y) +10 0 0 0 0 v 0
w −10
q +10
Como c(y) ≥ 0, a execução do algoritmo termina.
78 4.8. SIMPLEX PARA REDES FEOFILOFF
Como no início do capítulo, um fluxo numa rede (D, b, u) é viável se satisfaz b e res-
peita u. Em relação a um fluxo viável x, diremos que um arco e está vazio se xe = 0 e
está cheio se xe = ue .
Começamos por estender algumas das definições da seção anterior. Como lá, vamos
supor que os grafos dirigidos em estudo são conexos.
Lema 4.10 Para qualquer tripartição viável (T, L, U ), existe apenas um fluxo viável x
que deixa os arcos de L vazios e os arcos de U cheios.
Dizemos que o único fluxo viável a que se refere o lema é induzido por (T, L, U ). Se
o fluxo induzido deixa algum arco de T vazio ou cheio, dizemos que a tripartição
(T, L, U ) é degenerada.
Como estamos supondo que D é conexo, podemos dizer que um fluxo é induzido por
uma tripartição arbórea se e somente se todo ciclo de D tem um arco vazio ou um arco
cheio (ou ambos).
Seja (T, L, U ) uma tripartição arbórea do conjunto de arcos de uma rede (D, u). Para
cada e em L, o ciclo fundamental de T + e é o único ciclo em T + e no qual e é um arco
FEOFILOFF FLUXO VIÁVEL DE CUSTO MÍNIMO 79
Lema 4.11 Seja (T, L, U ) uma tripartição arbórea de uma rede (D, b, u, c). Seja y um
potencial induzido pela tripartição e c(y) o custo reduzido associado a y. Para todo e
em T , c(y)e = 0. Para todo e em L, c(y)e = c(C), sendo C o ciclo fundamental de T + e.
Para todo e em U , c(y)e = −c(C), sendo C o ciclo fundamental de T + e.
Ao receber uma rede (D, b, u, c), o algoritmo Simplex-para-redes produz uma triparti-
ção viável (T, L, U ) e um potencial y que satisfazem as condições de otimalidade:
• c(y)e = 0 para e em T ,
• c(y)e ≥ 0 para e em L,
• c(y)e ≤ 0 para e em U ,
sendo c(y) o custo reduzido associado a y. De acordo com teorema 4.2, o fluxo x
induzido por (T, L, U ) é ótimo.
E XEMPLO 4.9: Considere a rede (D, b, u, c) descrita a seguir. O grafo dirigido D é dado por sua
matriz de adjacências. A função-demanda b e os custos c dos arcos são dadas nas tabelas.
p v w q b pv pw vw vq wq
p − 1 1 − −4 u ∞ ∞ 1 ∞ ∞
v − − 1 1 0 c +10 +20 +8 +20 +20
w − − − 1 +2
q − − − − +2
A primeira iteração começa com a tripartição viável (T, L, U ) indicada abaixo. Os arcos de T estão
indicados em vermelho, os arcos de L estão sublinhados, e U é vazio. Veja na tabela o fluxo x e o
potencial y induzidos pela tripartição.
pv pw vw vq wq y
x 2 2 0 2 0 p 0
c(y) 0 0 −2 0 +10 v +10
w +20
q +30
O algoritmo escolhe o arco vw e envia 1 unidades de fluxo ao longo do ciclo induzido por
(v, w, p, v). O arco vw fica cheio e é transferido de L para U . A tripartição (T, L, U ) não se altera.
O novo fluxo terá custo cx = 100 − 2 × 1 = 98.
A segunda iteração começa com a tripartição arbórea (T, L, U ) indicada abaixo com uma barra
acima dos arcos de U . O fluxo tem custo cx = 98.
pv pw vw vq wq y
x 3 1 1 2 0 p 0
c(y) 0 0 −2 0 +10 v +10
w +20
q +30
Como c(y)e ≥ 0 para todo e em L e c(y)e ≤ 0 para todo e em U , o fluxo x é ótimo e a execução do
algoritmo termina.
Por via dúvidas, convém verificar que cx = yb + zu. (Essa é uma boa maneira de detetar eventuais
erros de cálculo cometido durante a execução do algoritmo.) O vetor ze = min (0, c(y)e ) está
indicado abaixo:
pv pw vw vq wq
z 0 0 −2 0 0
Portanto, cx = 98 = 100 − 2 = yb + zu, como deveria ser.
tripartição viável (T, L, U ) é fortemente viável se o fluxo induzido pela tripartição tem
a seguinte propriedade: cada arco ij de T que está vazio “aponta para longe da raiz”
(ou seja, ij é um arco de Pj ), e cada arco ij de T que está cheio “aponta na direção da
raiz” (ou seja, ij é um arco de Pi ).
4.9 Exercícios
Seção 4.1
4.1 Suponha que a é um arco de custo máximo na rede, ou seja, ca := max (ce : e ∈ E). Se x é um fluxo
viável de custo mínimo, é verdade que xa = 0?
4.2 O problema do caminho dirigido de custo mínimo (poblema 1.A no capítulo 1) é um caso particular
do problema 4.A do fluxo de custo mínimo?
4.3 Mostre que o problema do fluxo de intensidade máxima de um nó r a um nó s numa rede capaci-
tada (problema 2.A no capítulo 2) é um caso particular do problema 4.A do fluxo de custo mínimo.
(Dica: acrescente arco sr ao grafo.) [CCPS 4.7]
4.4 ? Seja (D, b, u, c) uma rede viável. Mostre que a rede não é ilimitada, ou seja, tem um fluxo ótimo.
4.5 Um emparelhamento num grafo não-dirigido é perfeito se incide em todos os nós. Considere o
problema de encontrar um emparelhamento perfeito de custo mínimo em um grafo não-dirigido
bipartido. Formule esse problema como um caso particular do problema 4.A. [CCPS 4.2]
4.6 Seja D um grafo dirigido tal que o número |∂ + (v)| + |∂ − (v)| é par para cada nó v. Para cada arco vw,
seja cvw o custo de inverter vw (isto é, trocar vw por wv). Queremos encontrar um conjunto de arcos
de custo mínimo cuja inversão faz com que D tenha um ciclo dirigido euleriano. (Veja exercício
3.35 no capítulo 3.) Formule esse problema como um caso particular do problema 4.A. [CCPS 4.5]
4.7 Atribuição de terminais a concentradores. Uma rede de teleprocessamento tem um grande número
de terminais geograficamente dispersos e uma CPU. É dado um conjunto de concentradores, ins-
talados em certos lugares, sendo cada um ligado à CPU por uma linha de alta capacidade e custo
nulo. Cada terminal precisa ser ligado à CPU e a ligação pode ser direta ou pode passar por um
concentrador. Cada concentrador pode cuidar de até k terminais. Para cada terminal j, o custo de
uma ligação direta com a CPU é dj e o custo de uma ligação com um concentrador i é dij . Queremos
determinar a maneira mais barata de ligar os terminais à CPU. Formule esse problema como um
caso particular do problema 4.A. [AMO 9.7]
4.8 ? Roteamento de cargueiros vazios. Para um certo conjunto V de portos marítimos, temos os seguinte
dados sobre a entrada e saída de carga no decorrer do ano passado: para cada porto v, temos
o número pv de toneladas de carga que entraram no porto e o número qv de toneladas de carga
que saíram do porto. Em cada porto v, a diferença bv := pv − qv é uma medida do suprimento
de cargueiros vazios e −bv é uma medida da demanda por cargueiros vazios. Cada cargueiro
vazio saiu de um porto v em que bv é positivo e foi para um porto w em que bw é negativo. Se a
distância do porto v ao porto w é de cvw milhas, o deslocamento de v a w de um cargueiro vazio
com capacidade para t toneladas representa um desperdício de tcvw toneladas×milha. Queremos
organizar a movimentação de cargueiros vazios de modo a minimizar o desperdício total anual.
Seção 4.2
4.9 Verifique que o pl (2) é dual do pl (1).
4.10 ? Mostre que o pl dual (2) é viável, ou seja, exiba alguma solução viável (y, z) do pl.
4.11 Suponha que b(V ) 6= 0 numa rede (D, b, u, c) de fluxo com custos. Mostre que o pl (1) é inviável
nesse caso. Mostre que o pl dual (2) é ilimitado nesse caso (ou seja, yb + zu não tem máximo).
82 4.9. EXERCÍCIOS FEOFILOFF
4.12 Suponha que b(X) > u+ (X) para algum X ⊆ V . Mostre que pl (1) é inviável nesse caso. Mostre
que o pl dual (2) é ilimitado nesse caso (isto é, yb + zu não tem máximo).
4.13 Enuncie o problema do fluxo viável de custo máximo. Escreva o pl do problema. Escreva o pl dual.
Como poderíamos usar um algoritmo para o problema 4.A para resolver o problema do fluxo viável
de custo máximo?
Seção 4.3
4.14 Mostre que as condições de otimalidade descritas no teorema 4.2 têm a seguinte consequência: se
0 < xvw < uvw então yw − yv = cvw .
4.15 Seja y um potencial arbitrário numa rede D(b, u, c) e c(y) o correspondente custo reduzido. Mostre
que c(y) = c − yA.
4.16 ? Custo versus custo reduzido. Seja x um fluxo que satisfaz b e y é um potencial arbitrário. Seja c(y) o
custo reduzido associado a y. Mostre que c(y)x = cx − yb.
Seção 4.4
4.17 ? Seja x um fluxo viável numa rede (D, b, u, c). Seja ε a largura de um ciclo C compatível com x.
Prove que o envio de ε unidades de fluxo ao longo de C produz um novo fluxo viável. Prove que
o custo do novo fluxo é cx + c(C) ε, sendo c(C) := c(É(C)) − c(È(C)).
4.18 A figura mostra um fluxo viável x numa rede (D, b, u, c). Os três números ao lado de cada arco e
são ce , ue , xe . O custo do fluxo é cx = 25. Encontre um ciclo de aumento. Calcule um fluxo viável
de custo menor que o de x. Parte 2: Exiba um fluxo viável de custo mínimo e um potencial que
prove a otimalidade do fluxo. [CCPS fig.4.1]
4.19 Considere a rede de fluxo (D, b, u, c) da figura. Ao lado de cada nó v vemos a demanda bv . Ao lado
de cada arco e vemos os números ce , ue , xe . Verifique que x é um fluxo viável. Prove que existe um
fluxo viável de custo menor que cx ou prove que x é ótimo. [CCPS 4.8]
4.20 Rede residual. Considere o exemplo 4.1 da seção 4.1. Faça uma figura da rede residual correspon-
dente ao fluxo x. Faça uma figura da rede residual correspondente ao fluxo x0 .
4.21 Caminhos dirigidos disjuntos. Sejam r e s dois nós de um grafo dirigido D. Queremos encontrar uma
coleção de k caminhos dirigidos de r a s, sem arcos em comum, que use o menor número possível
de arcos. Formule esse problema como um caso particular do problema 4.A. Repita o problema
com caminhos dirigidos sem nós em comum exceto r e s. [AMO 11.8]
4.22 Considere o grafo dirigido D definido pela matriz de adjacências abaixo. À direita da matriz, uma
função-demanda b, as capacidades u e custos c dos arcos. (Não confunda o nó b com a função-
custo b.) Encontre um fluxo ótimo x na rede (D, b, u, c). Encontre um potencial y que satisfaça as
FEOFILOFF FLUXO VIÁVEL DE CUSTO MÍNIMO 83
condições de otimalidade do teorema 4.2. Calcule os custos reduzidos c(y). Faça uma tabela de
resultados para que seja fácil comparar x com c(y) e assim conferir a validade das folgas comple-
mentares (5). [AMO 9.22]
a b c d e b ab ae bc be cd ec ed
a − 1 − − 1 −25 u 25 20 10 25 20 20 25
b − − 1 − 1 0 c +7 +6 +4 +5 +1 +2 +2
c − − − 1 − 0
d − − − − − +25
e − − 1 − 1 0
4.23 A figura mostra um potencial y numa rede de fluxo (D, b, u, c). Ao lado de cada nó v vemos os
números bv e yv . Ao lado de cada arco e vemos oas números ce e ue . Encontre um fluxo viável x
que satisfaça as condições de otimalidade do teorema 4.2. [CCPS 4.9]
Seção 4.5
4.24 Escreva em código a rotina E NVIA F LUXO.
4.25 ? Como obter um ciclo de aumento? Suponha que x é um fluxo viável. Mostre informalmente como
calcular um ciclo de aumento. (Sugestão: Veja a prova do teorema 4.3 e a seção 1.5.)
4.26 ? Como obter um potencial ótimo? Suponha que x é uma solução ótima do pl (1). Sugira uma maneira
de calcular um potencial y que satisfaça as condições de otimalidade do teorema 4.2. (Sugestão:
Veja a prova do teorema 4.3 e a seção 1.5.)
4.27 Faça um esboço da implementação das rotinas C ICLO A UMENTO e P OTENCIAL. (Sugestão: Trata-se,
na verdade, de uma só rotina. Veja os exercícios 4.25 e 4.26.)
4.28 A figura mostra uma rede com capacidades (em negrito) e custos (em itálico) nos arcos. Os nós s e t
têm demandas −11 e 11 respectivamente. Os demais nós têm demanda 0. Calcule um fluxo viável
de custo mínimo. Prove que o fluxo é ótimo. [Sch17 4.16i]
Seção 4.6
4.29 Seja (D, b, u, c) uma rede de fluxo que permite arcos de capacidade infinta. Suponha que a rede
tem um fluxo ótimo. Para cada arco de capacidade infinita, queremos adotar uma capacidade
finita
P U tal que qualquer Pfluxo ótimo na nova rede seja ótimo na rede original. Mostre que U :=
(ue : e ∈ E, ue < ∞) + (bv : v ∈ V, bv > 0) tem a propriedade desejada. [CCPS 4.11]
4.30 Redes de transbordo. Considere as instâncias (D, b, u, c) do problema de fluxo de custo mínimo em
que não há restrição de capacidade, ou seja, tais que ue = ∞ para cada arco e. Escreva o programa
linear que descreve essas instâncias. Escreva o pl dual.
84 4.9. EXERCÍCIOS FEOFILOFF
4.31 ? Redes de transbordo. Enuncie a versão apropriada do teorema 4.2 (das condições de otimalidade)
para redes de fluxo que não têm restrições de capacidade (ou seja, redes em que todos os arcos têm
capacidade infinita). Mostre que nessa versão do teorema o vetor y é tal que cx = yb. Mostre que,
para qualquer vetor d cujas componentes são todas iguais, o vetor y+d tem as mesmas propriedades
de y. Explique por que (y + d)b = yb.
4.32 Programas lineares para capacidades infinitas. Escreva as adaptações dos pl’s (1) e (2) que representam
corretamente a extensão do problema 4.A que permite arcos de capacidade infinita. Verifique que
cada pl é dual do outro. Escreva as condições de folgas complementares (tratando em separado os
arcos de capacidade finita e infinita). Mostre que cx = yb + zu se e somente se valem as condições
de folgas complementares.
4.33 Seja r um nó de um grafo dirigido D com n nós. Suponha que br = −n + 1 e bv = +1 para cada
v 6= r. Suponha que não há restrições de capacidade (alternativamente, suponha que ue = ∞ para
cada arco e) e c ≥ 0. Dê um algoritmo para resolver o problema do fluxo de custo mínimo na rede
(D, b, u, c). Como calcular um vetor y que satisfaça as condições de otimalidade do teorema 4.2?
Subseção 4.7.1
4.34 Seja x um fluxo num grafo dirigido conexo D. Suponha que todo ciclo (dirigido ou não) em D tem
um arco vazio. Mostre que x é induzido por alguma bipartição arbórea de E(D).
4.35 ? Prove o lema 4.7. Dê um algoritmo que receba uma bipartição arbórea (T, L) de uma rede (D, b),
decida se a bipartição é viável, e em caso afirmativo calcule o fluxo induzido por (T, L).
4.36 Fluxo viável implica fluxo induzido. Prove a seguinte afirmação: se uma rede (D, b) tem um fluxo
viável então também tem um fluxo viável induzido por alguma bipartição arbórea. Prove a se-
guinte afirmação: se uma rede (D, b, c) tem um fluxo ótimo então também tem um fluxo ótimo que
é induzido por alguma bipartição arbórea.
Subseção 4.7.2
4.37 ? Dê um algoritmo que receba uma bipartição arbórea (T, L) de uma rede (D, c) e calcule um
potencial y induzido pela bipartição.
4.38 ? Prove o lema 4.8 e o lema 4.9.
Subseção 4.7.3
4.39 Resolva a instância do problema do transbordo indicada na figura. Use o algoritmo T RANS -
SHIPMENT S IMPLEX . Os números junto aos nós são as demandas b. Os números nos arcos são os
custos c. Comece com o fluxo x induzido pela bipartição arbórea (T, L) representada pelas linhas
contínuas. [CCPS 4.22]
Subseção 4.7.4
4.42 No algoritmo T RANSSHIPMENT S IMPLEX, suponha que (T, L) é fortemente viável no início de uma
iteração em que ε = 0. Mostre que h estará em Pw (e não em Pv ). Mostre que h será o último arco
direto vazio de Pw .
4.43 Bipartição arbórea inicial. Encontre uma maneira de construir a bipartição viável (T, L) na linha 01
de T RANSSHIPMENT S IMPLEX de modo que ela seja fortemente viável.
4.44 Exemplo 6. Analise o exemplo 4.6. Adote o nó d como raiz e verifique que no início de cada iteração
do algoritmo a bipartição arbórea (T, L) é fortemente viável.
4.45 De fortemente viável a fortemente viável. Suponha que (T, L) é fortemente viável e h é escolhido de
acordo com a regra (7). Mostre que no início da linha 16 de T RANSSHIPMENT S IMPLEX a bipartição
arbórea (T +e−h, L+h−e) é fortemente viável.
4.46 O número de iterações é finito. Seja r a raiz de D e defina y na linha 06 de T RANSSHIPMENT S IMPLEX
de modo que yr = 0 (e portanto yv = c(Pv ) para cada P v). Suponha que (T, L) é fortemente viável
no início de uma iteração e seja Y o valor da soma (yv : v ∈ V ) no fim da linha 06.PSuponha que
ε é nulo nessa iteração. Prove que na próxima iteração, no fim da linha 06, a soma (yv : v ∈ V )
será menor que Y . Deduza daí que o número de iterações degeneradas é finito.
Subseção 4.8.1
4.47 Prove o lema 4.10. Dê um algoritmo que receba uma tripartição arbórea (T, L, U ) de uma rede
(D, b, u), decida se a tripartição é viável, e em caso afirmativo calcule o fluxo induzido. Dê condi-
ções necessárias e suficientes para que uma tripartição arbórea (T, L, U ) seja viável.
4.48 Seja x um fluxo viável numa rede (D, b, u). Suponha que todo ciclo (dirigido ou não) em D tem um
arco vazio ou um arco cheio. Mostre que x é induzido por alguma tripartição arbórea.
4.49 Fluxo viável implica fluxo induzido. Prove as seguintes proposições: Se uma rede (D, b, u) tem um
fluxo viável então também tem um fluxo viável que é induzido por uma tripartição arbórea. Se
uma rede (D, b, u, c) tem um fluxo ótimo então também tem um fluxo ótimo que é induzido por
uma tripartição arbórea. (Sugestão: Dê um algoritmo que converta qualquer fluxo viável num
fluxo induzido equivalente.)
Subseção 4.8.2
4.50 ? Prove o lema 4.11.
Subseção 4.8.3
4.51 ? É possível ter h = e na linha 15 do N ETWORK S IMPLEX? Como o algoritmo se comporta nesse
caso?
4.52 Suponha que numa certa iteração do N ETWORK S IMPLEX escolhemos um arco e em U na linha 10.
Seja C o ciclo fundamental de T + e. Prove que c(C) < 0.
4.53 Tripartição arbórea inicial. Eis um truque feio mas efetivo para calcular a tripartição (T, L, U ) inicial
na linha 01 de N ETWORK S IMPLEX. Antes de invocar o algoritmo, acrescente a D um novo nó r e
novos arcos da seguinte maneira: para cada nó v com bv < 0, acrescente um novo arco vr; para
cada v tal que bv ≥ 0, acrescente um novo arco rv. Seja B + o conjunto dos novos arcos do tipo vr
e B − o conjunto dos novos arcos do tipo rv. Cada novo arco deve ter custo M e capacidade ∞.
A constante M deve ser positiva e muito grande. Seja T := B + ∪ B − . Adote fluxo xvr := −bv para
cada vr ∈ B + e fluxo xrv := bv para cada rv ∈ B − . Faça L igual ao conjunto dos arcos originais e
faça U ← ∅. A tripartição (T, L, U ) é fortemente viável se tomarmos r como raiz. Como o custo M
é muito grande, nenhum dos arcos artificiais estará na árvore produzida por N ETWORK S IMPLEX.
86 4.9. EXERCÍCIOS FEOFILOFF
Capítulo 5
87
88 5.1. CORTES LOCALMENTE MÍNIMOS FEOFILOFF
separa r de s e u(C) ≤ u(C 0 ) para todo corte C 0 que separa r de s. Dizemos que cortes
desse tipo são localmente mínimos.
Problema 5.A (corte localmente mínimo) Dada um grafo capacitado (G, u) e dois nós
r e s, encontrar um corte (r, s)-mínimo.
λ() A capacidade de um corte (r, s)-mínimo em (G, u) será denotada por λ(G, u, r, s). É
claro que λ(G, u, s, r) = λ(G, u, r, s).
Para resolver o problema 5.A, basta adaptar o algoritmo do fluxo máximo e corte
mínimo discutido na seção 2.6 do capítulo 2. A adaptação consiste em trocar cada
aresta de G por dois arcos antiparalelos, atribuir a cada arco a capacidade da aresta,
e submeter o grafo dirigido resultante ao algoritmo. O algoritmo devolverá um corte
∂ − (X) que tem capacidade mínima dentre os que separam r de s no grafo dirigido.
No grafo capacitado original (G, u), o corte ∂(X) é (r, s)-mínimo. Essa adaptação do
algoritmo MFMC será chamada C ORTE L OCALMENTE M ÍNIMO.
A seguinte caracterização de cortes localmente mínimos segue do lema 2.6, do teo-
rema 2.7, e do lema 2.5, todos do capítulo 2:
Lema 5.1 (minimalidade de corte local) Para qualquer par (r, s) de nós de um grafo
capacitado (G, u), um corte ∂(X) que separa r de s é (r, s)-mínimo se e somente se
existem caminhos simplesP P1 , . . . , Pk de r a s e números positivos β1 , . . . , βk tais que
β1 + · · · + βk = u(X) e (βi : Pi 3 e) ≤ ue para cada aresta e de G.
E XEMPLO 5.1: Considere o grafo capacitado representado pela matriz de adjacências e capacidades
abaixo. (Complete a figura.) O corte ∂(X), com X := {a, b, d}, separa d de c e tem capacidade 5. Os
caminhos induzidos por (d, c), (d, b, c) e (d, a, b, c), conduzindo 2, 1 e 2 unidades de fluxo respecti-
vamente, satisfazem as condições do lema 5.1. Portanto, o corte ∂(X) é (d, c)-mínimo.
a b c d
a − 6 − 2 a b
b 6 − 3 1
c − 3 − 2 d c
d 2 1 2 −
FEOFILOFF CORTES GLOBALMENTE MÍNIMOS 89
Lema 5.2 Para qualquer par (r, s) de nós de uma árvore capacitada (T, u), um corte
(r, s)-mínimo tem a forma {e}, sendo e uma aresta de capacidade mínima no único
caminho simples de r a s em T .
5.2 Submodularidade
É importante entender como diferentes cortes interagem. Dados dois cortes ∂(X) e
∂(Y ) de um grafo, é natural considerar os cortes ∂(X ∩ Y ) e ∂(X ∪ Y ). A interação
entre esses cortes obedece a seguinte desigualdade submodular:2
X X
• •
Y
Y
• •
2
A palavra “submodular” foi inspirada na igualdade “modular” |X ∩ Y | + |X ∪ Y | = |X| + |Y | que
vale para qualquer par (X, Y ) de conjuntos.
90 5.3. CORTE GLOBALMENTE MÍNIMO FEOFILOFF
E XEMPLO 5.2: A figura mostra conjuntos X e Y de nós de um grafo capacitado (G, u). Observe a
desigualdade submodular u(X ∩ Y ) + u(X ∪ Y ) = 8 + 5 ≤ 9 + 6 = u(X) + u(Y ).
a b c d
a − 6 − 2
b 6 − 3 1
c − 3 − 2
d 2 1 2 −
Lema 5.4 Dados nós r, s, p e q de um grafo capacitado (G, u), seja ∂(X) um corte (r, s)-
mínimo e ∂(Y ) um corte (p, q)-mínimo. Se X ∩ Y separa r de s e X ∪ Y separa p de q
então o corte ∂(X ∩ Y ) é (r, s)-mínimo e o corte ∂(X ∪ Y ) é (p, q)-mínimo.
Mas u(X ∩ Y ) + u(X ∪ Y ) ≤ u(X) + u(Y ) graças ao lema 5.3. Portanto, temos “=” no
lugar de cada “≤” e cada “≥”. Em particular, u(X ∩ Y ) = u(X) e u(X ∪ Y ) = u(Y ).
Segue daí que ∂(X ∩ Y ) é (r, s)-mínimo e ∂(X ∪ Y ) é (p, q)-mínimo.
E XEMPLO 5.3: No grafo capacitado da figura, o corte ∂(X) tem capacidade 7 e o corte ∂(Y ) tem ca-
pacidade 6. O corte ∂(X) é (r, s)-mínimo. (Para comprovar a minimalidade, veja os caminhos (r, s),
(r, p, b, s), (r, a, q, b, s) e (r, p, a, q, b, s) que conduzem 2, 2, 2 e 1 unidades de fluxo respectivamente.)
O corte ∂(Y ) é (p, q)-mínimo (verifique a minimalidade).
a p r b q s
a − 1 2 − 3 −
p 1 − 9 2 − −
r 2 9 − − − 2
b − 2 − − 3 8
q 3 − − 3 − 0
s − − 2 8 0 −
E XEMPLO 5.4: Seja T uma árvore e considere o grafo capacitado (T, u). Seja K um conjunto com
dois ou mais terminais. Se a é uma aresta de capacidade mínima de T e K = V (T ) então {a} é um
corte globalmente mínimo, conforme o lema 5.2. Se K 6= V (T ), encontrar um corte globalmente
mínimo é um pouco mais trabalhoso.
E XEMPLO 5.5: Seja (O, u) um grafo capacitado em que O consiste em um ciclo simples. Sejam
a1 , a2 , . . . , am as arestas de O em ordem crescente de capacidade. Seja K um conjunto de terminais.
Se K = V (O) então {a1 , a2 } é um corte globalmente mínimo. Se K 6= V (O), encontrar um corte
globalmente mínimo é um pouco mais trabalhoso.
A capacidade de um corte globalmente mínimo em (G, u, K) é denotada por λ(G, u, K). λ()
Se |K| < 2, adotamos a convenção λ(G, u, K) := ∞. É evidente que a λ(G, u, K) au-
menta quando K encolhe, ou seja, λ(G, u, K 0 ) ≥ λ(G, u, K) sempre que K 0 ⊂ K. A pro-
pósito, o número λ(G, 1, V (G)) é conhecido como aresta-conexidade (= edge-connectivity)
de G.
O problema 5.B é uma união de instâncias do problema 5.A, uma instância para cada
par de terminais. Assim,
λ(G, u, K) = min λ(G, u, r, s).
r,s ∈ K
Segue daí que uma instância do problema 5.B com k terminais pode ser resolvida com
k(k − 1)/2 invocações do algoritmo C ORTE L OCALMENTE M ÍNIMO da seção 5.1. Esse
número cresce com o quadrado de k, o que torna o método de solução lento.
Gomory e Hu observaram [GH61] que a interação (discutida na seção 5.2) entre os
muitos cortes localmente mínimos, permite calcular um corte globalmente mínimo
com apenas k−1 invocações do algoritmo C ORTE L OCALMENTE M ÍNIMO. As próximas
seções mostram como fazer isso.
Lema 5.5 Seja (G, u) um grafo capacitado, K um conjunto de terminais, e (r, s) um par
de elementos de K. Para qualquer corte (r, s)-mínimo ∂(X), se ∂(X) não é K-mínimo
então existe um corte K-mínimo ∂(Z) tal que
Z⊆X ou Z ⊆ X.
P ROVA : Suponha que ∂(X) não é globalmente mínimo e seja ∂(Y ) um corte global-
mente mínimo. É claro que u(Y ) < u(X) e que Y não separa r de s nem s de r. É claro
também que existem terminais p e q tais que ∂(Y ) é (p, q)-mínimo. Vamos mostrar que
existe um corte (p, q)-mínimo ∂(Z) tal que Z ⊆ X ou Z ⊆ X.
Ajuste a notação (intercambiando Y e Y se necessário) de modo que r e s estejam
ambos em Y . Ajuste a notação (intercambiando X e X se necessário) de modo que
p esteja em X. Ajuste a notação (intercambiando p e q se necessário) de modo que p
esteja em Y . Ajuste a notação (intercambiando r e s se necessário) de modo que r esteja
em X.
X X
r• •s
p •
Y
Y
q? • • q?
E XEMPLO 5.6: No grafo capacitado da figura, o corte ∂(X) é (r, s)-mínimo mas não globalmente
mínimo. O corte ∂(Y ) é globalmente mínimo. O corte ∂(X ∪ Y ), igual a ∂(X ∪ Y ), também é
globalmente mínimo e tem a propriedade X ∪ Y ⊆ X.
E XEMPLO 5.7: Sejam r e s dois nós de uma árvore capacitada (T, u). Seja e uma aresta de capa-
cidade mínima do único caminho simples de r a s. Se X é o conjunto de nós de uma das duas
componentes conexas de T − e, então ∂(X) é um corte (r, s)-mínimo. (Faça figuras!) A conclusão
do lema 5.5 é óbvia e natural nesse exemplo: se ∂(X) não é globalmente mínimo então existe um
corte globalmente mínimo ∂(Z) tal que Z ⊆ X ou Z ⊆ X.
FEOFILOFF CORTES GLOBALMENTE MÍNIMOS 93
E XEMPLO 5.8: Seja (G, u) um grafo capacitado em que G consiste em um ciclo simples. Para
quaisquer dois nós r e s existem exatamente dois caminhos simples de r a s em G. (Faça figu-
ras!) Digamos que os caminhos são P e Q. A capacidade de um corte (r, s)-mínimo é ua + ub ,
sendo a uma aresta de capacidade mínima em P e b uma aresta de capacidade mínima em Q. Faça
ilustrações do lema 5.5 no contexto deste exemplo.
Teorema 5.6 (Gomory–Hu) Seja (G, u) um grafo capacitado com conjunto K de termi-
nais e (r, s) um par de elementos de K. Para qualquer corte (r, s)-mínimo ∂(X), se
∂(X) não é K-mínimo então (1) todo corte (K ∩ X)-mínimo é K-mínimo ou (2) todo
corte (K ∩ X)-mínimo é K-mínimo.
P ROVA : Seja ∂(X) um corte (r, s)-mínimo e suponha que ∂(X) não é K-mínimo. Então,
graças ao lema 5.5, existe um corte K-mínimo ∂(Z) tal que Z ⊆ X ou Z ⊆ X. É claro
que u(Z) = λ(G, u, K) < u(X) = λ(G, u, r, s).
Caso 1: Z ⊆ X. Ajuste a notação (intercambiando r e s se necessário) de modo que
r ∈ X es ∈ / X. Então s ∈ Z. Como u(Z) < λ(G, u, r, s), temos r ∈ Z e portanto
Z ∩ (K ∩ X) 6= ∅. Como Z ∩ (K ∩ X) = Z ∩ K 6= ∅, concluímos que Z divide K ∩ X.
Logo, u(Z) ≥ λ(G, u, K ∩ X) ≥ λ(G, u, K). Como λ(G, u, K) = u(Z), temos
5.4.1 O algoritmo
O algoritmo de Gomory–Hu para o problema 5.B decorre do teorema 5.6. Ele recebe
um grafo capacitado (G, u) com conjunto K de terminais e usa o método da divisão e
conquista para calcular um corte K-mínimo.
(Note que, para a maior parte dos pares (v, w) de nós de K, o algoritmo não calcula um
corte (v, w)-mínimo. Em particular, o algoritmo calcula um único corte (v, w)-mínimo
com v e w em lados opostos de ∂(X).)
E XEMPLO 5.9: A matriz de adjacências e capacidades abaixo representa um grafo capacitado (G, u).
Adote o conjunto de terminais K = V (G).
a b c d
a − 7 − 5
b 7 − 3 −
c − 3 − 2
d 5 − 2 −
E XEMPLO 5.10: Seja (G, u) o grafo capacitado da figura (o mesmo do exemplo 5.3) com conjunto
de terminais K := V (G). No fim da linha 2 do algoritmo temos X = {a, p, r}. O corte ∂(X) é
(r, s)-mínimo e tem capacidade u(X) = 7.
No fim da linha 4 temos X 0 = {q}. O corte ∂(X 0 ) é (K ∩ X)-mínimo e tem capacidade u(X 0 ) = 6.
No fim da linha 7 temos X 00 = {b, p, r, s}. O corte ∂(X 00 ) é (K ∩ X)-mínimo e tem capacidade
u(X 00 ) = 6. (O algoritmo poderia, igualmente bem, ter escolhido X 00 = ∂({a}).)
a p r b q s
a − 1 2 − 3 −
p 1 − 9 2 − −
r 2 9 − − − 2
b − 2 − − 3 8
q 3 − − 3 − 0
s − − 2 8 0 −
Como u(X 0 ) = u(X 00 ) < u(X), o algoritmo devolve X 0 . O corte ∂(X 0 ) é K-mínimo. O corte ∂(X 00 )
também é K-mínimo.
f (k) = 1 + 0max
00
(f (k 0 ) + f (k 00 ))
k +k =k
para k ≥ 2, sendo max tomado sobre todos os pares (k 0 , k 00 ) de inteiros positivos tais
que k 0 + k 00 = k. A solução dessa recorrência é f (k) = k − 1 para todo k ≥ 1. Em outras
palavras, o algoritmo C ORTE G LOBALMENTE M ÍNIMO faz no máximo
k−1
FEOFILOFF CORTES GLOBALMENTE MÍNIMOS 95
07 L0 ← PADRONIZAÇÃO (L0 , X)
08 (G00 , u00 ) ← C ONTRAÇÃO G, u, X
09 L00 ← C ORTES M ÍNIMOS (G00 , u00 , K ∩ X)
10 L00 ← PADRONIZAÇÃO L00 , X
11 devolva L0 ∪ {X} ∪ L00
No fim da linha 06, podemos supor que L0 é uma coleção laminar e completa para
(G0 , u0 , K ∩ X). Na linha 07, a rotina PADRONIZAÇÃO transforma L0 numa coleção
equivalente cujos elementos são subconjuntos de X. Para obter esse efeito, a rotina
troca por L cada elemento L de L0 tal que L 3 X. Como ∂(L) = ∂(L), a coleção L0
permanece completa. Além disso, a coleção permanece laminar, conforme o lema A.3
do apêndice A. Assim, ao final da linha 07, L0 é uma coleção laminar e completa para
(G, u, K ∩ X) e todos os elementos de L0 são subconjuntos de X.
As linhas 08 a 10 fazem operações análogas com X no lugar de X. Ao final da linha 10,
L00 é uma coleção laminar completa de (G, u, K ∩ X) e todos os elementos de L00 são
subconjuntos de X.
Na linha 11, graças à rotina PADRONIZAÇÃO, a coleção L0 ∪ {X} ∪ L00 é laminar. Ade-
mais, essa coleção é completa para (G, u, K).
a b c d
a − 7 − 5
b 7 − 3 −
c − 3 − 2
d 5 − 2 −
a b c d e f
a − 1 − − − −
b 1 − 2 − 3 −
c − 2 − − − −
d − − − − 4 −
e − 3 − 4 − 5
f − − − − 5 −
Se o grafo G for pequeno e estiver representado por uma figura numa folha de papel,
o algoritmo C ORTES M ÍNIMOS pode ser executado de maneira “gráfica” e iterativa,
fazendo as contrações implicitamente: basta desenhar uma “bola” em volta do con-
junto X, como num diagrama de Venn, no fim de cada execução da linha 04. No início
de cada iteração teremos uma coleção laminar L de “bolas”. Em cada iteração, escolha
dois terminais r e s que não estejam separados por um elemento de L e encontre um
conjunto X tal que ∂(X) seja (r, s)-mínimo e L∪{X} seja laminar. Feito isso, acrescente
X a L e comece nova iteração.
E XEMPLO 5.13: Seja (G, u) o grafo capacitado da figura. Suponha que todos os nós são terminais.
A tabela à direita da figura mostra os sucessivos valores das variáveis r, s e X do algoritmo C OR -
TES M ÍNIMOS .
(r, s) X u(X)
(e, h) e g j 2
(e, j) j 5
(e, g) e 5
(h, i) h 4
A coleção de todos os valores que X assume é completa e laminar, podendo ser representada pela
expressão (g (j) (e)) (h).
98 5.6. ÁRVORES DE CORTES MÍNIMOS FEOFILOFF
ûij := u(X),
sendo X o conjunto de nós de qualquer uma das duas componentes conexas de T − ij.
(Convém lembrar que u(X) é a capacidade do corte ∂(X) em G.) Segue daí que ûij =
λ(G, u, i, j) para cada aresta ij de T . Podemos sizer que (T, û) é uma árvore capacitada
de cortes mínimos de (G, u).
E XEMPLO 5.14: Seja (T, u) um grafo capacitado em que T é uma árvore. É fácil verificar que T é
uma árvore de cortes mínimos de (T, u).
E XEMPLO 5.15: Seja (O, u) um grafo capacitado em que O consiste em um ciclo simples. Encontre
uma árvore de cortes mínimos de (O, u).
E XEMPLO 5.16: O lado esquerdo da figura mostra um grafo capacitado (G, u). O lado direito
mostra uma árvore de cortes mínimos de (G, u) e a respectiva função-capacidade.
Uma árvore de cortes mínimos descreve todos os cortes localmente mínimos de (G, u),
e não apenas os cortes mínimos que correspondem às arestas da árvore. É o que mostra
o seguinte lema.
Assim, uma árvore capacitada de cortes mínimos (T, û) é uma representação compacta
de todos os cortes localmente mínimos de (G, u): para quaisquer dois nós r e s de G,
um corte (r, s)-mínimo de (G, u) tem por margens as duas componentes conexas de
T − ij, sendo ij uma aresta de capacidade mínima no único caminho simples de r a s
em (T, û).
FEOFILOFF CORTES GLOBALMENTE MÍNIMOS 99
Em outras palavras, os cortes localmente mínimos de (G, u) são iguais aos cortes local-
mente mínimos de (T, û). De acordo com o lema 5.2, temos λ(G, u, r, s) = λ(T, û, r, s)
para quaisquer dois nós r e s.
Teorema 5.8 (Gomory–Hu) Todo grafo capacitado (G, u) tem uma árvore de cortes
mínimos.
A prova do teorema é um algoritmo que constrói uma árvore de cortes mínimos para
(G, u). O algoritmo pode ser descrito informalmente assim: primeiro, calcule um cole-
ção laminar completa L para (G, u, V (G)); depois, para cada par (i, j) de nós que esteja
separado por um único elemento de L, insira uma aresta ij na árvore.
E XEMPLO 5.17: Seja (G, u) o grafo capacitado representada na primeira das figuras abaixo. A tabela
mostra um coleção laminar completa de conjuntos de nós para o grafo. A última figura mostra a
correspondente árvore de cortes mínimos.
X u(X)
egj 2
j 5
e 5
h 4
E XEMPLO 5.18: A tabela descreve uma coleção laminar completa para o grafo capacitado (G, u)
da figura. A coleção pode ser representada pela expressão (((b) a) c) (e) ((h) x) d. À direita da
tabela temos a matriz de adjacências e capacidades da correspondente árvore de cortes mínimos.
[CCPS 3.71]
a b c d e h x
(r, s) X u(X) a − 8 8 − − − −
(h, e) hx 7 b 8 − − − − − −
(c, b) ab 8 c 8 − − 9 − − −
(a, b) b 8 d − − 9 − 8 − 7
(c, d) abc 9 e − − − 8 − − −
(d, e) e 8 h − − − − − − 8
(h, x) h 8 x − − − 7 − 8 −
A discussão acima tratou do caso em que todos os nós do grafo são terminais. É
possível generalizar o conceito de árvore de cortes mínimos e o teorema 5.8 para tratar
do caso em que nem todos os nós do grafo são terminais.
5.7 Exercícios
Seção 5.1
5.1 ? Seja (O, u) um grafo capacitado em que O consiste em um ciclo simples. Sejam r e s dois nós
de O. Descreva um corte (r, s)-mínimo.
5.2 ? Prove o lema 5.1.
100 5.7. EXERCÍCIOS FEOFILOFF
5.3 ? Considere o grafo capacitado da figura. Para cada par (r, s) de nós, seja M [r, s] a capacidade de
um corte (r, s)-mínimo. Exiba a matriz M . Exiba um corte (b, e)-mínimo e prove a minimalidade
desse corte.
Seção 5.2
5.5 Sejam X e Y dois conjuntos de nós de um grafo capacitado (G, u). Quais são os valores de u(X ∩ Y )
e u(X ∪ Y ) quando X ⊂ Y ? Quais são os valores de u(X ∩ Y ) e u(X ∪ Y ) quando X ∩ Y = ∅?
5.6 ? Considere o grafo capacitado (G, u) da figura. Seja X o conjunto {a, c, e} e Y o conjunto {c, d}.
Calcule u(X), u(Y ), u(X ∩ Y ) e u(X ∪ Y ) e confira a desigualdade submodular.
5.7 ? Prove a seguinte variante da desigualdade submodular: para quaisquer conjuntos X e Y de nós
de um grafo capacitado (G, u) tem-se u(X ∩ Y ) + u(X ∩ Y ) ≤ u(X) + u(Y ).
5.8 ? Sejam r e s dois nós de um grafo capacitado (G, u) e sejam X e Y dois conjuntos de nós que
separam r de s. Suponha que os cortes ∂(X) e ∂(Y ) são (r, s)-mínimos. Mostre que ∂(X ∩ Y ) e
∂(X ∪ Y ) também são (r, s)-mínimos.
5.9 ? Descruzamento de cortes localmente mínimos. Sejam r e s dois nós de um grafo capacitado (G, u) e
∂(X) um corte (r, s)-mínimo. Sejam p e q dois nós de X. Imite a prova do lema 5.4 para mostrar
que existe um corte (p, q)-mínimo ∂(Z) tal que Z ⊆ X.
Seção 5.3
5.10 Prove que λ(G, u, K) = minr,s ∈ K λ(G, u, r, s) em qualquer grafo capacitado (G, u) com conjunto
K de terminais.
5.11 ? Sejam r e s dois nós de um grafo capacitado (G, u). Seja ∂(X) um corte (r, s)-mínimo. Suponha
que X separa dois nós p e q. É verdade que ∂(X) é um corte (p, q)-mínimo?
5.12 ? Árvore. Descreva um algoritmo que resolva qualquer instância (G, u, K) do problema 5.B em que
G é uma árvore.
5.13 ? Ciclo simples. Descreva um algoritmo que resolva as instâncias (G, u, K) do problema 5.B em que
G é conexo e cada um de seus nós tem grau 2.
5.14 Teta. Seja H um grafo que consiste em dois nós, digamos p e q, e três caminhos simples, sem nós
em comum exceto p e q, ligando p a q. Seja u uma função-capacidade para H. Qual a capacidade
de um corte globalmente mínimo em (H, u, V (H))?
Seção 5.4
5.15 ? Ciclo simples. Complete a discussão do exemplo 5.8.
5.16 Mostre que f (k) = k − 1 é a solução da recorrência na análise de consumo de tempo do algoritmo
C ORTE G LOBALMENTE M ÍNIMO.
FEOFILOFF CORTES GLOBALMENTE MÍNIMOS 101
5.17 Reescreva o código do algoritmo C ORTE G LOBALMENTE M ÍNIMO de modo que ele aceite grafos
com apenas um terminal.
5.18 Sejam r, s e t três nós de um grafo capacitado (G, u). Seja B um corte (r, s)-mínimo, seja C um
corte (s, t)-mínimo, e seja D um corte (r, t)-mínimo. Mostre que dois desses cortes têm a mesma
capacidade e o terceiro tem capacidade não menor que a dos outros dois.
Seção 5.5
5.19 Seja (G, u) um grafo capacitado e K um conjunto de terminais do grafo. Para cada par (i, j) de nós
terminais, seja Xij uma margem de um corte (i, j)-mínimo. A coleção de todos os conjuntos Xij
satisfaz a definição de coleção completa?
5.20 Refaça o exemplo 5.13 com outras escolhas de r, s e X ao longo da execução do algoritmo C ORTES -
M ÍNIMOS.
5.21 ? Seja L a coleção laminar completa produzida pelo
S algoritmo C ORTES M ÍNIMOS. Prove que L
tem a seguinte propriedade: o conjunto V (G) r L tem exatamente um nó. Prove a seguinte
S
propriedade mais geral: para cada L em L, se M := {M ∈ L : M ⊆ L} então o conjunto L r M
contém extamente um nó.
Seção 5.6
5.22 ? Prove o lema 5.7.
5.23 É verdade que a definição de árvore de cortes mínimos só faz sentido para grafos capacitados
conexos?
5.24 Seja (G, u) um grafo capacitado. Suponha que todos os nós de G são terminais. Seja (T, û) uma
árvore capacitada tal que V (T ) = V (G) e ûij = λ(G, u, i, j) para cada par (i, j) de nós. É verdade
que T é uma árvore de cortes mínimos de (G, u)?
5.25 Ciclo simples. Seja G o grafo que consiste no ciclo simples (a, b, c, d, e, f, g, h, a). Suponha que as
arestas de e ha têm capacidade 10 e todas as demais têm capacidade maior que 10. (Faça uma
figura.) Verifique que (G − de − ha) + dh é uma árvore de cortes mínimos do grafo capacitado.
(Dica: A árvore é induzida pelo caminho (a, b, c, d, h, g, f, e). Note que a aresta dh da árvore não
pertence a G.)
5.26 Seja G o grafo que consiste no ciclo simples (a, b, c, d, e) e nada mais. Suponha que todas arestas
têm capacidade 1. Desenhe a árvore de cortes mínimos sugerida pela expressão (c) (((e) d) a) b.
Construa uma árvore de cortes mínimos de G diferente da anterior. Construa uma terceira árvore,
diferente das anteriores.
5.27 ? Grafo teta. Seja H um grafo que consiste em dois nós, digamos p e q, e três caminhos simples —
sem nós em comum exceto p e q — ligando p a q. Seja u uma função-capacidade para H. Descreva
uma árvore de cortes mínimos de (H, u).
5.28 Seja (T, û) uma árvore capacitada de cortes mínimos de um grafo capacitado (G, u). Seja ij uma
aresta de T , seja r um nó em uma das componentes conexas de T − ij, e seja s um nó na outra
componente conexa de T − ij. É verdade que um corte (r, s)-mínimo em G tem capacidade ûij ?
5.29 Construa uma árvore de cortes mínimos para o grafo capacitado da figura.
5.30 Construa uma árvore de cortes mínimos para o grafo capacitado da figura.
102 5.7. EXERCÍCIOS FEOFILOFF
5.31 A matriz de adjacências abaixo define um grafo G. (Faça uma figura.) Suponha que todas as arestas
têm capacidade 1. Construa uma árvore de cortes mínimos de G.
a b c d e f g h i
a − 1 1 − − − − − −
b 1 − 1 − − 1 − − −
c 1 1 − − − − − 1 −
d − − − − 1 1 − − −
e − − − 1 − 1 − − 1
f − 1 − 1 1 − − − −
g − − − − − − − 1 1
h − − 1 − − − 1 − 1
i − − − − 1 − 1 1 −
Emparelhamentos perfeitos
6.1 Emparelhamentos
Um emparelhamento (= matching) num grafo G é um conjunto M de arestas que incide
no máximo uma vez em cada nó de G. Um emparelhamento M cobre um nó v se v é
ponta de alguma aresta de M . Se M não cobre v, dizemos que v está exposto por M ,
ou que está M -exposto.
103
104 6.2. CAMINHOS ALTERNANTES E O TEOREMA DE BERGE FEOFILOFF
A seção anterior sugeriu o seguinte algoritmo iterativo para o problema: cada ite-
ração começa com um emparelhamento imperfeito M e procura um caminho M -
aumentador; ao encontrar um caminho aumentador P , troca M por M ⊕E(P ) e começa
nova iteração. Infelizmente, encontrar um caminho aumentador não é fácil. Mas antes
de enfrentar esse desafio, é preciso estudar as instâncias do problema que não têm
solução.
É claro que todo grafo dotado de ep tem um número par de nós. Mas essa condição não
é suficiente. Uma condição necessária mais forte envolve o conceito de componente
ímpar. Uma componente ímpar (= odd component) de um grafo H é qualquer compo-
nente conexa de H que tenha um número ímpar de nós. O número de componentes
oc(·) ímpares de H é denotado por oc(H).
A expressão G−A denota o subgrafo de G induzido por V (G) r A. Essa notação será
usada com frequência no que segue.
Para cada i, seja Vi := V (Hi ) e Mi := M ∩ E(Hi ). Como |Vi | é ímpar, temos 2|Mi | ≤
|Vi | − 1. Como M é perfeito, algum nó de Hi está ligado a A por uma aresta de M . Por
outro lado, no máximo |A| arestas de M têm alguma ponta em A. Portanto, k ≤ |A|.
Teorema 6.3 (de Tutte) Para qualquer grafo G, se oc(G−A) ≤ |A| para todo subcon-
junto próprio A de V (G) então G tem um emparelhamento perfeito.
Corolário 6.4 (do teorema de Kőnig) Para qualquer grafo bipartido G, se oc1 (G−A) ≤
|A| para todo subconjunto próprio A de V (G) então G tem um emparelhamento per-
feito.
FEOFILOFF EMPARELHAMENTOS PERFEITOS 107
E XEMPLO 6.5: A figura mostra uma árvore M -alternate com raiz r. (O resto do grafo não está na
figura.) As linhas mais grossas representam as arestas de M .
Dizemos que a árvore T é frustrada se toda aresta de G com uma ponta preta tem
a outra ponta branca. Árvores frustradas são incompatíveis com emparelhamentos
perfeitos:
Lema 6.5 (da árvore frustrada) Se G tem uma árvore M -alternante frustrada então G
não tem emparelhamento perfeito.
P ROVA : Seja T uma árvore M -alternante frustrada. Seja A o conjunto dos nós brancos
de T e B o conjunto dos nós pretos. Toda aresta de G com uma ponta em B tem a
outra em A. Portanto, cada nó de B constitui uma componente ímpar de G−A. Logo,
oc1 (G−A) ≥ |B| = |A| + 1. De acordo com o lema 6.2, a existência de um tal A mostra
que G não tem ep.
E XEMPLO 6.6: Veja abaixo a matriz de adjacências de um grafo. (Use o gabarito de posição dos nós
para fazer uma figura.) Tome o emparelhamento M = {ac, gd, f h}. Seja T a árvore M -alternante
com nós a, b, c, d e g e arcos ba, ac, cg e gd. Os nós b, c e d são pretos. Os nós a e g são brancos.
Os nós f e h são verdes e o nó e é vermelho. Não há arestas preto-verdes nem preto-vermelhas.
a b c d e f g h
a − 1 1 1 1 1 − − a
b 1 − − − − − 1 −
c 1 − − − − − 1 −
d 1 − − − − − 1 − b c d e f
e 1 − − − − − − −
f 1 − − − − − − 1 g h
g − 1 1 1 − − − −
h − − − − − 1 − −
A árvore T é frustrada. Observe que oc1 (G−A) = 4 > 2 = |A|, sendo A := {a, g} o conjunto dos
nós brancos.
Dada uma aresta preto-verde vw, seja wz a aresta de M que incide em w. (É claro que z
não está em T .) Podemos acrescentar vw e wz a T e assim estender a árvore. Dada uma
aresta preto-vermelha vw, o caminho simples de r a w em T + vw é M -aumentador e
pode ser usado para produzir um novo emparelhamento, maior que M . Encapsulamos
essas operações em duas rotinas:
Suponha agora que nenhuma dessas operações pode ser executada. Então todas as
arestas de G com uma ponta preta têm a outra ponta branca ou preta. Diremos que
uma aresta de G é preto-branca se tem uma ponta preta e a outra branca e é preto-
preta se ambas as pontas são pretas.
Se não existem arestas preto-pretas então T é frustrada. Se existe uma aresta preto-
preta, digamos vw, então T + vw tem um ciclo simples de comprimento ímpar. Ciclos
simples também são conhecidos como circuitos. Portanto,
T + vw tem um circuito ímpar. (1)
Não é fácil lidar com esses circuitos ímpares. Trataremos disso na seção 6.7. Na pró-
xima seção vamos nos ocupar de grafos que não têm circuitos ímpares.
E XEMPLO 6.7: Aplique o algoritmo E MP B IPARTIDO P ERFEITO ao grafo G representado pela matriz
de adjacências abaixo. (Use o gabarito de posição dos nós para fazer uma figura.)
a b c d e f g h i
a − 1 − − − − − − − a c g i
b 1 − − − − − − − −
c − − − 1 1 1 − − −
d − − 1 − − − − − −
b d e f h
e − − 1 − − − − − −
f − − 1 − − − 1 − −
g − − − − − 1 − 1 −
h − − − − − − 1 − 1
i − − − − − − − 1 −
Examine os nós em ordem alfabética. A execução do algoritmo termina com M := {ab, cd} e com
a árvore M -alternante T que tem raiz e e arestas ec e cd. Os nós e e d são pretos, o nó c é branco,
os nós a e b verdes, e todos os demais nós são vermelhos. Não há arestas preto-verdes, nem preto-
vermelhas, nem preto-pretas, e a árvore T é frustrada. O algoritmo devolve o conjunto A := {c},
que viola a condição de Tutte. (Note que a execução do algoritmo termina antes de examinar o
grafo todo.)
110 6.7. FLORES E CONTRAÇÕES FEOFILOFF
E XEMPLO 6.8: A figura mostra uma flor C num grafo G e o grafo G×C que resulta da contração
de C.
E XEMPLO 6.9: A figura à esquerda mostra uma árvore M -alternante T . As linhas tracejadas repre-
sentam arestas que não pertencem a T . Uma dessas arestas liga um nó branco a um nó vermelho u.
Há um caminho aumentador que começa em r, “desce” pela árvore até w, percorre wv, “volta” pela
árvore até o vizinho de u, e finalmente chega a u. Mas a rotina A UMENTA E MP não vê esse caminho
aumentador pois sua última aresta não é preto-vermelha.
FEOFILOFF EMPARELHAMENTOS PERFEITOS 111
O circuito ímpar C em T + vw é uma flor. A figura à direita representa o grafo G×C. Na nova
árvore alternante, C é um nó preto, a aresta Cu é preto-vermelha e o caminho aumentador de r a u
ficou visível.
Lema 6.6 (da árvore frustrada) Se a árvore T 0 é frustrada então o grafo original G não
tem emparelhamento perfeito.
P ROVA : Seja A o conjunto dos nós brancos de T 0 (esses nós estão à distância ímpar
da raiz em G0 ) e B o conjunto dos nós pretos (esses nós estão à distância par da raiz
em G0 ). Como T 0 é frustrada, toda aresta de G0 com uma ponta em B têm a outra em A.
Portanto, cada nó de B constitui uma componente ímpar de G0 −A. Como todos os
nós de A são originais, faz sentido examinar o grafo G−A. O conjunto de nós de cada
componente ímpar de G−A é igual a S(v) para algum v em B. Logo, oc(G−A) ≥ |B|.
Como |B| = |A| + 1, o conjunto A viola a condição de Tutte (veja o lema 6.2). Portanto
G não tem emparelhamento perfeito.
E XEMPLO 6.10: A figura mostra a flor C e o grafo G×C do exemplo 6.8. Em seguida, mostra um
emparelhamento no grafo G×C e a expansão desse emparelhamento para dentro de C, produzindo
um emparelhamento em G.
112 6.8. ALGORITMO DAS FLORES PARA EMPARELHAMENTO PERFEITO FEOFILOFF
E XEMPLO 6.11: Aplique o algoritmo E MP P ERFEITO ao grafo G definido pela matriz de adjacências
abaixo.
a b c d e f g h i
a − 1 1 − − − − − −
b 1 − − 1 1 − − − −
c 1 − − − 1 − − 1 −
d − 1 − − − 1 1 1 −
e − 1 1 − − − − − −
f − − − 1 − − − 1 −
g − − − 1 − − − − 1
h − − 1 1 − 1 − − 1
i − − − − − − 1 1 −
O emparelhamento inicial M := {bd, ce, f h, gi} é indicado em vermelho na matriz. A primeira
iteração produz a árvore M -alternante T com conjunto de arestas
O conjunto de nós pretos é B := {a, d, e, h, i} e o conjunto de nós brancos é A := {b, c, f, g}. A raiz
de T é a. Não há nós verdes nem vermelhos pois T cobre o grafo todo. Suponha que o algoritmo
escolhe a aresta dh, que liga dois nós pretos e assim forma a flor K := (d, h, f, d).
A contração da flor transforma G no grafo G0 := G×K representado pela matriz à esquerda:
a b c e K g i
a − 1 1 − − − −
b 1 − − 1 1 − − a b c e L
c 1 − − 1 1 − − a − 1 1 − −
e − 1 1 − − − − b 1 − − 1 1
K − 1 1 − − 1 1 c 1 − − 1 1
g − − − − 1 − 1 e − 1 1 − −
i − − − − 1 1 − L − 1 1 − −
O conjunto de nós pretos é B 0 := {a, e, K, i} e o conjunto de nós brancos é A0 := {b, c, g}. Em se-
guida, o algoritmo escolhe a aresta Ki, que liga dois nós pretos e assim forma a flor L := (K, g, i, K).
A contração da flor transforma G0 em G00 := G×L (veja a matriz de adjacências acima à direita),
transforma M 0 em M 00 , e transforma T 0 na árvore M 00 -alternante T 00 definida pelas arestas
O conjunto de nós pretos é B 00 := {a, e, L} e o conjunto de nós brancos é A00 := {b, c}. Todas as
arestas que têm uma ponta preta têm a outra ponta branca. Portanto, T 00 é frustrada e A00 viola as
condições de Tutte em G00 .
O conjunto A00 também viola as condições de Tutte no grafo original G. Com efeito, oc(G−A00 ) =
3 > 2 = |A00 |. As três componentes ímpares de G−A00 têm conjuntos de nós {a}, {e} e {d, h, f, i, g}.
114 6.9. EXERCÍCIOS FEOFILOFF
6.9 Exercícios
Seção 6.1
6.1 Mostre que todo emparelhamento perfeito em um grafo G tem exatamente 21 |V (G)| arestas.
6.2 Seja V o conjunto de nós de um grafo G. Prove que todo emparelhamento em G tem no máximo
1 1
2 |V | arestas. Ademais, se |V | é ímpar então todo emparelhamento tem no máximo 2 (|V | − 1)
arestas.
6.3 Aplicação. É dado um conjunto de trabalhadores, um conjunto de postos de trabalho, e o conjunto
de todos os pares (t, p) tais que o trabalhador t está habilitado a ocupar o posto p. Encontre um
emparelhamento máximo entre trabalhadores e postos de trabalho.
Seção 6.2
6.4 Enuncie em separado as partes “se” e ”somente se” do teorema de Berge 6.1.
6.5 Seja M ∗ um emparelhamento máximo e M um emparelhamento qualquer em um grafo G. Use
o método de prova do teorema 6.1 para mostrar que G tem pelo menos |M ∗ | − |M | caminhos M -
aumentadores disjuntos (ou seja, sem nós em comum). [CCPS 5.2]
6.6 Seja M um emparelhamento de tamanho 4000 num grafo que tem um emparelhamento de ta-
manho 5000. Use o resultado do exercício 6.5 para mostrar que o grafo tem um caminho M -
aumentador de comprimento no máximo 9. [CCPS 5.3]
FEOFILOFF EMPARELHAMENTOS PERFEITOS 115
6.7 Sejam M1 e M2 dois emparelhamentos em um grafo bipartido G com bipartição (P1 , P2 ). Mostre
que existe um emparelhamento N que cobre todos os nós de P1 cobertos por M1 e todos os nós de
P2 cobertos por M2 . [AMO 12.8]
6.8 Cobertura mínima por arestas. Uma cobertura por arestas de um grafo G é qualquer subconjunto B
de E(G) que incide em cada nó de G (ou seja, cada nó é ponta de alguma aresta de B). (Não
confunda cobertura por arestas com a cobertura por nós da seção 3.1.) Todo emparelhamento
perfeito, por exemplo, é uma cobertura. Mostre como uma cobertura por arestas mínima de um
grafo G sem nós isolados pode ser calculada a partir de um emparelhamento máximo, digamos M ∗ .
Prove que o tamanho de uma cobertura por arestas mínima é |V (G)| − |M ∗ |. [CCPS 5.13]
Seção 6.4
6.9 Seja G um grafo com número ímpar de nós. Mostre que G não satisfaz a condição de Tutte.
6.10 Seja G um grafo dotado de ep. Mostre que oc(G − v) = 1 para todo nó v.
6.11 Enuncie um teorema se-e-somente-se que combine o lema 6.2 e o teorema 6.3.
6.12 Prove o corolário 6.4 a partir do teorema de Kőnig 3.3.
6.13 ? Prove o corolário 6.4 a partir do teorema de Gale 3.7.
6.14 Mostre que toda árvore tem no máximo um ep.
6.15 ? Mostre que uma árvore T tem um ep se e somente se oc(T −v) = 1 para cada nó v. Escreva uma
prova elementar que não use o teorema de Tutte.
6.16 Slither. O jogo Slither é jogado por duas pessoas, digamos Um e Dois, sobre um grafo G. Os
jogadores se alternam: o primeiro a jogar é Um, o segundo é Dois, e assim por diante. Cada jogada
consiste em escolher uma aresta que não tenha sido previamente escolhida de tal modo que, a cada
passo, o conjunto das arestas já escolhidas forme um caminho simples. Perde o jogador que não
conseguir fazer uma jogada. Prove que Um pode forçar uma vitória se G tiver um ep. [CCPS 5.18]
6.17 ? Teorema de Hall. Mostre que, no caso de grafos bipartidos, a condição de Tutte equivale à seguinte:
|N (B)| ≥ |B| para todo B ⊆ P e todo B ⊆ Q, sendo (P, Q) uma bipartição do grafo e N (B) o
conjunto de todos os nós adjacentes a nós de B. (Sua prova não deve usar emparelhamentos.)
[CCPS 3.21]
6.18 Teorema de Petersen. Seja G um grafo tal que grau(v) = 3 para todo nó v e G − e é conexo para cada
aresta e. Use o teorema de Tutte 6.3 para mostrar G tem um ep. (Dica: Mostre que |∂(C)| ≥ 3 para
todo conjunto ímpar C de nós.) [CCPS 5.7]
Seção 6.5
6.19 Seja M um emparelhamento num grafo. Mostre que as folhas de toda árvore M -alternante são
pretas (ou seja, estão a uma distância par da raiz r).
6.20 ? Seja M um emparelhamento num grafo G e T uma árvore M -alternante frustrada em G. É
verdade que toda aresta de G é preto-branca?
6.21 Seja M um emparelhamento e T uma árvore M -alternante. Seja r a raiz de T e vw uma aresta preto-
preta. Mostre que T + vw tem um circuito ímpar. Seja t o nó do circuito que está mais próximo da
raiz r de T e mostre que a distância de r a t em T é par.
Seção 6.6
6.22 Que acontece se o nó r escolhido na linha 03 do algoritmo E MP B IPARTIDO P ERFEITO for isolado
(isto é, se tiver grau 0)?
116 6.9. EXERCÍCIOS FEOFILOFF
6.23 Repita o exemplo 6.7 examinando os nós em alguma ordem diferente da alfabética.
6.24 Na linha 09 de E MP B IPARTIDO P ERFEITO, adote abreviaturas V1 := V (T ), M1 := M ∩ E(T ) e
A1 := A. Mostre que A1 é uma cobertura por nós (veja a seção 3.1) do grafo G[V1 ] e que |M1 | = |A1 |.
Mostre também que nenhuma aresta de G liga V1 r A1 a V (G) r V1 .
6.25 Seja G um grafo bipartido com bipartição (P, Q). Seja M um emparelhamento em G e T uma árvore
M -alternante com raiz em P . Seja A o conjunto dos nós brancos de T e B o conjunto dos nós pretos.
Mostre que A ⊆ Q e B ⊆ P . Suponha agora que T é frustrada e mostre que N (B) ⊆ A, sendo N (B)
o conjunto de todos os vizinhos de nós de B.
6.26 Teorema de Hall. Seja G um grafo bipartido com bipartição (P, Q). Use o algoritmo E MP B IPARTIDO -
P ERFEITO para provar que G tem um emparelhamento de tamanho |P | se e somente se |N (X)| ≥
|X| para todo subconjunto X de P , sendo N (X) o conjunto de todos os nós em Q que são vizinhos
de nós em X. (Sugestão: Se T é uma árvore alternante frustrada e B o conjunto dos nós pretos
de T , então N (B) ⊆ A e |N (B)| ≤ |A| = |B| − 1.) [CCPS 3.21]
6.27 Aplique o algoritmo E MP B IPARTIDO P ERFEITO ao grafo com bipartição (P, Q) representado pela
matriz P × Q abaixo. (Use o gabarito de posição dos nós para fazer uma figura.) Ao procurar por
um nó exposto e ao escolher arestas que cobrem um dado nó, examine os nós em ordem alfabética.
Qual o valor de M no fim da execução do algoritmo? Qual o valor de T ? Quais os nós brancos,
pretos, verdes e vermelhos? O que o agoritmo devolve?
g h i j k l
a 1 − − − − − a b c d e f
b − 1 − − − −
c − 1 1 − − −
d − − − 1 − −
g h i j k l
e − − − 1 − −
f − − − − 1 −
6.28 Aplique o algoritmo E MP B IPARTIDO P ERFEITO ao grafo G com bipartição (P, Q) representado pela
matriz P × Q abaixo. (Use o gabarito de posição dos nós para fazer uma figura.)
e f g
a 1 − 1 a b c d
b − 1 1
c 1 1 1
e f g
d − − 1
Seção 6.7
6.29 Seja M um emparelhamento em um grafo G e T uma árvore M -alternante. Seja C uma flor. Mostre
que o caminho simples em T que vai da raiz até o “primeiro” nó de C tem comprimento par.
6.30 No exemplo 6.9, calcule o emparelhamento no grafo G×C propiciado pelo caminho aumentador.
Em seguida, expanda esse emparelhamento para dentro da flor C, como sugerido no exemplo 6.10.
6.31 Mostre que a coleção de flores produzida pelo algoritmo do emparelhamento perfeito é laminar
(veja definição na seção A.6 do apêndice A).
Seção 6.8
6.32 Faça o rastreamento da execução do algoritmo E MP P ERFEITO sobre um grafo que tem apenas um
nó. Repita para um grafo que tem exatamente dois nós e uma aresta. Repita para um grafo que tem
exatamente três nós e duas arestas.
6.33 ? Refaça o exemplo 6.11 escolhendo a aresta hi no lugar de dh na primeira iteração. Refaça o
exemplo 6.11 depois de acrescentar um nó j e uma aresta gj ao grafo.
FEOFILOFF EMPARELHAMENTOS PERFEITOS 117
6.35 Execute o algoritmo E MP P ERFEITO sobre o grafo da figura. Comece com o emparelhamento de
dez arestas indicado pelas linhas grossas. Faça o rastreamento de duas execuções diferentes: uma
começando com a raiz a e outra começando com a raiz p. [Sch17 5.7i]
6.36 Encontre um emparelhamento perfeito no grafo da figure. Use o algoritmo E MP P ERFEITO come-
çando com o emparelhamento indicado na figura. [Sch17 5.7ii]
6.37 Encontre um emparelhamento perfeito no grafo da figure. Use o algoritmo E MP P ERFEITO come-
çando com o emparelhamento indicado na figura. [Sch17 5.7iii]
118 6.9. EXERCÍCIOS FEOFILOFF
Capítulo 7
Emparelhamentos máximos
7.1 O problema
Um emparelhamento (= matching) num grafo é um conjunto M de arestas tal que todo
nó do grafo pertence a no máximo uma das arestas de M . Um emparelhamento M
é máximo se tem cardinalidade máxima, ou seja, se |M | ≥ |M 0 | para qualquer outro
emparelhamento M 0 .
Convém repetir aqui algumas das definições apresentadas na seção 6.1 do capítulo 6.
Um emparelhamento M cobre um nó v se v é ponta de alguma aresta de M . Se M não
cobre v, dizemos que v está exposto por M , ou M -exposto. Num grafo com conjunto
V de nós, um emparelhamento M deixa exatamente |V | − 2|M | nós expostos. Um
emparelhamento é máximo se e somente se minimiza o número de nós expostos.
E XEMPLO 7.2: Uma companhia de aviação opera aviões que precisam ser tripulados por dois
pilotos. Por algum motivo, nem todo par de pilotos pode voar junto. Queremos encontrar um
conjunto máximo de pares de pilotos compatíveis.
119
120 7.2. COMPONENTES ÍMPARES E O TEOREMA DE TUTTE–BERGE FEOFILOFF
A restrição do problema 7.A a grafos bipartidos já foi resolvida na seção 3.1 do capí-
tulo 3. O capítulo 6 tratou do caso especial do problema 7.A em que o emparelhamento
máximo é perfeito. Este capítulo usa as soluções dos casos especiais para resolver o
problema 7.A em geral.
Lema 7.1 (das componentes ímpares) Para qualquer grafo G com conjunto V de nós,
qualquer emparelhamento M , e qualquer subconjunto próprio A de V , tem-se
|M | ≤ 21 |V | − oc(G−A) + |A| ,
Por outro lado, no máximo |A| arestas de M têm uma ponta em A. Portanto, pelo
menos k−|A| nós “especiais” estão expostos. Em outras palavras, |V |−2|M | ≥ k−|A|.
FEOFILOFF EMPARELHAMENTOS MÁXIMOS 121
Ocasionalmente usaremos a abreviatura kAk := 12 (|V | − oc(G−A) + |A|). Com essa kAk
abreviatura, a conclusão do lema pode ser escrita assim: |M | ≤ kAk.
E XEMPLO 7.3: Para qualquer cobertura K de G vale a desigualdade minA⊂V kAk ≤ |K|. Com
efeito, como
oc(G − K) = |V | − |K|,
temos minA kAk ≤ kKk = 12 (|V | − (|V | − |K|) + |K|) = |K|. Isso mostra que a cota superior
|K| para os emparelhamentos em G é mais fraca que a cota superior kAk dada pelo lema 7.1.
O lema 7.1 tem a seguinte consequência: para provar que um dado emparelhamento
M é máximo, basta exibir um conjunto A de nós tal que |V | − 2|M | = oc(G−A) − |A|.
Um tal conjunto A serve de certificado de maximalidade do emparelhamento.
E XEMPLO 7.5: Seja G o grafo da figura e A o conjunto dos três nós brancos. Observe que G−A tem
6 componentes conexas: duas têm 1 nó cada, uma tem 2 nós, duas têm 3 nós cada, e uma tem 5 nós.
Portanto, oc(G−A) = 5.
Seja M o emparelhamento com 8 arestas indicado pelas linhas mais grossas e observe que
|V | − 2|M | = 18 − 2 × 8 = 5 − 3 = oc(G−A) − |A|. Portanto, |M | = kAk. Em virtude do lema 7.1,
essas igualdades mostram que o emparelhamento M é máximo. [CCPS fig.5.1]
W. Tutte [Tut] e C. Berge [Ber] mostraram (1947 e 1958) que a delimitação superior dada
pelo lema 7.1 é justa:
A próxima seção mostra uma prova algorítmica do teorema. Uma seção subsequente
dá uma prova não algorítmica. A combinação do teorema 7.2 com o lema 7.1 leva à
seguinte fórmula de Tutte–Berge: em qualquer grafo G = (V, E),
max |M | = min 21 |V | − oc(G−A) + |A| ,
(2)
M A
onde maxM é tomado sobre todos os emparelhamentos M e minA é tomado sobre todos
os subconjuntos próprios A de V .
É fácil ver que o teorema de Tutte 6.3, que dá condições para existência de um empa-
relhamento perfeito, decorre do teorema de Tutte–Berge 7.2. Surpreendentemente, a
recíproca é verdadeira: o teorema de Tutte implica o teorema de Tutte–Berge. Os dois
teoremas são, portanto, equivalentes.
122 7.3. ALGORITMO DO EMPARELHAMENTO MÁXIMO FEOFILOFF
E XEMPLO 7.6: Seja G o grafo bipartido representado na figura. Começamos por submeter G ao
algoritmo E MP B IPARTIDO P ERFEITO. As primeiras quatro iterações encontram o emparelhamento
{bd, ce, ih, jg}.
a b c i j
d 1 1 1 1 1
e 1 1 1 1 1
f − − − 1 1
g − − − 1 1
h − − − 1 1
A quinta iteração constrói uma árvore alternante a partir do nó exposto a. A execução do algoritmo
termina na linha 10 e devolve os conjuntos descritos a seguir. Observe que M1 é um emparelha-
FEOFILOFF EMPARELHAMENTOS MÁXIMOS 123
V1 M1 A1
abcde bd ce de
E XEMPLO 7.7: Seja G o grafo bipartido representado pela matriz abaixo. (Use o gabarito de po-
sição dos nós para fazer uma figura.) Submetemos G ao algoritmo E MP B IPARTIDO P ERFEITO. As
primeiras três iterações encontram o emparelhamento {ab, cd}.
a c g i
b 1 − − − a c g i
d − 1 − −
e − 1 − −
f − 1 1 − b d e f h
h − − 1 1
A quarta iteração constrói uma árvore alternante com raiz e. A árvore se revela frustrada e a
execução do algoritmo termina na linha 10 com o seguinte resultado (compare com o exemplo 6.7
do capítulo 6):
V1 M 1 A1
ecd cd c
Agora submeta o grafo G − V1 ao algoritmo E MP B IPARTIDO P ERFEITO. Esta segunda execução do
algoritmo termina na linha 13 e devolve o emparelhamento perfeito M2 := {ab, f g, hi}. Observe
que A2 := {a, g, i} é uma cobertura de G − V1 e |A2 | = |M2 |.
Se juntarmos os resultados das duas execuções de E MP B IPARTIDO P ERFEITO, teremos o emparelha-
mento M1 ∪M2 e a cobertura A1 ∪A2 de G. O emparelhamento é máximo pois |M1 ∪M2 | = |A1 ∪A2 |.
Podemos descrever agora um algoritmo para o problema 7.A sem restrições. Dado um
grafo arbitrário G = (V, E), o algoritmo deve produzir um emparelhamento M e um
subconjunto A de V tais que
De acordo com o lema 7.1, um tal M e máximo e (3) vale com “=” no lugar de “≤”.
O algoritmo será descrito recursivamente. Comece por submeter G ao algoritmo E MP -
P ERFEITO da seção 6.8. Se a execução do algoritmo termina na linha 17 e devolve um
124 7.3. ALGORITMO DO EMPARELHAMENTO MÁXIMO FEOFILOFF
emparelhamento perfeito M , então o par (M, ∅) satisfaz (3). Essa caso está na base da
recursão.
Suponha agora que a execução do algoritmo termina na linha 13. Então temos um grafo
derivado G0 , um emparelhamento M 0 em G0 , e uma árvore M 0 -alternante frustrada T 0
em G0 . Temos também o conjunto A0 de nós brancos de T 0 e o conjunto B 0 de nós
pretos de T 0 . Todos os nós de A0 são originais (veja a seção 6.7), enquanto B 0 pode
conter pseudonós. Como se sabe, |B 0 | = |A0 | + 1 e toda aresta de G0 com uma ponta em
B 0 tem a outra em A0 . Ademais, M 0 deixa exatamente um nó exposto no grafo induzido
G0 [V (T 0 )] e oc(G0 −A0 ) − |A0 | ≥ |B 0 | − |A0 | = 1.
Seja V1 o conjunto de nós do grafo original G que correspondem aos nós de T 0 . (Em
termos da notação usada na seção 6.7, V1 é o união de todos os conjuntos S(v) com v
em V (T 0 ).) Seja A1 um nome alternativo para A0 e observe que nenhuma aresta de
G liga V1 r A1 a V (G) r V1 . Seja M o resultado de E XPANDE (G0 , M 0 ). É claro que M
é um emparelhamento no grafo original G, mas esse emparelhamento pode não ser
máximo pois E MP P ERFEITO pode não ter explorado o grafo todo. Seja M1 o conjunto
das arestas de M que têm ambas as pontas em V1 . Observe que M1 deixa exatamente
um nó exposto no grafo induzido G[V1 ], ou seja, que |V1 | − 2|M1 | = 1. Observe também
que oc(G[V1 ]−A1 ) − |A1 | ≥ oc(G0 −A0 ) − |A0 | ≥ 1.
Se V1 = V (G) então estamos na base da recursão, pois o par (M1 , A1 ) satisfaz (3).
Suponha agora que V1 6= V (G). Submeta o grafo G − V1 ao algoritmo que estamos
descrevendo. Isso produzirá um emparelhamento M2 em G − V1 e um subconjunto A2
de V (G − V1 ) que satisfazem (3) no papel de (M, A). Então o par (M1 ∪ M2 , A1 ∪ A2 )
satisfaz (3), como desejamos.
E XEMPLO 7.8: Seja G o grafo representado pela matriz de adjacências abaixo. (Use o gabarito de
posição dos nós para fazer uma figura.) Usaremos o algoritmo E MP P ERFEITO para encontrar um
emparelhamento máximo em G.
a b c d e f g h
a − 1 − − − − − − a e
b 1 − 1 − 1 1 − −
c − 1 − 1 1 − − − b d
d − − 1 − 1 − − −
e − 1 1 1 − − − − c
f − 1 − − − − 1 −
f h
g − − − − − 1 − 1
h − − − − − − 1 − g
V1 M1 A1
abcde bc de b
nós brancos é A0 := {g} e o conjunto de nós pretos é B 0 := {f, h}. A tabela abaixo mostra V2 , M2
e A2 . Observe que oc(G[V2 ]−A2 ) − |A2 | = 1 = |V2 | − 2|M2 |.
V2 M2 A2
fgh gh g
Lema 7.3 (da contração de circuito ímpar) Se C é um circuito ímpar num grafo G en-
tão def(G×C) ≥ def(G).
Dizemos que um circuito ímpar C é justo (= tight) se def(G×C) = def(G). É claro que C
é justo se e somente se ν(G×C) = ν(G) e portanto existe um emparelhamento máximo
em G que usa exatamente b 12 |V (C)|c arestas de C.
126 7.4. PROVA NÃO ALGORÍTMICA DO TEOREMA DE TUTTE–BERGE FEOFILOFF
Para lidar com circuitos ímpares que não são justos, precisamos do conceito de nó
essencial. Um nó v de um grafo G é essencial (= essential) se ν(G − v) < ν(G), ou seja,
se todo emparelhamento máximo em G cobre v. É claro que v é essencial se e somente
se
def(G − v) > def(G).
E XEMPLO 7.10: No grafo induzido por um circuito de comprimento par, todos os nós são essenci-
ais. Já no grafo induzido por um circuito ímpar, nenhum nó é essencial.
P ROVA : Seja v um nó de A e adote a notação A−v := Ar{v}. Conforme o lema 7.1 (com
G−v no papel de G e A−v no papel de A), temos def(G−v) ≥ oc(G−v)−(A−v))−|A−v|.
Como (G − v) − (A−v) = G−A, temos
e portanto v é essencial.
Lema 7.5 (dos nós essenciais adjacentes) Para qualquer aresta vw de um grafo G, se v
e w não são essenciais então vw pertence a algum circuito ímpar justo C; ademais, C é
um nó não-essencial de G×C.
FEOFILOFF EMPARELHAMENTOS MÁXIMOS 127
Prova do teorema de Tutte–Berge. Agora que os lemas 7.3, 7.4 e 7.5 prepararam o
terreno, podemos provar o teorema de Tutte–Berge 7.2.
P ROVA : Seja G um grafo. O lema 7.1 já mostrou que |V (G)| − 2|M | ≥ oc(G−A) − |A|
para qualquer emparelhamente M e qualquer subconjunto próprio A de V (G). Em
particular, def(G) ≥ oc(G−A) − |A| para qualquer A ⊂ V (G). Resta mostrar que existe
A ⊂ V (G) tal que
def(G) ≤ oc(G−A) − |A|.
A prova é uma indução no número de arestas de G. Se o conjunto de arestas é vazio, a
afirmação vale com A = ∅. Agora suponha que o conjunto de arestas não é vazio e seja
vw uma aresta qualquer. Há dois casos a considerar.
Caso 1: uma das pontas de vw é um nó essencial. Ajuste a notação (intercambinado v e
w se necessário) de modo que v seja o nó essencial e portanto def(G − v) > def(G). Seja
G0 := G − v. Por hipótese de indução, podemos supor que existe A0 ⊂ V (G0 ) tal que
def(G0 ) ≤ oc(G0 − A0 ) − |A0 |. Seja A := A0 ∪ {v} e observe que G − A = G0 − A0 . Logo,
def(G) ≤ def(G−v) − 1
= def(G0 ) − 1
≤ oc(G0 − A0 ) − |A0 | − 1
= oc(G−A) − |A|,
como queríamos mostrar.
Caso 2: v e w não são essenciais. Pelo lema 7.5, v e w pertencem a um circuito ímpar
justo, digamos C. Seja G0 := G×C. Por hipótese de indução, podemos supor que existe
A0 ⊂ V (G0 ) tal que def(G0 ) ≤ oc(G0 − A0 ) − |A0 |. Pelo lema 7.3, def(G0 ) ≥ def(G). Logo,
def(G) ≤ oc(G0 − A0 ) − |A0 |.
Pelo lema 7.5, o nó C de G0 não é essencial. Portanto, o lema 7.4 (com G0 no papel de
G e A0 no papel de A) garante que o nó C não pertence a A0 . Assim, A0 ⊂ V (G). Como
C é ímpar, toda componente ímpar de G0 − A0 corresponde a uma componente ímpar
de G−A0 . Portanto, oc(G0 − A0 ) = oc(G−A0 ) e assim
def(G) ≤ oc(G−A0 ) − |A0 |,
128 7.5. EXERCÍCIOS FEOFILOFF
Esta prova do teorema 7.2 não é construtiva pois não temos um algoritmo para decidir
se um dado nó é essencial. Assim, a prova não pode servir de base para um algoritmo
recursivo que calcule um emparelhamento máximo.
7.5 Exercícios
Seção 7.1
7.1 Emparelhamento maximal. Um emparelhamento M em um grafo G é maximal se não existe empare-
lhamento M 0 tal que M 0 ⊃ M . Em outras palavras, M é maximal se não existe aresta e em E(G)rM
tal que M ∪ {e} é um emparelhamento. Mostre que todo emparelhamento maximal é grande. Mais
precisamente, mostre que |M | ≥ 21 ν(G) para todo emparelhamento maximal M .
Seção 7.2
7.2 Seja M um emparelhamento e K uma cobertura em um grafo. Mostre que |M | ≤ |K|. Mostre que
a desigualdade pode ser estrita mesmo que M seja máximo e K seja mínimo.
7.3 Seja M um emparelhamento perfeito em um grafo bipartido G. Escolha uma das pontas de cada
aresta de M . Seja K o conjunto dos nós escolhidos. É verdade que K é uma cobertura por nós
de G?
7.4 Suponha que um grafo G tem um emparelhamento M que deixa no máximo um nó exposto. Mostre
que |M | = k∅k.
7.5 ? Seja M um emparelhamento perfeito num grafo G. Mostre que oc(G−v) = 1 para cada nó v
(e portanto |M | = k{v}k).
7.6 Seja M um emparelhamento num grafo G e A um subconjunto próprio de V (G). Suponha que M
deixa exatamente oc(G−A) − |A| nós expostos. Mostre que |M | = kAk.
7.7 Seja G um grafo e A um subconjunto próprio de V (G). Mostre que o número kAk é inteiro.
7.8 Exiba um emparelhamento com 7 arestas no grafo da figura. Mostre que o emparelhamento é
máximo. [CCPS 5.14]
7.9 Seja G um grafo e A um subconjunto próprio de V (G). Deduza do lema 7.1 que ν(G) ≤ kAk e que
def(G) ≥ oc(G−A) − |A|.
7.10 Deduza do lema 7.1 e do teorema 7.2 que todo grafo G satisfaz a igualdade ν(G) = minA⊂V (G) kAk
e a igualdade def(G) = maxA⊂V (oc(G−A) − |A|).
7.11 Prove a restrição do teorema de Tutte–Berge 7.2 a árvores. (Dica: árvores são bipartidas.)
7.12 ? Prove o teorema de Tutte 6.3 a partir do teorema Tutte–Berge 7.2.
7.13 ? Tutte implica Tutte-Berge. Prove o teorema de Tutte–Berge 7.2 a partir do teorema de Tutte 6.3.
(Dica: Dado um grafo G e um inteiro positivo k ≤ n/2, construa um grafo G0 que tenha a seguinte
propriedade: G0 tem um ep se e somente se G tem um emparelhamento de tamanho k. [CCPS 5.5]
FEOFILOFF EMPARELHAMENTOS MÁXIMOS 129
Subseção 7.3.1
7.14 Seja G o grafo bipartido com bipartição (P, Q) representado pela matriz binária P × Q abaixo. Seja
M o emparelhamento {be, cf, dg}. Use o algoritmo esboçado na subseção 7.3.1 para verificar que
M é máximo e calcular um conjunto A de nós que certifique a maximalidade de M .
a b c d
e 1 1 1 1
f 1 1 1 1
g − − − 1
h − − − 1
7.15 ? Escreva em código o algoritmo que calcula um emparelhamento máximo em um grafo bipartido.
Use como guia o esboço apresentado na subseção 7.3.1.
7.16 ? Deduza o teorema de Kőnig 3.3 do algoritmo que calcula um emparelhamento máximo num
grafo bipartido (veja o exercício 7.15). [CCPS 5.10]
Subseção 7.3.2
7.17 Use, repetidamente, o algoritmo E MP P ERFEITO da seção 6.8 para encontrar um emparelhamento
máximo no grafo da figura. Encontre também um conjunto A de nós que certifique a maximalidade
do emparelhamento. [CCPS 5.14]
7.19 Escreva em código o algoritmo de emparelhamento máximo para grafos arbitrários que foi esbo-
çado na subseção 7.3.2. (Sugestão: Comece por escrever uma versão do algoritmo E MP P ERFEITO
que devolva (1) um emparelhamento perfeito M ou (2) um emparelhamento M 0 no grafo deri-
vado G0 , o conjunto de nós de uma árvore M 0 -alternante frustrada, e o conjunto A0 de nós brancos
de T 0 .)
Seção 7.4
7.20 Critique a seguinte proposta de algoritmo para encontrar um emparelhamento máximo: contraia
circuitos ímpares recursivamente até que o grafo não os tenha; encontre um emparelhamento má-
ximo no grafo resultante; expanda o emparelhamento para dentro dos circuitos que foram contraí-
dos.
7.21 Mostre que um nó v de um grafo G é essencial se e somente se def(G − v) > def(G).
7.22 Suponha que um nó v de um grafo G é essencial. Mostre que ν(G − v) = ν(G) − 1 e def(G − v) =
def(G) + 1.
130 7.5. EXERCÍCIOS FEOFILOFF
7.23 Seja G um grafo induzido por um caminho simples. Quais são os nós essenciais de G?
7.24 Seja G um grafo dotado de um ep. Mostre que todos os nós de G são essenciais.
7.25 O lema 7.4 sugere a seguinte pergunta: se A é o conjunto de todos os nós essencias de um grafo,
então ν(G) = 21 (|V | − oc(G−A) + |A|)? Responda a pergunta.
7.26 ? Mostre que a restrição do lema 7.5 (dos nós essenciais) a grafos bipartidos é equivalente ao
teorema de Kőnig 3.3. [CCPS 5.8]
7.27 ? Seja G um grafo conexo sem nós essenciais. Use o lema 7.5 do circuito ímpar justo para mostrar
que ν(G) = b|V |/2c. [CCPS 5.9]
7.28 Mostre que o algoritmo E MP P ERFEITO (veja a seção 6.8) pode contrair circuitos ímpares que não
são justos. Isso pode acontecer durante a construção da última árvore alternante? [CCPS 5.12]
7.29 ? No contexto do caso 2 da prova do teorema de Tutte–Berge, mostre que toda componente ímpar
de G0 − A0 corresponde a uma componente ímpar de G−A0 .
7.30 Partição de Gallai-Edmonds. Dado um grafo G, seja B o conjunto dos nós não-essenciais, C o conjunto
dos vizinhos de B (ou seja, o conjunto dos nós em V (G) r B que têm algum vizinho em B), e D o
conjunto V (G) r (B ∪ C). Prove que
(a) |V | − oc(G−A) + |A| tem valor mínimo quando A := C;
(b) para todo emparelhamento máximo M e todo v em C, existe vw em M tal que w ∈ B;
(c) todo emparelhamento máximo contém um ep de G[D].
A expressão G[D] representa o subgrafo de G induzido por D. [CCPS 5.6]
7.31 Exiba a partição de Gallai-Edmonds (veja o exercício 7.30) do grafo da figura. [CCPS 5.16]
7.32 Slither. O jogo Slither é jogado por duas pessoas, digamos Um e Dois, sobre um grafo G. Os
jogadores se alternam: o primeiro a jogar é Um, o segundo é Dois, e assim por diante. Cada jogada
consiste em escolher uma aresta que não tenha sido previamente escolhida de tal modo que, a cada
passo, o conjunto das arestas já escolhidas forme um caminho simples. Perde o jogador que não
conseguir fazer uma jogada. Prove que Um pode forçar uma vitória se G tiver um ep. [CCPS 5.18]
7.33 Slither. Considere o jogo Slither do exercício 7.32. Suponha que a primeira jogada de Um é uma
aresta uv tal que o nó u não é essencial. Mostre que Dois pode forçar uma vitória. [CCPS 5.19]
7.34 Slither. Considere o jogo Slither do exercício 7.32. Seja (B, C, D) a partição de Gallai-Edmonds
de G (veja o exercício 7.30). Suponha que D não é vazio. Prove que Um pode forçar uma vitória.
[CCPS 5.20]
7.35 Slither. Considere o jogo Slither do exercício 7.32. Seja (B, C, D) a partição de Gallai-Edmonds de G
(veja o exercício 7.30). Suponha que os nós de todas as arestas jogadas até o momento estão em C.
Suponha que o próximo jogador escolhe uma aresta que não tem ponta em C. Prove que o outro
jogador pode forçar uma vitória. [CCPS 5.21]
Capítulo 8
8.1 O problema
Seja G um grafo e c uma função que atribui custos às arestas de G. (O custo de uma
aresta pode ser positivo, negativo,
P ou nulo.) Para qualquer conjunto M de arestas,
denotaremos por c(M ) a soma e∈M ce .
E XEMPLO 8.1: Considere o grafo definido pela matriz de adjacências abaixo. Os custos dos arcos
são dados na tabela. Há dois ep’s, sendo {ad, bc} o que tem custo mínimo.
131
132 8.2. UM PROGRAMA LINEAR PARA EP MÍNIMO FEOFILOFF
a b c d ac ad bc bd
a − − 1 1 c +60 +70 −10 +10
b − − 1 1
c 1 1 − −
d 1 1 − −
minimize cx
sob as restrições x(∂(v)) = 1 para cada v em V (1)
xe ≥ 0 para cada e em E,
sendo V := V (G) e E := E(G). É claro que toda solução viável inteira (e portanto
binária) do pl representa um ep. Portanto, uma solução ótima x do pl representa uma
solução do problema 8.A desde que x seja inteiro. Entretanto, muitas soluções ótimas
do pl não ser inteiras.1 (Compare com o pl (1) do capítulo 4, que trata de fluxo viável
de custo mínimo em grafos dirigidos. Lá, toda solução não-inteira do pl é solução do
problema do fluxo.)
E XEMPLO 8.2: Seja G um grafo completo com nós a, b e c e o vetor de custos dado na tabela. É claro
que G não tem ep algum. Mas o vetor x é solução ótima do pl (1).
ab bc ca
c +10 +10 +10
x 0.5 0.5 0.5
E XEMPLO 8.3: Seja G um grafo completo com conjunto nós a, b, c e d. A tabela define o vetor c de
custos. Também define soluções viáveis x e x0 do pl (1). As soluções x e x0 são ótimas, mas apenas
x0 representa um ep.
ab bc cd da ac bd
c +10 +20 +10 +20 +10 +10
x 0.4 0 0.4 0 0.6 0.6
x0 1 0 1 0 0 0
E XEMPLO 8.4: Seja G um grafo completo com conjunto nós a, b, c e d. A tabela define o vetor de
custos e soluções viáveis x, x0 , x00 e x000 do pl (1). Observe que cx = 20, cx0 = 19, cx00 = 20 e
cx000 = 30. Apenas x00 e x000 representam ep’s, e nenhum deles é mínimo.
1
Se trocarmos a restrição “xe ≥ 0” por “xe ∈ {0, 1}” (ou, alternativamente, por “xe ∈ Z+ ”), o
programa (1) representará corretamente o problema do ep mínimo, mas deixará de ser linear.
FEOFILOFF EMPARELHAMENTOS PERFEITOS DE CUSTO MÍNIMO 133
ab bc cd da ac bd
c +10 +5 +10 +5 +15 +15
x 1/3 1/3 1/3 1/3 1/3 1/3
x0 0.9 0.1 0.9 0.1 0 0
x00 1 0 1 0 0 0
x000 0 0 0 0 1 1
Programa dual. O dual do programa linear (1) consiste em encontrar um vetor real
(yv : v ∈ V ) que
maximize y1
(2)
sujeito a yv + yw ≤ cvw para cada vw em E.
P
A expressão y1 denota a soma v∈V yv . Diremos que um vetor y que satisfaz as restri-
ções (2) é um potencial viável.2 É fácil encontrar um potencial viável: se ce ≥ α para
toda aresta e então o potencial que atribui α/2 a cada nó é viável.
Dado um potencial y, o custo reduzido de uma aresta vw é o número cvw − yv − yw .
O vetor de custos reduzidos será denotado por c(y). Portanto,
c(y)vw := cvw − yv − yw
para cada aresta vw. Observe que c(y) ≥ 0 se e somente se o potencial y é viável.
Como se sabe, uma solução viável x do pl (1) é ótima se e somente se existe um poten-
cial viável y tal que cx = y1. E essa igualdade vale se e somente se as folgas de x e y
são complementares, isto é, se e somente se
xe = 0 ou c(y)e = 0 (3)
para todo e em E.
E XEMPLO 8.5: Considere o grafo completo com nós a, b, c, d. As tabelas definem um vetor de
custos c, um potencial viável y, o vetor c(y) de custos reduzidos, e soluções viáveis x e x0 do pl (1).
ab bc cd da ac bd y
c +40 +75 +75 +40 +90 +90 a +10
c(y) 0 0 0 0 35 30 b +30
x 1 0 1 0 0 0 c +45
x0 0.5 0.5 0.5 0.5 0 0 d +30
As soluções viáveis x e y têm folgas complementares. Portanto, x é solução ótima do pl (1). Como
x é binário, representa um ep mínimo.
As folgas das soluções viáveis x0 e y também são complementares e portanto x0 é solução ótima do
pl (1). Mas x0 não representa um ep.
Como veremos na próxima seção, o programa linear dual (2) e o conceito de potencial
viável têm um papel importante no projeto de um algoritmo para o problema 8.A, pelo
menos quando o problema é restrito a grafos bipartidos.
2
Não confunda com o conceito de potencial viável associado ao problema do caminho de custo
mínimo na seção 1.2. Ao contrário daquele, este potencial deixa de ser viável se somarmos um mesmo
número a cada componente yv .
134 8.3. ALGORITMO PARA EP MÍNIMO EM GRAFO BIPARTIDO FEOFILOFF
M ⊆ E(y) (4)
Preliminares. A procura por um ep no grafo (V (G), E(y)) pode ser executada pelo
algoritmo E MP B IPARTIDO P ERFEITO da seção 6.6. Por isso, convém recordar alguns dos
conceitos introduzidos na seção 6.5.
Suponha que M é um emparelhamento num grafo G e T é uma árvore M -alternante
com raiz r. Um nó v de T é branco se a distância de r a v em T é ímpar, e preto se essa
distância é par. A árvore T é frustrada se toda aresta de G com uma ponta preta tem a
outra ponta branca. O lema 6.5 mostra que se T é frustrada então G não tem um ep.
Os nós de G que não pertencem a T têm cores: um nó w é vermelho se estiver M -
exposto e verde em caso contrário. Uma aresta é preto-vermelha se uma de suas pontas
é preta e a outra é vermelha. Arestas preto-verde, preto-branca e preto-preta são definidas
analogamente. Se G é bipartido então não tem circuitos ímpares e portanto não tem
arestas preto-pretas, conforme (1) na seção 6.5.
O algoritmo húngaro. O algoritmo que resolve o problema 8.A restrito a grafos bi-
partidos foi proposto por H. Kuhn [Kuh] (1955) e J. Munkers [Mun] (1957) e ficou
conhecido como algoritmo húngaro. O algoritmo recebe um grafo bipartido G e um
vetor c de custos e devolve um ep de custo mínimo ou informa que G não tem ep
algum.
O algoritmo é iterativo. Numa descrição grosseira e imprecisa, poderíamos dizer que
cada iteração começa com um potencial viável y e usa o algoritmo E MP B IPARTIDO -
P ERFEITO para procurar um ep no grafo justo G(y) := (V (G), E(y)). Se um tal ep for
encontrado, o problema está resolvido graças a (4). Senão, y é ajustado e uma nova
iteração começa com o novo potencial viável.
Numa descrição mais precisa, cada iteração começa com um potencial viável y e um
emparelhamento M ⊆ E(y). (Na primeira iteração, y é um potencial viável arbitrário.)
Se M é um ep, o problema está resolvido. Suponha agora que M não é um ep. Então
um código análogo ao de E MP B IPARTIDO P ERFEITO é usado para calcular uma árvore
FEOFILOFF EMPARELHAMENTOS PERFEITOS DE CUSTO MÍNIMO 135
E XEMPLO 8.6: A figura mostra um grafo G com custos nas arestas. A primeira coluna da tabela
define um potencial viável y. O conjunto de arestas justas é E(y) = {ra, ab, rd, df, gh}. O algoritmo
húngaro começa com o emparelhamento M := {ab, df, gh} representado pelas linhas grossas da
figura. [CCPS fig.5.12]
A primeira iteração do algoritmo procura um ep no subgrafo justo (V, E(y)). Para isso, constrói a
árvore M -alternante T com raiz r e arestas ra, ab, rd e df (linha sólidas da figura). Os nós r, b e f
são pretos e os nós a e d são brancos. Os nós g e h são verdes e o nó i é vermelho. Não há arestas
preto-verdes nem preto-vermelhas no subgrafo justo. A árvore T é frustrada no subgrafo justo e
portanto o subgrafo não tem ep.
y ra ab rd df bg f g gh f i hi
r +1 c(y) 0 0 0 0 2 1 0 2 1
a +1
b +2
d +3
f +1
g +2
h +3
i +2
y ra ab rd df bg f g gh f i hi
r +2 c(y) 0 0 0 0 1 0 0 1 1
a 0
b +3
d +2
f +2
g +2
h +3
i +2
Na segunda iteração, a árvore T continua crescendo no novo subgrafo justo. As arestas f g e gh são
acrescentadas a T . Essa árvore é frustrada (no subgrafo justo) e portanto o subgrafo não tem ep.
Em G, o conjunto das arestas preto-verdes e preto-vermelhas é F ∪ F 0 := {f i, hi}. O menor custo
reduzido nesse conjunto é ε := 1. Um novo potencial viável é calculado somando ε ao potencial de
cada nó preto e subtraindo ε do potencial de cada nó branco. As arestas f i e hi tornam-se justas.
y ra ab rd df bg f g gh f i hi
r +3 c(y) 0 0 0 0 1 0 0 0 0
a −1
b +4
d +1
f +3
g +1
h +4
i +2
Na terceira iteração, a árvore T continua crescendo no (novo) subgrafo justo. A aresta hi é acres-
centada a T . O caminho (r, d, f, g, h, i) em T é aumentador. Depois que esse caminho aumentador
for processado teremos um ep no subgrafo justo (V, E(y)). Esse ep é mínimo em G.
Veja o rastreamento da execução do algoritmo. Cada linha da tabela descreve os valores das variá-
veis ao longo de uma iteração:
y
r a b d f g h i E(y) M ⊆ E(y) T F ∪ F0 ε
1 1 2 3 1 2 3 2 ra ab rd df gh ab df gh rab rdf bg f g f i 1
2 0 3 2 2 2 3 2 mais f g ab df gh mais f gh hi f i hi 1
3 −1 4 1 3 1 4 2 mais f i hi ab rd f g hi
E XEMPLO 8.7: Considere o grafo bipartido definido pela matriz de adjacências abaixo. À direita
da matriz temos os custos dos arcos.
a b c d ac ad bc bd
a − − 1 1 c 90 40 75 95
b − − 1 1
c 1 1 − −
d 1 1 − −
Comece a execução do algoritmo H ÚNGARO com o potencial viável y dado abaixo. Esse potencial
determina o custo reduzido c(y) e o subgrafo justo G(y) cuja matriz aparece abaixo. A tabela dá o
vetor característico x do emparelhamento M escolhido na linha 02 do algoritmo.
y ac ad bc bd a b c d
a 20 c(y) 0 5 5 80 a − − 1 −
b 0 x 1 0 0 0 b − − − −
c 70 c 1 − − −
d 15 d − − − −
A primeira iteração chega à linha 11 com T = ({b}, ∅). Nas linhas 11 a 18, calcula ε = 5 e altera y,
tornando justa a aresta bc. Veja os novos valores das variáveis:
138 8.4. UM PROGRAMA LINEAR MAIS PODEROSO FEOFILOFF
y ac ad bc bd a b c d
a 20 c(y) 0 5 0 75 a − − 1 −
b 5 x 1 0 0 0 b − − 1 −
c 70 c 1 1 − −
d 15 d − − − −
y ac ad bc bd a b c d
a 25 c(y) 0 0 0 70 a − − 1 1
b 10 x 1 0 0 0 b − − 1 −
c 65 c 1 1 − −
d 15 d 1 − − −
A terceira iteração encontra o caminho aumentador (b, c, a, d) no subgrafo justo. Isso leva ao novo
emparelhamento indicado abaixo. O novo emparelhamento é perfeito e todas as arestas estão
justas. De acordo com (4), o ep é mínimo em G.
ac ad bc bd
c(y) 0 0 0 70
x 0 1 1 0
y
a b c d E(y) M ⊆ E(y) T F ∪ F0 ε
20 0 70 15 ac ac b bc bd 5
20 5 70 15 ac bc ac bca bd ad 5
25 10 65 15 ac bc ad bc ad
Programa dual. O pl dual de (6) tem uma variável yv para cada nó v e uma variável
YS para cada S em S e consiste em encontrar um par (y, Y ) que
maximize y1 + Y 1
(7)
P
sujeito a yv + yw + (YS : S ∈ Svw ) ≤ cvw para cada vw em E
YS ≥ 0 para cada S em S,
P P
sendo y1 = v∈V yv , Y 1 = S∈S YS e Svw := {S ∈ S : ∂(S) 3 vw}. Dado um par
(y, Y ), o custo reduzido de qualquer aresta vw é o número c(y,Y )vw definido assim:
P
c(y,Y )vw := cvw − yv − yw − (YS : S ∈ Svw ).
Portanto, (y, Y ) é viável em (7) se e somente se c(y,Y )e ≥ 0 para cada e em E e YS ≥ 0
para cada S em S.
Dada uma solução viável (y, Y ) do pl dual (7), as condições de folgas complementares
têm a seguinte consequência: se M é um ep tal que
então M é um ep mínimo.
Laminaridade. Em geral, numa solução ótima (y, Y ) de (7), a maior parte das com-
ponentes de Y é nula. Ademais, os conjuntos S para os quais YS > 0 formam uma
coleção laminar (veja definição na seção A.6 do apêndice A) e portanto há menos que
2|V | deles.
E XEMPLO 8.8: Para a instância do problema 8.A descrita a seguir, uma solução ótima do pl (1) não
define um ep. [CCPS fig.5.13]
a b c d e f
a − 1 1 − − 1
b 1 − 1 − 1 −
c 1 1 − 1 − −
d − − 1 − 1 1
e − 1 − 1 − 1
f 1 − − 1 1 −
Considere então os pl’s (6) e (7). Uma solução viável x do pl (6) e uma solução viável (y, Y ) do
pl dual (7) estão indicadas abaixo, juntamente com o custo reduzido c(y,Y ). O vetor dual Y tem
uma única componente não nula: YS > 0 apenas quando S = {a, b, c}. (São nulas, por exemplo, as
componentes de Y que correspondem aos conjuntos {a, d, f }, {a, c, f } e {a, c, d}.)
ab bc ca de ef f d be cd af y Y
c 1 2 3 4 5 6 7 8 9 a 1 abc 5
x 1 0 0 0 1 0 0 1 0 b 0
c(y,Y ) 0 0 0 1 0 2 0 0 0 c 2
d 1
e 2
f 3
Com um pouco de paciência, verificamos que os valores c(y,Y ) na tabela estão corretos e são não-
negativos. Tomando M := {e : xe = 1}, constatamos que M é um ep e M ⊆ E(y,Y ). Além disso,
|M ∩ ∂(S)| = 1. Portanto, x e (y, Y ) têm folgas complementares. Logo, M é um ep mínimo. Por
curiosidade, verificamos ainda que cx = 14 = y1 + Y 1.
Veja outro potencial (y, Y ) que tem folgas complementares com as de x:
ab bc ca de ef f d be cd af y Y
c 1 2 3 4 5 6 7 8 9 a 1 abc 3.5
x 1 0 0 0 1 0 0 1 0 b 0
c(y,Y ) 0 0 0 0 0 0 2 0 1 c 2
d 2.5
e 1.5
f 3.5
FEOFILOFF EMPARELHAMENTOS PERFEITOS DE CUSTO MÍNIMO 141
B LOSSOM (G, c)
01 seja y uma solução viável do pl (2)
02 seja M ⊆ E(y) um emparelhamento em G talvez M ← ∅
03 enquanto o emparelhamento M não é perfeito faça
04 G0 ← G, c0 ← c, M 0 ← M G0 é o grafo derivado
05 seja r um nó M 0 -exposto de G0
06 T 0 ← ({r}, ∅)
07 repita as pontas de cada aresta são tomadas em G0
08 enquanto existe aresta preto-verde ou preto-preta em E(y)
09 seja vw uma aresta preto-verde ou preto-preta
10 se vw é preto-verde
11 então T 0 ← E STENDE Á RVORE (G0 , M 0 , T 0 , vw)
12 senão C ONTRAI F LOR (G0 , M 0 , T 0 , vw, c0 )
13 se existe pseudonó branco v tal que yv = 0
14 então expanda v e atualize M 0 , T 0 e c0
15 se não existe aresta preto-vermelha em E(y)
16 então seja A0 o conjunto dos nós brancos de T 0
17 se A0 tem pseudonós
18 então y ← A JUSTE (G0 , c0 , M 0 , T 0 , y)
19 senão devolva A0 e pare G não tem ep
20 seja vw uma aresta preto-vermelha em E(y)
21 M 0 ← A UMENTA E MP (G0 , M 0 , T 0 , vw)
22 estenda M 0 a um ep M em G
23 devolva M e pare M é um ep
8.6 Exercícios
Seção 8.1
8.1 Uma loja de aluguel de pranchas de surf quer alugar n pranchas para n surfistas. As pranchas têm
comprimentos l1 ≤ · · · ≤ ln e os surfistas têm alturas h1 ≤ · · · ≤ hn . Idealmente, o comprimento de
uma prancha deve ser igual à altura do surfista. Digamos que um emparelhamento entre pranchas
a surfistas é ótima se minimiza a soma das diferenças, em valor absoluto, entre a altura do surfista
e o comprimento de sua prancha. Formule essa questão como um problema de ep mínimo. Mostre
que o emparelhamento {l1 h1 , . . . , ln hn } é ótimo. (Dica: Mostre que se l ≤ l0 e h ≤ h0 então |l − h| +
|l0 − h0 | ≤ |l − h0 | + |l0 − h|. Depois, faça a diferença simétrica entre dois ep’s.)
8.2 Suponha dado um grafo com custos nas arestas. Se multiplicarmos o custo de cada aresta por 100,
é verdade que todo ep mínimo continua sendo mínimo? Se somarmos 200 ao custo de cada aresta,
é verdade que todo ep mínimo continua sendo mínimo?
8.3 ? Circuitos alternantes. Seja M um ep em um grafo com custos c nas arestas. O peso de qualquer
circuito alternante C é o número c(E(C) r M ) − c(E(C) ∩ M ). (Um circuito é um ciclo simples. É
claro que circuitos alternantes têm comprimento par.) Prove que M é um ep mínimo se e somente
se o grafo não tem circuitos alternantes de peso negativo. (Dica: considere diferenças simétricas.)
[CCPS 5.35]
Seção 8.2
8.4 Por que o pl (1) não tem a restrição “xe ≤ 1 para cada e ∈ E”?
8.5 Mostre que todo ep corresponde a uma solução viável inteira do pl (1). Mostre que toda solução
viável inteira do pl (1) corresponde a um ep.
8.6 ? Escreva explicitamente os pl’s (1) e (2) para o grafo definidos pelas tabelas abaixo.
a b c d ab bc ca cd
a − 1 1 − c +10 +20 +30 +40
b 1 − 1 −
c 1 1 − 1
d − − 1 −
8.7 Mostre que o pl (2) é o dual do pl (1). Prove que a condição de folgas complementares (3) está
correta.
8.8 Exiba uma instância inviável do pl (1) e uma instância inviável do pl (2).
8.9 Seja G um grafo completo com n nós. Suponha que toda aresta tem custo −10. Exiba um ep de
custo mínimo. Exiba uma solução ótima x do pl (1) e uma solução ótima y do pl (2).
8.10 ? Seja G um grafo bipartido e suponha que o custo de cada aresta vw é bv + bw , sendo b uma
atribuição de números reais aos nós de G. Descreva um bom algoritmo para calcular um ep mínimo
nesse caso. Em seguida, descreva um algoritmo particularmente rápido para o caso em que G é
bipartido completo. [AMO 12.22b]
Seção 8.3
8.11 O que há de errado na seguinte afirmação? “Todo grafo bipartido com custos nas arestas tem um
ep cujo custo é igual ao valor ótimo do pl (1).”
8.12 ? Suponha que o grafo G tem bipartição (P, Q). Para calcular um potencial viável na linha 01 do
algoritmo H ÚNGARO, comece por fazer yp := 0 para todo p em P . Desenvolva essa ideia.
FEOFILOFF EMPARELHAMENTOS PERFEITOS DE CUSTO MÍNIMO 143
8.13 ? Mostre que o novo potencial calculado pelo algoritmo H ÚNGARO nas linhas 11 a 18 é viável. Em
seguida, mostre que o conjunto justo para o novo potencial inclui M e E(T ).
8.14 Seja G o grafo bipartido completo com bipartição ({a, b}, {c, d}). O vetor c de custos é dado abaixo.
Calcule um ep mínimo em (G, c). Comece com o potencial y e o emparelhamento M = {ac}. Antes,
verifique que o potencial y é viável.
ac ad bc bd y
c 10 50 30 30 a 0
b 2
c 1
d 4
8.15 Calcule um ep mínimo no grafo bipartido completo com bipartição ({a, b, c}, {d, e, f }) que tem os
custos indicados abaixo. Procure escolher o potencial inicial y de modo que o subgrafo justo G(y)
tenha muitas arestas.
ad ae af bd be bf cd ce cf
c 20 10 50 40 30 30 50 40 20
Seção 8.4
8.16 Faça uma lista de todos os conjuntos ímpares de nós do grafo abaixo. Escreva cada conjunto ímpar
ao lado do seu complemento (que também é ímpar). Para cada conjunto ímpar S, escreva a lista
dos elementos de ∂(S).
8.17 Seja M um ep em um grafo G. Seja S um corte de margem ímpar. Mostre que M ∩ S não é vazio.
8.18 No pl (6), é suficiente restringir as desigualdades florais aos circuitos ímpares? Ou seja, é suficiente
supor que S é a conjunto de todos os cortes ∂(S) tais que S é o conjuntos de nós de algum circuito
ímpar?
8.19 Mostre que o pl (7) é o dual do pl (6). Verifique que as condições de folgas complementares dadas
no texto acima.
8.20 Suponha que G é um grafo com número ímpar de nós (e portanto não tem ep). Mostre que o
correspondente pl (6) é inviável e o pl (7) é ilimitado. Repita o exercício supondo que G tem duas
componentes conexas, cada uma com número ímpar de nós.
8.21 ? Escreva explicitamente as desigualdades florais do exemplo 8.8.
8.22 Desigualdades florais redundantes. As desigualdades florais que são obviamente redundantes podem
ser eliminadas da seguinte maneira. Escolha um nó qualquer r como referência e seja S 0 o conjunto
de todos os subconjuntos S de V r {r} tais que |S| é ímpar e |S| ≥ 3. Desenvolva essa ideia e corrija
suas imperfeições.
8.23 ? Truque prático. Pode ser interessante submeter o pl (6) a um software de programação linear.
Como S é muito grande, o seguinte truque prático pode ser útil: use apenas uma pequena parte
S 0 de S contendo os conjuntos S mais “promissores”; se isso não produzir o vetor característico de
um ep, acrescente a S 0 mais alguns elementos de S que pareçam promissores e repita o processo.
8.24 ? Encontre um ep mínimo no grafo da figura. Encontre também soluções ótimas dos pl’s (6) e (7).
(Dica: Veja o exercício 8.23.) [CCPS 5.27]
144 8.6. EXERCÍCIOS FEOFILOFF
8.25 Suponha que (y, Y ) é uma solução viável do pl (7). Para cada S em S e cada v ∈ S, faça yv ← yv +YS ;
depois, para cada S, faça YS ← 0. Essa operação preserva viabilidade de (y, Y )?
Seção 8.5
8.26 ? Use o algoritmo B LOSSOM para mostrar que um grafo G tem um ep se e somente se o pl (6) é
viável. (Sugestão: Se G não tem ep, mostre que o pl dual (7) é ilimitado.) [CCPS 5.28]
Capítulo 9
Este capítulo estuda o casco convexo (veja o apêndice D) dos emparelhamentos perfei-
tos de um grafo e o correspondente poliedro (veja o apêndice B).
Todos os grafos neste capítulo são não-dirigidos. Por isso, diremos apenas grafo,
deixando subentendido o adjetivo não-dirigido. Usaremos a abreviatura “ep” para a
expressão “emparelhamento perfeito”.
minimize cx
sob as restrições x(∂(v)) = 1 para cada v em V (1)
xe ≥ 0 para cada e em E,
É óbvio que o vetor característico de todo ep de G está em FPM (G). Mas em geral o
poliedro representa mal o conjunto de ep’s de G. Em primeiro lugar, FPM (G) pode
não ser vazio mesmo que G não tenha ep algum, como no caso de um grafo completo
com 3 nós, por exemplo. Em segundo lugar, se G tem um ep, o vetor característico x
de um ep mínimo pode não minimizar cx em FPM (G).
E XEMPLO 9.1: A figura define um grafo G com custos c nas arestas. A tabela mostra vetores x e
x0 do poliedro FPM (G). Também mostra uma solução viável y do dual (veja (2) no capítulo 8) do
pl (1).
145
146 9.1. O POLIEDRO DOS EP’S FRACIONÁRIOS FEOFILOFF
ab bc ca de ef f d be y
c 10 10 10 10 10 10 20 a 5
x 0.5 0.5 0.5 0.5 0.5 0.5 0 b 5
x0 0 0 1 0 0 1 1 c 5
d 5
e 5
f 5
O vetor x é solução ótima do pl (1) (as folgas de x e y são complementares) mas não representa
um ep. O vetor x0 representa um ep mínimo em G mas não é solução ótima do pl (observe que
cx0 > cx).
Lema 9.1 Para todo grafo bipartido G, um vetor x de FPM (G) é vértice se e somente
se x é binário.
Teorema 9.2 (Birkhoff) Para todo grafo bipartido, se o pl (1) é viável então tem uma
solução ótima que é binária.
P ROVA : Suponha que o pl (1) é viável, ou seja, que o poliedro FPM (G) não é vazio.
Como o poliedro é limitado, o corolário C.3 no apêndice C garante que, qualquer que
seja c, alguma solução ótima x do pl é vértice do poliedro. Pelo lema 9.1, x é binário.
FEOFILOFF POLIEDRO DOS EMPARELHAMENTOS PERFEITOS 147
Teorema 9.3 Para qualquer grafo G, um vetor x de FPM (G) é vértice se e somente se
x é meio-binário e cada componente conexa do grafo induzido G[E0.5 (x)] é um circuito
ímpar.
P ROVA DO “ SE ”: Seja x um vetor meio-binário em FPM (G) tal que cada componente
conexa do grafo induzido G[E0.5 (x)] é um circuito ímpar. Para mostrar que x é um
vértice de FPM (G), seja d um vetor em RE tal que x+d e x−d estão ambos em FPM (G).
É fácil verificar que de = 0 para toda aresta e em E0 (x) e toda aresta e em E1 (x).
A análise das arestas em E0.5 (x) é mais delicada. Seja (v0 , e1 , v1 , . . . , ek , v0 ) um circuito
ímpar cujas arestas estão todas em E0.5 (x). Suponha que de1 > 0. Como x(∂(v1 )) = 1
e x é meio-binário, temos necessariamente de2 = −de1 . Se continuarmos esse raciocício
ao longo do circuito, veremos que de1 < 0, uma vez que k é ímpar. Essa contradição
mostra que de = 0 para todo e em E0.5 (x). Concluímos assim que d = 0. Isso mostra
que x é um vértice de FPM (G).
P ROVA DO “ SOMENTE E ”: Construa um grafo G0 da seguinte maneira. Para cada nó v
de G, o grafo G0 tem dois nós, v 0 e v 00 . Para cada aresta e = vw de G, o grafo G0 tem
duas arestas: e0 := v 0 w00 e e00 := v 00 w0 . É claro que G0 é bipartido.
Seja x̄ um vértice de FPM (G). Conforme o corolário C.4 do apêndice C, existe um
vetor c de custos tal que x̄ é a única solução ótima do programa linear max{cx : x ∈
FPM (G)}. Seja c0 o vetor definido por c0e0 := c0e00 := ce para cada aresta e de G. Todos os
vértices de FPM (G0 ) são binários de acordo com o lema 9.1. Conforme o corolário C.3,
existe um vértice x0∗ de FPM (G0 ) que maximiza c0 x0 para x0 em FPM (G0 ). Seja x∗ o
vetor de FPM (G) definido por x∗e := 12 (x0∗ 0∗
e0 + xe00 ) para cada aresta e de G. É claro que x
∗
minimize cx
sujeito a x(∂(v)) = 1 para cada v em V
(2)
x(∂(S)) ≥ 1 para cada S em S
xe ≥ 0 para cada e em E,
E XEMPLO 9.2: Seja G grafo definido abaixo por sua matriz de adjacências. O grafo tem exatamente
três ep’s. As três primeiras linhas da tabela à direita representam os ep’s. Cada uma das demais
linhas representa um vetor de PM (G).
a b c d e f ad ae bd be bf ce cf
a − − − 1 1 − 1 0 0 1 0 0 1
b − − − 1 1 1 0 1 1 0 0 0 1
c − − − − 1 1 1 0 0 0 1 1 0
d 1 1 − − − − 0.3 0.7 0.7 0.2 0.1 0.1 0.9
e 1 1 1 − − − 0.15 0.85 0.85 0.1 0.05 0.05 0.95
f − 1 1 − − − 0.12 0.88 0.88 0.12 0.0 0.0 1.0
O poliedro PM (G) representa muito bem o conjunto dos ep’s de G. De fato, (1) PM (G)
é vazio se e somente se G não tem ep’s e (2) os vértices de PM (G) são os ep’s de G.
Essas afirmações decorrem do seguinte teorema de J. Edmonds [Edm] (1965):
A prova do teorema não é fácil e será omitida. O teorema justifica o algoritmo B LOS -
SOM mencionado no seção 8.5.
Podemos resumir assim o estudo do poliedro dos ep’s: para qualquer grafo G, o poli-
edro PM (G) é o casco convexo dos ep’s de G (veja o teorema D.3 do apêndice D). Em
particular, PM (G) é um politopo.
9.4 Exercícios
Seção 9.1
9.1 ? Complete os detalhes da prova do lema 9.1.
FEOFILOFF POLIEDRO DOS EMPARELHAMENTOS PERFEITOS 149
9.2 ? Teorema de Birkhoff versus fluxo de custo mínimo. Prove o teorema de Birkhoff 9.2 a partir do teo-
rema 4.4 do fluxo viável de custo mínimo (veja a seção 4.4).
9.3 ? Mostre que o enunciado do teorema de Birkhoff 9.2 também vale para alguns grafos não biparti-
dos. Isto é, mostre que existe um grafo não bipartido tal que, para todo vetor c com valores em R,
o valor ótimo do pl (1) é igual ao custo de um ep mínimo. [CCPS 5.23]
9.4 ? Suponha que um grafo bipartido G não satisfaz as condições de Tutte 6.3 do capítulo 6. Mostre
que o pl (1) não tem solução viável.
Seção 9.2
9.5 Mostre que FPM (G) não é vazio se e somente se existe um conjunto de arestas e circuitos ímpares
tal que todo nó de G pertence a exatamente um dos circuitos ou a exatamente uma das arestas, mas
não ambos. [CCPS 5.22]
9.6 Um conjunto emparelhável (= matchable set) em um grafo G é o conjunto dos nós cobertos por algum
emparelhamento de G. Seja S o conjunto de vetores característicos de conjuntos emparelháveis de
um grafo bipartido G := (V, E) com bipartição (P, Q). Considere as condições
onde N (C) é o conjunto de todos os nós em Q que são vizinhos de nós em C. Prove que se x ∈ cc(S)
então x safisfaz essas condições. [CCPS 6.5]
9.7 Dado um grafo G := (V, E) e um vetor y em RE , considere as seguintes condições:
No exercício 9.6, prove que x ∈ cc(S) se e somente se x ≤ 1 e existe y que satisfaz as condições
acima. [CCPS 6.6]
150 9.4. EXERCÍCIOS FEOFILOFF
Apêndice A
A.1 Números
Dizemos que um número r é positivo se r > 0 e negativo se r < 0. Portanto, a expressão
“estritamente positivo” tem o mesmo significado que “positivo” e “estritamente negativo” tem
o mesmo significado que “negativo”. Um número r é não-negativo se r ≥ 0 e não-positivo se
r ≤ 0.
Um número natural é qualquer elemento do conjunto N := {0, 1, 2, 3, 4, . . .}. Um número N
inteiro é qualquer elemento do conjunto Z := {. . . , −4, −3, −2, −1, 0, 1, 2, 3, 4, . . .}. O conjunto Z
dos inteiros não-negativos é denotado por Z+ . Portanto, Z+ = N. Z+
Um número racional é qualquer número da forma p/q, sendo p e q números inteiros e q 6= 0.
O conjunto dos números racionais é denotado por Q e o conjunto dos racionais não-negativos Q
por Q+ . Q+
√
O conjunto de todos os números racionais e todos os irracionais (como 2, π, lg 3, etc.) cons-
titui o conjunto dos números reais e é denotado por R. O conjunto dos reais não-negativos é R
denotado por R+ . Os números conhecidos como reais no mundo da computação — números R+
do tipo float e double — são todos racionais.
É claro que N ⊂ Z ⊂ Q ⊂ R. Computadores digitais conhecem apenas um subconjunto finito
de Q; em particular, desconhecem os números irracionais.
Para qualquer número real x, denotamos por bxc o único inteiro i tal que i ≤ x < i + 1.
Analogamente, denotamos por dxe o único inteiro j tal que j − 1 < x ≤ j.
151
152 A.2. VETORES FEOFILOFF
A.2 Vetores
Um vetor 1 indexado por um conjunto finito M é o mesmo que uma função que leva M em
algum conjunto de números. Um vetor x indexado por M pode ser indicado por
(xi : i ∈ M ).
Um vetor real indexado por M é uma função que leva M em R. Da mesma forma, um ve-
tor racional indexado por M é uma função que leva M em Q. O conjunto de tais funções é
QM tradicionalmente denotado por
QM .
Um vetor é não-negativo se todos as suas componentes são não-negativas. Um vetor é inteiro
se todos as suas componentes pertencem a Z. Um vetor é binário, ou booleano, se todas as
suas componentes pertencem a {0, 1}.
Se x é um vetor indexado por um conjunto M e K é um subconjunto de M , denotamos por xK
ou por x[K] a restrição de x a K. É claro que x[M ] = x.
O vetor característico de um subconjunto K de M é o vetor binário x indexado por M tal que
xi = 1 se i ∈ K e xi = 0 se i ∈ M r K. Reciprocamente, todo vetor binário x indexado por M
representa o subconjunto {i : xi = 1} de M .
O suporte de um vetor x é o conjunto de todos os índices j tais que x[j] 6= 0.
A.3 Matrizes
Considere o produto cartesiano M × N de dois conjuntos finitos M e N . Uma matriz indexada
por M × N é um função que leva M × N em algum conjunto de números. Uma matriz A
indexada por M × N pode ser indicada por (Ai,j : i ∈ M, j ∈ N ) ou por (A[i, j] : i ∈ M, j ∈ N ).
Uma matriz é real se todos as suas componentes pertencem a R. Uma matriz é racional se
todos as suas componentes pertencem a Q e inteira se todos as suas componentes pertencem
a Z. Uma matriz é binária, ou booleana, se todas as suas componentes pertencem a {0, 1}.
Se A é uma matriz indexada por M × N e i é um elemento de M , a linha i de A é o vetor
(Ai,j : j ∈ N ). Esse vetor pode ser denotado por Ai,N ou por A[i, N ].
Se j é um elemento de N , a coluna j de A é o vetor (Ai,j : i ∈ M ). Esse vetor pode ser denotado
por AM,j ou por A[M, j].
Podemos usar o símbolo “∗” para indicar o conjunto de todas as linhas e o conjunto de todas
[i, ∗] as colunas. Assim, A[i, ∗] := A[i, N ] e A[∗, j] := A[M, j].
[∗, j] A transposta de uma matriz A indexada por M ×N é a matriz B indexada por N ×M e definida
pela seguinte propriedade: B[j, i] = A[i, j] para cada j em N e cada i em M . A transposta de A
é denotada por AT .
Para qualquer conjunto finito N , a matriz identidade indexada por N × N é a matriz binária I
definida pelas seguintes propriedades: para cada (i, j) em N × N , se i = j então I[i, j] = 1 e se
i 6= j então I[i, j] = 0.
1
Não existem “vetores-linha” nem “vetores-coluna”. Um vetor é apenas um vetor, sem adjetivos.
Além disso, não é uma boa ideia supor que o conjunto de índices é necessariamente {1, 2, . . . , n} ou
{0, 1, 2, . . . , n − 1}.
FEOFILOFF CONJUNTOS, VETORES E MATRIZES 153
Para qualquer conjunto finito N , uma permutação dos elementos de N é uma sequência em
que cada elemento do conjunto aparece uma e uma só vez. Uma permutação de N é o mesmo
que uma bijeção, digamos p, de N em N . A matriz de permutação correspondente a p é a
matriz binária P indexada por N × N e definida pelas seguintes propriedades: para cada (j, i)
em N × N , se j = p(i) então P [j, i] = 1 e se j 6= p(i) então P [j, i] = 0.
Essa definição pode ser generalizada como segue. Para quaisquer conjuntos finitos M e N de
mesma cardinalidade e qualquer bijeção q de M em N , a matriz de bijeção correspondente a q
é a matriz binária Q indexada por N × M e definida pelas seguintes propriedades: para cada
(j, i) em N × M , se j = q(i) então Q[j, i] = 1 e se j 6= q(i) então Q[j, i] = 0.
A.4 Produtos
Para quaisquer vetores c e x indexados por um mesmo conjunto M , denotamos por c x a soma cx
de todos os números da forma ci xi com i em M : 2
P
cx := i∈M ci xi .
P
Esta soma também pode ser escrita assim: (ci xi : i ∈ M ). Se M = {1, 2, 3, 4}, por exemplo,
então cx = c1 x1 + c2 x2 + c3 x3 + c4 x4 .
Para qualquer matriz A indexada por M × N e qualquer vetor x indexado por N , denotamos
por Ax a soma de vetores P Ax
j∈N A[∗, j]x[j] .
O produto de um vetor por uma matriz não é comutativo: yA não é o mesmo que Ay (em geral,
um deles nem faz sentido).
Para qualquer vetor c indexado por um conjunto M e qualquer subconjunto K de M , denota-
mos por c(K) a soma de todos os ck com k em K: 4 c(K)
P
c(K) := k∈K ck .
P
Essa soma também pode ser escrita assim: (ck : k ∈ K). Se x é o vetor característico do
subconjunto K de M então c(K) = cx.
E XEMPLO A.1: A figura mostra três objetos: à esquerda, na vertical, um vetor y indexado por
1, . . . , 4; à direita, uma matriz A com linhas indexadas por 1, . . . , 4 e colunas indexadas por 1, . . . , 5;
abaixo da matriz, um vetor x indexado por 1, . . . , 5.
−2 11 12 13 14 15
1 21 22 23 24 25
0 31 32 33 34 35
2 41 42 43 44 45
1 0 0 −1 0
2
Muita gente escreve “cT x” no lugar do meu “cx”. Mas a transposição de um vetor não faz sentido,
uma vez que não existem “vetores-linha” nem “vetores-coluna”.
3
Muita gente escreve “AT y” no lugar do meu “yA”.
4
No jargão de linguagens de programação, essa notação é um overload do símbolo c.
154 A.5. ÁLGEBRA LINEAR FEOFILOFF
−3
−3
81 82 83 84 85
−3
−3
X ∩Y =∅ ou X ⊆ Y ou X⊇Y . (1)
Uma coleção laminar de subconjuntos de V tem no máximo 2|V | elementos e portanto é muito
menor que a coleção de todos os subconjuntos de V .
E XEMPLO A.2: A coleção {{a, b, c, d}, {a, b}, {c}, {e, f }, {f }} é laminar. Ela pode ser representada,
de maneira muito compacta, pela expressão ((a b) (c) d) (e (f )), em que cada elemento do “uni-
verso” {a, b, c, d, e, f } aparece no máximo uma vez.
A.7 Exercícios
Seção A.4
A.1 Seja A uma matriz em RM ×N e x um vetor em RN . Mostre que A[i, ∗]x = (Ax)[i] qualquer que seja
i em M .
6
A palavra “coleção” é sinônima de “conjunto”. Usaremos “coleção” para designar um conjunto de
conjuntos.
156 A.7. EXERCÍCIOS FEOFILOFF
Seção A.5
A.2 Mostre dois subconjuntos l.i. maximais do conjunto de linhas da matriz abaixo.
0 0 0 0
1 0 0 0
0 1 0 0
0 0 1 0
1 1 0 0
1 0 1 0
0 1 1 0
1 1 1 0
A.3 Prove o lema A.1.
A.4 Prove o lema A.2.
A.5 Veja a série de vídeos Essence of Linear Algebra em www.3blue1brown.com/.
Seção A.6
A.6 Seja M uma coleção de subconjuntos de um conjunto finito V . Mostre que M não é laminar se e
somente se existe um par (X, Y ) de elementos de M tal que X ∩ Y 6= ∅ e X 6⊆ Y e X ⊇
6 Y.
A.7 Seja V o conjunto {a, b, c, d}. Faça um diagrama de Venn de uma coleção laminar de subconjuntos
de V que tenha o maior número possível de elementos.
A.8 ? Cardinalidade de coleções laminares. Seja V um conjunto com n elementos e L um coleção laminar
de subconjuntos de V . Mostre que |L| ≤ 2n. Parte 2: Suponha que L não contém o conjunto vazio e
nenhum de seus elementos é uma mera união de outros elementos. Mostre que |L| ≤ n − 1.
Apêndice B
Poliedros
Ax ≤ b , (1)
sendo b um vetor real indexado por algum conjunto V e A uma matriz real indexada por V ×E.1
(Em geral, o mesmo poliedro pode ser representado por muitos pares (A, b) diferentes.) Os
exemplos abaixo mostram que essa definição é suficientemente flexível para acomodar restri-
ções aparentemente diferentes das especificadas em (1).
E XEMPLO B.1: Considere a matriz A e o vetor b representados abaixo, com o vetor b na vertical à
direita da matriz A.
11 12 13 14 15 16
21 22 23 24 25 26
31 32 33 34 35 36
41 42 43 44 45 46
O poliedro {x : Ax ≤ b} é o conjunto de todos os vetores (x1 , x2 , x3 , x4 , x5 ) que satisfazem o sistema
de desigualdades:
E XEMPLO B.2: O conjunto de todos os vetores (x1 , x2 ) que satisfazem o sistema de desigualdades
abaixo é um poliedro. (Todos os coeficientes são inteiros, mas isso é irrelevante.)
1
Poderíamos nos restringir aos vetores e matrizes racionais, uma vez que computadores digitais
desconhecem números irracionais.
157
158 B.2. VÉRTICES DE POLIEDROS FEOFILOFF
1x1 + 3x2 ≤ 18
1x1 + 0x2 ≤ 6
1x1 − 2x2 ≤ 2
−1x1 − 1x2 ≤ −5
−2x1 + 1x2 ≤ −1
E XEMPLO B.3: As figuras abaixo sugerem dois poliedros em RE com E = {1, 2, 3}.
E XEMPLO B.4: Seja P o conjunto de todos os vetores (x1 , x2 , x3 ) que satisfazem o sistema de de-
sigualdades abaixo e à esquerda. Esse sistema é equivalente ao que está no centro. O sistema no
centro tem a forma especificada na definição (1). Portanto, P é um poliedro. Em notação matricial,
o poliedro é definido por Ax ≤ b, sendo A e b a matriz e o vetor à direita.
x1 ≥ 1 −x1 ≤ −1 −1 0 0 −1
x2 ≥ 2 −x2 ≤ −2 0 −1 0 −2
x1 + x2 ≤ 5 x1 + x2 ≤ 5 1 1 0 5
x1 + 2x2 ≥ 0 −x1 − 2x2 ≤ 0 −1 −2 0 0
x1 + x2 + x3 ≤ 9 x1 + x2 + x3 ≤ 9 1 1 1 9
x3 = 3 x3 ≤ 3 0 0 1 3
−x3 ≤ −3 0 0 −1 −3
As restrições que definem um poliedro não precisam ser independentes entre si. Nesse exemplo, a
quarta e a quinta desigualdades do sistema à esquerda são redundantes: o poliedro não se altera se
essas desigualdades forem apagadas.
E XEMPLO B.5: Seja A uma matriz indexada por V × E e c um vetor indexado por E. O conjunto
de todos os vetores y que satisfazem as restrições yA ≤ c é igual ao conjunto {y : AT y ≤ c}, onde
AT a matriz transposta de A. Como o último conjunto tem a forma especificada na definição (1),
{y : yA ≤ c} é um poliedro.
E XEMPLO B.6: Considere o conjunto de todos os vetores (x1 , x2 ) que satisfazem as desigualdades a
seguir. (Faça uma figura.)
FEOFILOFF POLIEDROS 159
x1 + x2 ≤ 2
−x1 + x2 ≤ 0
O vetor (+1, +1) é um vértice nesse conjunto.
E XEMPLO B.7: Considere o conjunto de todos os vetores (x1 , x2 ) que satisfazem as restrições a
seguir.
x1 + x2 ≤ 3
x1 − x2 ≥ 0
x2 ≥ 0
Os vértices desse conjunto são (0, 0), ( 23 , 23 ) e (3, 0). (Faça uma figura.)
E XEMPLO B.8: Para a matriz A e o vetor b definidos abaixo, considere o poliedro {x : Ax ≤ b}.
1 2 4 8
A 1 2 5 b 9
1 2 6 10
x 3 2 0
d 1 −1 0
E XEMPLO B.9: Nem todo poliedro tem vértices. Considere o poliedro P := {x : Ax ≤ b}, com A e b
dados a seguir. (Faça uma figura.)
A +1 +1 b 2
d +1 −1
E XEMPLO B.10: Seja P o poliedro definido pelas desigualdades Ax ≤ b. Seja x̂ um vetor de P tal
que Ax̂ = b. Suponha que x̂ não é vértice de P . Então existe um vetor não nulo d tal que A(x̂+d) ≤ b
e A(x̂ − d) ≤ b. Segue daí que
Ad = 0
e portanto o conjunto das colunas de A é linearmente dependente (veja a seção A.5).
Lema B.1 (caracterização dos vértices) Seja A uma matriz indexada por V × E e b um vetor
indexado por V . Seja x um vetor do poliedro P := {x : Ax ≤ b} e I(x) o conjunto de todos os
índices i em V tais que
A[i, ∗]x = b[i].
O vetor x é vértice de P se e somente se o conjunto das colunas da matriz A[I(x), ∗] é linear-
mente independente.
P ROVA DO “ SE ”: Suponha que x não é vértice do poliedro. Então existe um vetor não nulo d
tal que Ax + Ad ≤ b e Ax − Ad ≤ b. Para cada i em I(x), temos
uma vez que A[i, ∗]x = b[i]. Portanto, A[i, ∗]d = 0 para cada i. Logo, o conjunto das colunas de
A é l.d.. Em particular, o conjunto das colunas de A[I(x), ∗] é l.d..
160 B.2. VÉRTICES DE POLIEDROS FEOFILOFF
P ROVA DO “ SOMENTE SE ”: Suponha que o conjunto das colunas de A[I(x), ∗] é l.d.. Então
existe um vetor não nulo d indexado por E tal que A[I(x), ∗]d = 0. Logo,
Por outro lado, A[h, ∗]x < b[h] para cada h em V r I(x). Logo, para algum número positivo ε
suficientemente pequeno temos
O lema poderia ser enunciado assim: x é vértice do poliedro se e somente se o posto da matriz
A[I(x), E] é |E|. Em outras palavras, x é vértice se e somente se o posto de colunas da matriz
A[I(x), E] é “pleno”, e assim x é a única solução do sistema de equações A[I(x), E]x = b[I(x)].
E XEMPLO B.11: O lado esquerdo da figura abaixo mostra uma matriz A, um vetor b (à direita da
matriz), e um vetor x̂ (abaixo da matriz). Seja I(x̂) o conjunto das 6 primeiras linhas de A. Então
A[i, ∗]x̂ = b[i] se e somente se i ∈ I(x̂). Observe que o conjunto das colunas de A[I(x̂), ∗] é l.i..
(Portanto, o conjunto das colunas de A também é l.i..) O vetor x̂ é vértice do poliedro Ax ≤ b.
1 0 0 0 2 1 0 0 0 3
0 1 0 0 3 0 1 0 0 4
0 0 1 0 4 0 0 1 0 5
0 0 0 1 5 0 0 0 1 6
1 1 0 0 5 3 1 0 0 9
3 3 3 3 42 3 1 0 1 14
0 0 2 0 10 3 1 1 0 13
0 0 0 4 30 3 1 1 1 18
2 3 4 5 2 3 4 5
Agora considere os objetos A, b e x̂ do lado direito da figura. Seja I(x̂) o conjunto das 4 últimas
linhas de A. Então A[i, ∗]x̂ = b[i] se e somente se i ∈ I(x̂). Embora o conjunto das colunas de A seja
l.i., o conjunto das colunas de A[I(x̂), ∗] é l.d.. Portanto, o vetor x̂ não é vértice do poliedro Ax ≤ b.
E XEMPLO B.12: Considere novamente o poliedro P do exemplo B.4. Veja abaixo, mais uma vez,
o sistema de desigualdades que define P . O subsistema formado pela primeira, segunda e sexta
desigualdades (veja a segunda coluna da figura) é satisfeito com igualdade pelo vetor (1, 2, 3) e por
nenhum outro. Esse vetor pertence a P e portanto é um vértice de P .
x1 ≥ 1 x1 = 1 x1 = 1
x2 ≥ 2 x2 = 2
x1 + x2 ≤ 5 x1 + x2 = 5
x1 + 2x2 ≥ 0
x1 + x2 + x3 ≤ 9
x3 = 3 x3 = 3 x3 = 3
O subsistema formado pela primeira, terceira e sexta desigualdades (veja a terceira coluna da
figura) é satisfeito com igualdade apenas por (1, 4, 3). Esse vetor pertence a P e portanto é um
vértice de P . Analogamente, o subsistema formado pela segunda, terceira e sexta desigualdades
define o vértice (3, 2, 3). Esses são os três únicos vértices de P .
Agora veja alguns subsistemas que não definem vértices. O subsistema formado pela primeira,
quarta, e sexta desigualdades é satisfeito com igualdade apenas pelo vetor (1, − 21 , 3), mas esse vetor
não pertence a P . O subsistema formado pela primeira, segunda, terceira e sexta desigualdades
não é satisfeito com igualdade por nenhum vetor. O subsistema formado pela primeira e segunda
desigualdades é satisfeito com igualdade por mais de um vetor.
FEOFILOFF POLIEDROS 161
E XEMPLO B.13: Considere o conjunto de todos os vetores (x1 , x2 ) que satisfazem as desigualdades
abaixo. (Faça uma figura.) Esse poliedro é ilimitado.
x1 − x2 ≤ 4
x1 − x2 ≥ 2
E XEMPLO B.14: Considere novamente o poliedro do exemplo B.4. Trata-se do conjunto de todos os
vetores (x1 , x2 , x3 ) que satisfazem o sistema de desigualdades abaixo. Esse poliedro é limitado pois
0 ≤ xi ≤ 5 para todo i. (Verifique!)
x1 ≥ 1
x2 ≥ 2
x1 + x2 ≤ 5
x1 + 2x2 ≥ 0
x1 + x2 + x3 ≤ 9
x3 = 3
Lema B.4 Todo poliedro limitado não vazio tem pelo menos um vértice.
A recíproca do lema não é verdadeira: muitos poliedros ilimitados têm vértices. Por exemplo,
o vetor 0 é vértice do poliedro definido pelas desigualdades x ≥ 0.
B.4 Exercícios
Seção B.1
B.1 Mostre que o conjunto de todos os vetores x que satisfazem as restrições Ax ≥ b é um poliedro.
B.2 Mostre que o conjunto de todos os vetores x que satisfazem as restrições Ax = b é um poliedro.
B.3 Mostre que o conjunto de todos os vetores x que satisfazem as restrições Ax ≤ b e x ≥ 0 é um
poliedro.
Seção B.2
B.4 Complete os detalhes da prova do lema B.1.
B.5 Prove o corolário B.2.
B.6 Prove o corolário B.3.
B.7 ? Seja Q o poliedro {y : yA ≤ c}, onde A é uma matriz indexada por V × E e c um vetor indexado
por E. Seja y um vetor de Q e considere o conjunto de índices J(y) = {j ∈ E : yA[∗, j] = c[j]}.
Mostre que y é vértice de Q se e somente se o conjunto das linhas da matriz A[∗, J(y)] é l.i..
B.8 ? Seja P o poliedro {x : Ax ≤ b e x ≥ 0}, onde A é uma matriz indexada por V × E e b um
vetor indexado por V . Seja x um vetor de P e considere os conjuntos de índices I(x) = {i ∈ V :
A[i, ∗]x = b[i]} e J(x) = {j ∈ E : x[j] = 0}. Mostre que x é vértice de P se e somente se o conjunto
das colunas da matriz A[I(x), E r J(x)] é l.i..
B.9 ? Seja P o poliedro {x : Ax = b e x ≥ 0}, onde A é uma matriz indexada por V × E e b um vetor
indexado por V . Seja x um vetor de P e considere o conjunto de índices J(x) = {j ∈ E : x[j] = 0}.
Mostre que x é vértice de P se e somente se o conjunto das colunas da matriz A[V, E r J(x)] é l.i..
Seção B.3
B.10 Prove o lema B.4.
B.11 Seja P um poliedro não necessariamente limitado. Suponha que x ≥ 0 para todo x em P . Mostre
que P tem um vértice. [CCPS 6.3]
Apêndice C
Programação linear
Formular problemas de otimização combinatória como programas lineares é muito útil e re-
velador. Este apêndice faz uma rápida revisão dos conceitos e da terminologia básica da
programação linear.
maximize cx
(1)
sob as restrições Ax ≤ b .
A expressão “maximize cx” deve ser entendida assim: procuramos x tal que cx ≥ cx0 para todo
x0 que satisfaça as restrições Ax0 ≤ b. Cada desigualdade A[v, ∗] x ≤ b[v] é uma restrição do
problema. O número cx é o valor de x. O máximo de cx é o valor ótimo do problema.
É usual supor que a matriz A e os vetores b e c são reais, mas poderíamos nos restringir
às matrizes e vetores racionais, uma vez que computadores digitais desconhecem números
irracionais.
163
164 C.1. PROGRAMAS LINEARES FEOFILOFF
(Todos os coeficientes nesse exemplo são inteiros positivos, mas isso é mero acidente.)
O problema de programação linear é muitas vezes chamado de programa linear (= linear pro-
pl gram). Usamos a expressão “pl” como abreviatura de “programa linear”.
O pl dado na definição (1) pode ser escrito assim: encontrar um vetor x indexado por E que
P
maximize c[e] x[e]
P e∈E
sujeito a e∈E A[v, e] x[e] ≤ b[v] para todo v em V .
E XEMPLO C.4: Considere o problema de encontrar um vetor y que maximize yb sob as restrições
yA ≤ c. Esse problema pode ser reescrito assim: maximize by sujeito a AT y ≤ c. Assim, o problema
dado satisfaz a definição (1) de pl.
contrário, dizemos que o pl é viável (= feasible). Se P não é vazio mas cx não tem máximo,
dizemos que o pl é ilimitado (= unbounded).
Suponha agora que o pl (1) não é inviável nem ilimitado. Então, como veremos adiante, o pl
tem uma solução ótima.
E XEMPLO C.6: Considere os dois pl’s abaixo. O primeiro é inviável e o segundo é ilimitado.
maximize x1 + x2 maximize x2
sob as restrições x1 + x2 ≤ 2 sob as restrições x1 + x2 ≤ 3
x1 + x2 ≥ 3 x1 + x2 ≥ 2
maximize cx
(2)
sujeito a Ax ≤ b .
minimize yb
sujeito a yA = c e (3)
y ≥ 0.
A relação básica entre os pl’s (2) e (3) é conhecida como teorema fraco da dualidade. Ela dá
uma delimitação superior para a expressão que queremos maximizar e, ao mesmo tempo, uma
delimitação inferior para a expressão que queremos minimizar:
Lema C.1 (teorema fraco da dualidade) Para qualquer solução viável x do programa pri-
mal (2) e qualquer solução viável y do programa dual (3) tem-se cx ≤ yb.
Teorema C.2 (von Neumann) Se os programas lineares (2) e (3) são viáveis então existe uma
solução viável x do primeiro e uma solução viável y do segundo tais que cx = yb. Se um dos
programas lineares é inviável então o outro é inviável ou ilimitado.
166 C.3. FOLGAS COMPLEMENTARES FEOFILOFF
A prova do teorema é algorítmica: o algoritmo Simplex (veja a seção C.4 abaixo) recebe A, b e c,
decide se os dois pl’s são viáveis e, em caso afirmativo, devolve x e y tais que cx = yb.
Corolário C.3 Se o poliedro {x : Ax ≤ b} do programa linear (2) não é vazio nem ilimitado
então o programa tem uma solução ótima que é vértice do poliedro.
E XEMPLO C.7: Considere o seguinte par dual de pl’s. Verifique que ambos são inviáveis.
E XEMPLO C.8: Considere o seguinte par dual de pl’s. Verifique que o primeiro é inviável e o
segundo é ilimitado.
E XEMPLO C.9: Considere o seguinte par dual de pl’s. Verifique que o primeiro é ilimitado e o
segundo é inviável.
E XEMPLO C.10: Considere o seguinte par dual de pl’s. Verifique que ambos são viáveis. (Mostre
uma solução ótima de cada um.)
Se x é justo sempre que y é folgado (ou, equivalentemente, y é justo sempre que x é folgado),
dizemos que as folgas de x e y são complementares (= complementary slackness). No caso dos
pl’s (2) e (3), as folgas de x e y são complementares se, para cada índice i,
(O “ou” não é exclusivo, pois podemos ter (Ax)[i] = b[i] e y[i] = 0 para alguns valores de i.)
O seguinte lema é consequência imediata de (4):
Lema C.5 (das folgas complmentares) Para qualquer x viável no pl (2) e qualquer y viável no
pl (3), a igualdade cx = yb vale se e somente se as folgas de x e y são complementares.
A recíproca desse lema é conhecida como lema de Farkas [Far] e decorre do teorema forte da
dualidade C.2:
Lema C.7 (Farkas) Se o programa linear (2) é inviável então existe um vetor de inviabilidade
para (2).
Resultados análogos valem para o pl dual. Um vetor de inviabilidade para o pl (3) é qualquer
vetor x0 indexado por E tal que
Ax0 ≤ 0 e cx0 > 0. (7)
Um tal vetor é um certificado da inviabilidade do pl (3) por razões análogas à do lema C.6. Vale
também a versão apropriada do lema de Farkas C.7.
maximize cz
(8)
sob as restrições Az ≤ b .
C.7 Exercícios
Seção C.1
C.1 Seja A a matriz representada abaixo, b o vetor representado à direita de A e c o vetor representado
abaixo de A. Escreva por extenso o seguinte pl: minimize cx sujeito às restrições Ax ≤ b.
−1 0 +1 −1 0 +2
0 −1 0 0 0 −2
+1 +1 0 0 −1 0
0 0 −1 +1 +1 0
1 1 1 1 1
C.2 Considere o problema de maximizar cx sob as restrições Ax = b. Mostre que esse problema satisfaz
a definição (1) de programa linear.
C.3 Considere o pl que consiste em maximizar cx sujeito a Ax ≤ b, sendo A é uma matriz indexada por
V × E, b um vetor indexado por V e c um vetor indexado por E. Suponha que s é uma solução
ótima do pl e s[V r J] = 0, sendo J um subconjunto de E. Mostre que s[J] é solução ótima do pl
Seção C.2
C.4 Considere o problema de encontrar x que maximize cx sob as restrições Ax = b e x ≥ 0. Enuncie o
pl dual. Verifique o teorema fraco da dualidade para esse par de pl’s. Enuncie o teorema forte da
dualidade para esse par de pl’s.
C.5 Considere o problema de encontrar x que maximize x1 + 2x2 + 3x3 sob as restrições x1 ≥ 0, x2 ≥ 0,
x3 ≥ 0,
x1 + x2 + x3 = −10 e
x1 + 4x3 = −20 .
Qual o dual desse pl? O dual é viável? inviável? ilimitado?
C.6 Considere o seguinte pl: encontrar x que maximize cx sob as restrições Ax ≤ b e x ≥ 0. Mostre que
o dual desse pl pede um vetor y que minimize yb sob as restrições yA ≥ c e y ≥ 0.
C.7 Prove o corolário C.3.
C.8 Prove o corolário C.4.
C.9 Sejam L, M , N , O, P , Q conjuntos finitos disjuntos entre si. Sejam A, B, C, D, E, F , G, H, K
matrizes reais indexadas por
L × O, L × P, L × Q,
M × O, M × P, M × Q,
N × O, N × P, N × Q,
respectivamente. Sejam a, b, c vetores reais indexados por L, M e N , respectivamente. Sejam d, e,
f vetores reais indexados por O, P e Q, respectivamente. Seja X o conjunto de todos os vetores
reais (x, y, z) que satisfazem as restrições abaixo à esquerda e Y o conjunto de todos os vetores reais
(u, v, w) que satisfazem as restrições abaixo à direita.
Ax + By + Cz ≤ a uA + vD + wG ≥ d
Dx + Ey + F z = b uB + vE + wH = e
Gx + Hy + Kz ≥ c uC + vF + wK ≤ f
x≥0 u≥0
z≤0 w≤0
Seção C.3
C.10 ? Dados números não-negativos a1 , a2 , . . . , am e b1 , b2 , . . . , bm , suponha que a1 b1 + a2 b2 + · · ·
+ am bm = 0. É verdade que a1 = · · · = am = 0 ou b1 = · · · = bm = 0? Mostre que, para
cada i, ai = 0 ou bi = 0.
C.11 ? Folgas complementares. Sejam a, b e c vetores indexados por um conjunto E. Suponha que a ≥ 0 e
b ≤ c. Prove que ab = ac se e somente se, para cada e em E, tem-se ae = 0 ou be = ce .
C.12 Prove o lema C.5. (Veja a prova do lema fraco da dualidade C.1 e o exercício C.10).
C.13 Considere o seguinte pl: minimizar cx sob as restrições Ax = b e x ≥ 0. Enuncie as condições de
folgas complementares.
C.14 Considere o seguinte pl: maximizar cx sob as restrições Ax = b e x ≥ 0. Enuncie o pl dual. Enuncie
as condições de folgas complementares para o par de pl’s.
C.15 Considere o seguinte pl: maximizar cx sujeito às restrições Ax ≤ b e x ≥ 0. Enuncie o pl dual. Prove
o teorema fraco da dualidade para esse par de pl’s. Enuncie as condições de folgas complementares.
Enuncie o teorema forte da dualidade.
170 C.7. EXERCÍCIOS FEOFILOFF
Seção C.5
C.17 Mostre que um vetor de inviabilidade para o pl (2) poderia ter sido definido pelas condições
y 0 A = 0, y 0 ≤ 0 e y 0 b > 0.
C.18 ? Qual a definição apropriada de vetor de inviabilidade para o seguinte pl: encontrar um vetor x
que minimize cx sob as restrições Ax = b, 1x = 1 e x ≥ 0? (Aqui, o segundo “1” é o número 1
e o primeiro “1” representa um vetor cujos elementos são todos iguais a 1 e cujos índices são os
mesmos de x.)
C.19 Mostre vetores de inviabilidade para os exemplos C.7 a C.9.
C.20 Considere o problema de encontrar x ≥ 0 que maximize x1 + 2x2 + 3x3 sob as restrições abaixo.
Mostre que o pl é inviável e calcule um vetor de inviabilidade.
x1 + x2 + x3 = −10
x1 + 4x3 = −20
C.21 Suponha dado um vetor de inviabilidade para o pl (2). Mostre que o pl dual (3) é inviável ou
ilimitado.
C.22 Suponha dado um vetor de inviabilidade para o pl (3). Mostre que o pl dual (2) é inviável ou
ilimitado.
C.23 Deduza o lema de Farkas C.7 do teorema forte da dualidade C.2.
Apêndice D
Politopos
cc(S).
171
172 D.2. HIPERPLANOS SEPARADORES FEOFILOFF
P ROVA : É claro que max (cs : s ∈ S) ≤ max (cx : x ∈ cc(S)) uma vez que S ⊆ cc(S). Resta
mostrar a desigualdade contrária. Suponha, por exemplo, que S = {s, s0 } e ajuste a notação de
modo que cs ≤ cs0 . Todo elemento de cc(S) tem a forma λs + λ0 s0 , sendo λ e λ0 números reais
no intervalo fechado [0, 1] tais que λ + λ0 = 1. Portanto
Uma generalização desse argumento mostra que max (cx : x ∈ cc(S)) ≤ max (cs : s ∈ S) para
qualquer S.
Lema D.2 (da separação) Para qualquer subconjunto finito S de RE e qualquer vetor v em RE ,
se v ∈
/ cc(S) então existe um vetor h e um número l tais que h v > l e h x ≤ l para todo x
em cc(S).
P ROVA : Seja M uma matriz cujas linhas são os elementos de S. Em outras palavras, M é a
matriz indexada por S × E tal que M [s, E] = s para cada s em S. Toda combinação convexa
das linhas de M tem a forma gM , sendo g é um vetor indexado por S tal que
g≥0 e g1 = 1 .
minimize g0
sob as restrições gM = v
(1)
g1 = 1
g≥0
FEOFILOFF POLITOPOS 173
é inviável. Este pl tem essencialmente a mesma forma que o pl (3) do apêndice C. Para tornar
isso mais evidente, vamos introduzir um pouco de notação adicional. Seja e0 algum índice que
não pertence a E; seja E 0 = E ∪ {e0 }; seja M 0 a matriz indexada por S × E 0 e definida pelas
propriedades M 0 [S, E] = M e M 0 [S, e0 ] = 1; e seja v 0 o vetor indexado por E 0 e definido pelas
propriedades v 0 [E] = v e v 0 [e0 ] = 1. O pl
minimize g0
sob as restrições gM 0 = v 0 (2)
g≥0
é equivalente ao pl (1) e portanto inviável. Assim, a versão apropriada do lema de Farkas C.7
no apêndice C garante que existe um vetor de inviabilidade para (2). (Veja o exercício C.18 no
apêndice C.) Trata-se de um vetor h0 tal que
M 0 h0 ≤ 0 e v 0 h0 > 0.
Se denotarmos por h o vetor h0 [E] e por l o número −h0 [e0 ], teremos sh − l ≤ 0 e vh − l > 0 para
cada linha s de M . Em outras palavras,
sh ≤ l e vh > l.
A conclusão desse lema pode ser verbalizada assim: o hiperplano hs = l separa v do casco
convexo de S.
E SBOÇO DA PROVA : Seja P o poliedro definido por uma matriz A e um vetor b, isto é, P = {x :
Ax ≤ b}. Suponha que P é limitado. Se P é vazio então P = cc(∅). Suponha agora que P não
é vazio e seja S o conjunto dos vértices de P . De acordo com o lema B.4 no apêndice B, S não é
vazio. De acordo com o corolário B.3, S é finito.
Para todo x em cc(S), temos Ax ≤ b. Reciprocamente, de acordo com o lema da separação D.2,
todo vetor x que satisfaz as restrições Ax ≤ b está em cc(S). Portanto P = cc(S).
174 D.4. EXERCÍCIOS FEOFILOFF
E XEMPLO D.2: O conjunto de todos os vetores (x1 , x2 ) que satisfazem o sistema de desigualda-
des abaixo é um poliedro limitado. A figura mostra o poliedro e a combinação convexa dos seus
vértices. [CCPS fig.6.2]
1x1 + 3x2 ≤ 18
1x1 + 0x2 ≤ 6
1x1 − 2x2 ≤ 2
−1x1 − 1x2 ≤ −5
−2x1 + 1x2 ≤ −1
D.4 Exercícios
Seção D.1
D.1 ? Vértices versus combinações convexas. Seja Q um subconjunto convexo de RE . Mostre que um vetor
v é vértice de Q se e somente se v não é combinação convexa de dois vetores em Q r {v}.
D.2 ? Vértices de cascos convexos. Seja S um subconjunto finito de RE . Mostre que todo vértice de cc(S)
é um elemento de S. A recíproca é verdadeira?
D.3 ? Mostre que todo politopo é um conjunto convexo.
D.4 ? Mostre que todo poliedro é um conjunto convexo.
D.5 Complete a prova do lema D.1.
D.6 Mostre que o lema D.1 vale com “min” no lugar de “max”.
Seção D.3
D.7 Prove os teoremas D.3 e D.4.
Apêndice E
Grafos não-dirigidos
Muitos problemas de otimização combinatória são formuladas sobre grafos. Este apêndice faz
uma rápida revisão dos conceitos e da terminologia da teoria dos grafos não-dirigidos.
Um grafo não-dirigido é um tipo especial de grafo dirigido. Assim, poderíamos nos contentar
com o resumo sobre grafos dirigidos que faremos no apêndice F. Mas é mais prático tratar dos
grafos não-dirigidos em separado.
175
176 E.2. CAMINHOS E CICLOS FEOFILOFF
Para qualquer nó v de G, denotamos por G − v o subgrafo induzido por V (G) r {v}. Para
qualquer aresta e, denotamos por G − e o subgrafo que tem conjunto de nós V (G) e conjunto
de arestas E(G) r {e}.
Para qualquer par (v, w) de nós, denotamos por G + vw o grafo que tem conjunto de nós V (G)
e conjunto de arestas E(G) ∪ {vw}.
Um grafo G é bipartido se existe uma bipartição,2 digamos {P, Q}, de V (G) tal que toda aresta
tem uma ponta em P e outra em Q. Se todo par pq com p ∈ P e q ∈ Q é uma aresta, dizemos
que o grafo é bipartido completo.
Conexão. Um grafo não-dirigido é conexo se, para cada par (r, s) de seus nós, existe um
caminho de r a s (e portanto também um caminho de s a r). A distância de r a s é o mínimo
dos comprimentos de todos os caminhos de r a s.
Uma componente conexa de um grafo não-dirigido G é um subgrafo não-dirigido conexo
maximal3 de G.
2
Uma bipartição de um conjunto S é um par {P, Q} de subconjuntos de S tal que P ∪ Q = S e
P ∩ Q = ∅. A expressão “P é uma das partições” está errada; diga “P é um dos blocos da partição”.
3
Dada uma coleção P de conjuntos, um elemento X de P é maximal se nenhum superconjunto
próprio de X pertence a P. Em outras palavras, X é maximal se não existe Y em P tal que Y ⊃ X.
A propósito, um elemento X de P é máximo se não existe Y em P tal que |Y | > |X|.
FEOFILOFF GRAFOS NÃO-DIRIGIDOS 177
Lema E.1 (folclore) Se todos os nós de um grafo não-dirigido têm grau maior que 1 então o
grafo tem um ciclo.
Lema E.2 (folclore) Um grafo não-dirigido é bipartido se e somente se não tem ciclos de com-
primento ímpar.
Lema E.3 Toda floresta com uma ou mais arestas tem pelo menos duas folhas.
E.4 Cortes
Dado um grafo não-dirigido (V, E) e um subconjunto R de V , denotamos por R o conjunto R
V r R. O conjunto de todas as arestas que têm uma ponta em R e outra em R é denotado por ∂
∂(R) .
Um corte (= cut) em um grafo não-dirigido (V, E) é o conjunto de todos os arestas que têm uma
ponta em um conjunto de nós e a outra ponta fora do conjunto. Em outras palavras, um corte
é qualquer conjunto da forma ∂(R), com R ⊆ V . O conjunto R é uma margem do corte.
A matriz de incidências do grafo G tem linhas indexadas por V (G) e colunas indexadas
por E(G). A coluna que corresponde a um aresta vw tem um 1 nas posições v e w e tem 0
nas demais posições. Portanto, a linha v da matriz tem um 1 nas colunas correspondentes às
arestas que têm ponta v e tem 0 nas demais colunas.
E XEMPLO E.1: O grafo não-dirigido que tem nós u v w z e arestas uw vw zu uz zw tem a seguinte
matriz de incidências (com “−” representando “0”):
uw vw zu uz zw
u 1 − 1 1 −
v − 1 − − −
w 1 1 − − 1
z − − 1 1 1
Lema E.4 (circuitos e dependência linear) Seja A a matriz de incidências de um grafo não-
dirigido (V, E). Se o conjunto das colunas de A é linearmente dependente então G tem um
circuito.
Lema E.5 (circuitos e dependência linear em grafos bipartidos) Seja A a matriz de incidên-
cias de um grafo não-dirigido bipartido (V, E). Se G tem um circuito então o conjunto das
colunas de A é linearmente dependente.
Esse lema pode ser informalmente resumido assim: num grafo bipartido, um conjunto de
arestas linearmente independentes é o mesmo que uma floresta. Em grafos não-dirigidos
arbitrários, um lema análogo vale se as combinações lineares forem feitas em GF (2), ou seja, se
os coeficientes forem binários e a aritmética for binária (0 + 0 = 0, 0 + 1 = 1 + 0 = 1, 1 + 1 = 1,
0 · 0 = 0 · 1 = 0, 1 · 0 = 0 e 1 · 1 = 1).
E.6 Exercícios
Seção E.3
E.1 ? Prove o lema E.1.
E.2 Prove o lema E.2.
E.3 Prove o lema E.3.
Seção E.5
E.4 Prove o lema E.4.
E.5 Prove o lema E.5.
E.6 Mostre que o enunciado do lema E.5 é falso se retirarmos o adjetivo bipartido.
E.7 ? Florestas e independência linear em grafos bipartidos. Seja A a matriz de incidências de um grafo não-
dirigido bipartido (V, E) e F um subconjunto de E. Mostre que o conjunto das colunas da matriz
A[V, F ] é linearmente independente se e somente se o grafo (V, F ) é uma floresta.
Apêndice F
Grafos dirigidos
Muitos problemas de otimização combinatória são formuladas sobre grafos. Este apêndice faz
uma rápida revisão dos conceitos e da terminologia da teoria dos grafos dirigidos.
179
180 F.2. CAMINHOS E CICLOS FEOFILOFF
Um subgrafo de um grafo dirigido D é qualquer grafo dirigido D0 tal que V (D0 ) ⊆ V (D) e
E(D0 ) ⊆ E(D). Se V (D0 ) = V (D), dizemos que D0 é um subgrafo gerador (= spanning). Dado
um subconjunto V 0 de V (D), se E 0 é o conjunto de todos os arcos de D que têm ambas as pontas
em V 0 , dizemos que o subgrafo (V 0 , E 0 ) é induzido por V 0 . Esse grafo é denotado por G[V 0 ].
Dado um subconjunto E 0 de E(D), se V 0 é o conjunto de todos os nós de D que são ponta de
arco de E 0 , dizemos que subgrafo (V 0 , E 0 ) é induzido por E 0 .
Para qualquer nó v de D, denotamos por D − v o subgrafo induzido por V (D) r {v}. Para
qualquer arco e, denotamos por D − e o subgrafo que tem conjunto de nós V (D) e conjunto de
arcos E(D) r {e}.
Para qualquer par (v, w) de nós, denotamos por D + vw o grafo dirigido que tem conjunto de
nós V (D) e conjunto de arcos E(D) ∪ {vw}.
Um grafo dirigido D é bipartido se existe uma bipartição, digamos {P, Q}, de V (D) tal que
todo arco tem ponta inicial em P e ponta final em Q.
O grafo não-dirigido subjacente a (= underlying) um grafo dirigido D é o grafo não-dirigido G
tal que V (G) = V (D) e vw ∈ E(G) se e somente se vw ∈ E(D) ou wv ∈ E(D). Em termos
informais, G é o grafo não-dirigido que se obtém quando ignoramos as orientações de todos os
arcos de D.
Uma orientação (= orientation) de um grafo não-dirigido G é qualquer grafo dirigido D que
satisfaz as seguintes condições: V (D) = V (G) e, para cada aresta vw de G, um e apenas um
dos pares ordenado vw e wv é arco de D. Em termos informais, D é o grafo dirigido que se
obtém quando adotamos uma das duas possíveis orientações de cada aresta de G. É claro que
orientações de grafos não-dirigidos não têm arcos antiparalelos.
simples de r a s.
Dados caminhos (v0 , e1 , . . . , vp ) e (w0 , f1 , . . . , wq ), se o término do primeiro é igual à origem
do segundo, então os dois caminhos podem ser concatenados. O resultado da concatenação
é o caminho (v0 , e1 , . . . , vp , f1 , . . . , wq ). A concatenação de dois caminhos P e Q é denotada
por P · Q.
Caminhos dirigidos. Um caminho é dirigido (= dipath) se todos os seus arcos são diretos
(ou seja, se todos os seus arcos “apontam da esquerda para a direita”).
Dizemos que um nó v de um grafo dirigido está ao alcance de um nó r se existe um caminho
dirigido de r a v.
Lema F.1 (folclore) Se todos os nós de um grafo dirigido têm grau de entrada e grau de saída
não nulos então o grafo tem um ciclo dirigido simples.
F.3 DAGs
Um grafo dirigido é acíclico se não tem ciclos dirigidos. Grafos dirigidos acíclicos também são
conhecidos pela abreviatura DAG de directed acyclic graph. Todos os caminhos dirigidos de um
DAG são simples.
Lema F.2 (folclore) Um grafo dirigido é acíclico se e somente se tem uma permutação topoló-
gica.
Lema F.3 (folclore) Em qualquer DAG, todo arco pertence a um caminho dirigido que começa
em uma fonte e termina em um sorvedouro.
182 F.4. FLORESTAS E ÁRVORES FEOFILOFF
E XEMPLO F.1: A primeira figura representa uma árvore radicada. A segunda representa uma
árvore orientada.
E XEMPLO F.2: Seja T uma árvore radicada. Para cada arco e de T , seja Xe o conjunto de nós da
componente conexa de T − e que contém a ponta final de e. (Em outras palavras, Xe é o conjunto
de todos os nós de T que estão ao alcance da ponta final de e.) A coleção {Xe : e ∈ E(T )} é laminar
(veja a seção A.6 do apêndice A).
F.5 Cortes
R Dado um grafo dirigido (V, E) e um subconjunto R de V , denotamos por R o conjunto V r R.
Dizemos que um arco vw entra em R se v ∈ R e w ∈ R. Dizemos que vw sai de R se v ∈ R e
∂ − w ∈ R. O conjunto de todos os arcos que saem de R é denotado por
∂ − (R) .
∂ + Analogamente, ∂ + (R) é o conjunto de todos os arcos que entram em R.3 É claro que ∂ − (R) =
∂ + (R). É claro também que ∂ − (∅) = ∂ − (V ) = ∂ + (∅) = ∂ + (V ) = ∅.
3
Para justificar os superscritos “−” e “+”, você pode imaginar que os nós são contas bancárias e os
arcos representam movimentação de dinheiro. Assim, tudo que sai de uma conta é subtraído do saldo e
tudo que entra é somado.
FEOFILOFF GRAFOS DIRIGIDOS 183
Um corte (= cut) em um grafo dirigido (V, E) é o conjunto de todos os arcos que saem de
algum conjunto de nós. Em outras palavras, um corte é qualquer conjunto da forma ∂ − (R),
com R ⊆ V . (Pode parecer que um corte deveria ser definido como ∂ − (R) ∪ ∂ + (R), mas a
definição que adotamos é mais útil.) O conjunto R é a margem negativa do corte ∂ − (R) e R é
a margem positiva.
Um corte ∂ − (R) é dirigido (= directed) se ∂ + (R) = ∅.
F.6 Redes
Uma rede (= network) é um grafo dirigido juntamente com uma ou mais funções que atribuem
números aos arcos e/ou aos nós do grafo. O conceito é propositalmente vago. Às vezes, a
especificação de uma rede também inclui um ou dois nós “especiais” do grafo.
Por exemplo, se D é um grafo dirigido e c é uma função de E(D) em R, podemos dizer que
(D, c) é uma rede. Da mesma forma, se b é uma função de V (D) em R, podemos dizer que
(D, b, c) é uma rede.
u v w z uw vw zu uz zw
u − − 1 1 u −1 0 +1 −1 0
v − − 1 − v 0 −1 0 0 0
w − − − − w +1 +1 0 0 +1
z 1 − 1 − z 0 0 −1 +1 −1
E XEMPLO F.4: Veja à esquerda a matriz de adjacências de uma árvore orientada com nós a b c d e f .
4
Alguns livos adotam a convenção contrária: +1 na linha v e −1 na linha w.
184 F.8. EXERCÍCIOS FEOFILOFF
À direita, uma árvore radicada com o mesmo conjunto de nós e raiz c. (Faça figuras.)
a b c d e f a b c d e f
a − − − − − − a − − − − − −
b − − 1 − − − b − − − − − −
c 1 − − 1 − − c 1 1 − 1 − −
d − − − − 1 − d − − − − 1 1
e − − − − − − e − − − − − −
f − − − 1 − − f − − − − − −
Lema F.4 (ciclos e dependência linear) Seja A a matriz de incidências de um grafo dirigido D.
O conjunto das colunas de A é linearmente dependente se e somente se D tem um ciclo (não
necessariamente dirigido).
P ROVA DO “ SOMENTE SE ”: Suponha que o conjunto das colunas de A é l.d.. Seja x um vetor
real não nulo tal que Ax = 0. Seja F o conjunto {e ∈ E(D) : xe 6= 0} e considere o grafo
induzido D[F ]. Seja G o grafo não-dirigido subjacente a D[F ]. Como Ax = 0, nenhuma linha
da matriz A[∗, F ] tem exatamente um elemento não nulo. Portanto, nenhum nó de G tem
grau 1. De acordo com o lema E.1, G tem um ciclo. Logo, D[F ] tem um ciclo e portanto D tem
um ciclo.
P ROVA DO “ SE ”: Suponha que D tem um ciclo, digamos (v0 , e1 , v1 , . . . , ep , vp ). Defina o vetor x
da seguinte maneira: para cada índice i, se ei é um arco direto do ciclo então xei = +1, se ei é
um arco inverso então xei = −1, e se e não pertence ao ciclo então xe = 0. Observe que Ax = 0.
Isso mostra que o conjunto das colunas de A é l.d..
E XEMPLO F.5: A figura mostra a matriz de incidências de um grafo dirigido que consiste em um
ciclo simples e nada mais.
e1 e2 e3 e4 e5
v0 −1 0 0 0 −1
v1 +1 −1 0 0 0
v2 0 +1 +1 0 0
v3 0 0 −1 +1 0
v4 0 0 0 −1 +1
F.8 Exercícios
F.1 Prove o lema F.1.
F.2 Mostre que todo grafo dirigido sem ciclos de comprimento ímpar é uma orientação de um grafo
não-dirigido bipartido. Mostre que nenhuma orientação de um grafo não-dirigido bipartido tem
ciclos de comprimento ímpar.
F.3 Prove o lema F.2.
F.4 Prove o lema F.3.
FEOFILOFF GRAFOS DIRIGIDOS 185
F.5 Árvores radicadas e coleções laminares. No exemplo F.2, mostre que a coleção {Xe : e ∈ E(T )} é
laminar.
F.6 Seja L uma coleção laminar de subconjuntos de um conjunto V . Mostre que L pode ser representada
por uma floresta radicada. (Dica: Cada elemento X de L é um nó da floresta e, para cada elemento
maximal X 0 de {L ∈ L : L ⊆ X}, a floresta tem um arco (X, X 0 ).)
F.7 Mostre que toda floresta orientada é uma orientação de um grafo não-dirigido bipartido.
P +
F.8 Seja
P v−um nó de um grafo dirigido. Mostre que (|∂ (v)| : v ∈ V ) = m. Mostre também que
(|∂ (v)| : v ∈ V ) = m.
F.9 ? Seja ∂ − (R) um corte dirigido em um grafo dirigido D. Mostre que não existe caminho dirigido
em D que começa em R e termina em R.
F.10 ? Seja A a matriz de incidências de um grafo dirigido D com k componentes conexas. Prove que o
posto de A (veja a seção A.5 do apêndice A) é igual |V (D)| − k.
F.11 Prove o lema F.4.
F.12 ? Vértices de poliedros versus ciclos. Seja A a matriz de incidências de um grafo dirigido e b um vetor
real indexado por V . Considere o poliedro (veja o apêndice B) {x : Ax = b e x ≥ 0}. Seja x um vetor
do poliedro e suponha que o grafo tem um ciclo (não necessariamente dirigido). cujos arcos estão
no suporte (veja a seção A.2) de x. Prove que x não é vértice do poliedro.
186 F.8. EXERCÍCIOS FEOFILOFF
Apêndice G
Este apêndice faz uma rápida revisão dos conceitos de problema, instância, algoritmo, e con-
sumo de tempo. Veja mais informações no sítio www.ime.usp.br/~pf/analise_de_algoritmos/.
187
188 G.3. COMPARAÇÃO ASSINTÓTICA DE FUNÇÕES FEOFILOFF
G.4 Exercícios
G.1 Escreva um algoritmo que resolva o seguinte problema: dados números inteiros a, b e c, encontrar
um número inteiro x tal que ax2 + bx + c = 0.
G.2 Escreva um algoritmo que resolva o seguinte problema: dado um grafo não-dirigido G, encontrar
uma bipartição de G (veja o apêndice E).
Bibliografia
[AMO93] R.K. Ahuja, T.L. Magnanti, and J.B. Orlin. Network Flows: Theory, Algorithms and
Applications. Prentice Hall, 1993.
[BM08] J.A. Bondy and U.S.R. Murty. Graph Theory. Graduate Texts in Mathematics 244.
Springer, 2008.
[CCPS98] W.J. Cook, W.H. Cunningham, W.R. Pulleyblank, and A. Schrijver. Combinatorial
Optimization. John Wiley, 1998.
[CLRS01] T.H. Cormen, C.E. Leiserson, R.L. Rivest, and C. Stein. Introduction to Algorithms.
MIT Press and McGraw-Hill, second edition, 2001.
[Edm65] J. Edmonds. Paths, trees, and flowers. Canadian Journal of Mathematics, 17:449–467,
1965.
[GH61] R.E. Gomory and T.C. Hu. Multi-terminal network flows. Journal of the Society for
Industrial and Applied Mathematics, 9:551–570, 1961.
189
190 BIBLIOGRAFIA FEOFILOFF
?, i de Dijkstra, 10
dxe, 151 de Edmonds, 112, 125, 141
bxc, 151 de Ford, 4
[∗, j], 152 de Ford–Bellman, 8
[i, ∗], 152 de Ford–Bellman para DAGs, 9
cT x, 153 de Ford–Fulkerson, 30
AT y, 153 de programação linear, 167
E(·), 175, 176, 179 do caminho de aumento, 30
G − v, 176 do caminho dirigido mínimo, 4, 8
G − e, 176 do ciclo de aumento, 69
G + vw, 176 do corte globalmente mínimo, 93, 95
D − v, 180 do elipsóide, 167
D − e, 180 do emparelhamento
D + vw, 180 bipartido máximo, 129
P · Q, 176, 181 máximo, 125, 129
R, 155, 177, 182 perfeito, 112
∂(·), 177 do fluxo
∂ + (·), 182 de custo mínimo, 69
∂ − (·), 182 máximo, 30
x+ (·), 13, 23 do ponto interior, 167
x− (·), 23 húngaro, 134
x+− (·), 23 polinomial, 188
u+ (·), 27 Simplex, 166, 167
u− (·), 27 de transbordo, 73
l+ (·), 49 para redes, 71, 79
l− (·), 49 AMO, i
λ(·), 88, 91 anticadeia, 55
G[·], 175, 180 antichain, 55
G×C, 110 ao alcance, 181
ν(·), 120 arbórea, 71, 78
⊕, 104 arborescência, 182
kAk, 121 arc, 179
O(·), 188 arco, 179
Ω(·), 188 antiparalelo, 179
Θ(·), 188 cheio de fluxo, 28
direto (de caminho), 180
acíclico, 9 inverso (de caminho), 180
acúmulo de fluxo, 23 justo, 3
alcance, 181 paralelo, 179
algoritmo, 187 que entra, 179
das flores, 112, 125 que sai, 179
de busca em largura, 11
191
192 ÍNDICE REMISSIVO FEOFILOFF
u, 63
u− (·), 27
u+ (·), 27
unbounded, 161
linear program, 165
underlying