Capítulo 3
Aplicações de fluxo máximo e corte mínimo
O teorema MFMC
(teoremas 2.9)
e sua versão inteira
(teorema 2.10),
ambos no capítulo 2,
são ferramentas poderosas e versáteis.
Este capítulo usa essas ferramentas
para resolver alguns problemas combinatórios.
Vários desses problemas são
de viabilidade
pois procuram um objeto de um certo tipo
num grafo
e não envolvem maximização nem minimização.
Para esses problemas, os teoremas MFMC fornecem
certificados de inviabilidade
:
explicações elementares
de por quê uma dada instância não tem solução.
Eis um exemplo simples
de problema de viabilidade:
dada uma rede de fluxo
e um número ,
encontrar um fluxo viável
de a que tenha
intensidade pelo menos .
O teorema MFMC
mostra que uma instância desse problema não tem solução
somente se houver um impedimento óbvio
na forma de um corte
que separa de e tem
capacidade
menor que .
Para simplificar a discussão,
vamos relaxar a definição de
função-capacidade
adotada na seção 2.2
e permitir que alguns arcos das redes de fluxo tenham capacidade infinita.
Essa generalização
é inócua desde que
a rede de fluxo não tenha caminhos de capacidade infinita
que levam do nó inicial ao nó final.
(Consulte o
índice remissivo
e os apêndices
para conferir as definições de termos técnicos.)
3.1 O problema de Gale
Uma função-demanda
em um grafo dirigido é qualquer função
que associa um número real
a cada nó .
Um fluxo em satisfaz
uma função-demanda se tem excesso
em cada nó ,
ou seja, se
para cada nó .
Assim, se então é produtor de fluxo
e se então é consumidor de fluxo
.
[Essa interpretação pode desagradar alguns leitores,
mas ela é inevitável em face de
nossa convenção sobre
qual das pontas de um arco é positiva e qual é negativa.]
Problema 3.A (de Gale)
Dada uma rede capacitada e uma função-demanda ,
encontrar um fluxo que respeite as capacidades dos arcos
e satisfaça .
Uma rede com função-demanda pode ser denotada por
.
Ademais, denotaremos por
o conjunto de nós de .
Para simplificar o palavreado,
diremos que um fluxo é viável
se satisfaz e respeita .
Exemplo 3.1:
Seja
o grafo dirigido com nós
descrito abaixo por uma
matriz de adjacências.
À direita da matriz temos uma função-demanda .
Mais à direita, uma
função-capacidade .
Abaixo
de na tabela temos um fluxo
viável na rede
.
O seguinte lema dá uma condição necessária óbvia
para a existência de um fluxo viável:
Lema 3.1 (condição necessária)
Se uma rede tem um fluxo viável
então
e
para todo subconjunto de . ■
(Como de hábito,
denota a soma
.)
Assim, para tornar evidente que não existe fluxo viável
basta mostrar que
ou exibir um conjunto tal que .
A condição necessária descrita no lema
é conhecida como condição de Gale
em referência a D. Gale,
que mostrou (1957) que a condição é também suficiente:
Teorema 3.2 (Gale)
Em qualquer rede ,
se e
para todo subconjunto de
então existe um fluxo viável.
Ademais, se e são inteiros,
essa mesma condição garante a existência
de um fluxo viável inteiro.
Prova:
A prova é uma redução ao teorema MFMC inteiro
(teorema 2.10).
[Essa redução
é a principal lição desta seção 3.1.]
Suponha que a rede satisfaz as condições do enunciado;
vamos mostrar que existe um fluxo viável.
Seja o conjunto dos nós para os quais é negativo
e o conjunto dos nós para os quais é positivo ou nulo.
Seja a rede capacitada definida da seguinte maneira.
O conjunto de nós de é ,
sendo e dois novos nós,
e o conjunto de arcos de é definido assim:
-
para cada em ,
há um arco em
com ;
-
para cada em ,
há um arco em
com ;
-
para cada arco de ,
há um arco em com
.
Seja um conjunto que separa de
em .
A capacidade do corte
na rede
é a soma de três parcelas:
as capacidades dos arcos que vão de a ,
as capacidades dos arcos que vão de a ,
e as capacidades dos arcos que vão de a .
Adote a notação e observe que
Concluímos assim que todo corte que separa de
na rede tem capacidade pelo
menos .
Segue daí, pelo teorema MFMC
(teorema 2.9),
que existe um fluxo viável na rede
tal que
.
Como
,
todos os arcos que entram em estão cheios de fluxo
e portanto para todo em .
Como e portanto
,
temos também para todo em .
Seja a restrição de aos arcos da
rede original .
É claro que respeita .
Resta mostrar que satisfaz .
Para cada em temos
.
Analogamente,
para cada em .
Portanto, respeita .
A segunda parte da prova,
que trata de fluxo inteiro,
é uma mera aplicação do teorema MFMC inteiro
(teorema 2.10). ■
Exemplo 3.2:
Para a rede do exemplo 3.1,
veja a rede auxiliar
construída na prova do teorema 3.2
(complete a figura).
A segunda tabela mostra
um fluxo viável de a
na rede .
Exemplo 3.3:
Seja a rede definida a seguir.
(Ela é igual à rede do exemplo 3.1
exceto pelo valor de .)
Essa rede não tem fluxo viável porque
o conjunto não satisfaz a condição .
Tal como apresentada acima, a
condição de Gale é assimétrica.
Mas ela equivale à seguinte condição simétrica:
para todo conjunto de nós.
Problemas de transporte
As instâncias do problema 3.A
em que o grafo é
bipartido
e para todo arco
(ou seja, não há restrições de capacidade)
aparecem em muitas aplicações.
Essas instâncias podem ser apresentadas em termos de redes de transporte.
Uma rede de transporte é um objeto
em que é um
grafo dirigido bipartido,
é uma bipartição de ,
e é um vetor não-negativo indexado por .
Problema 3.A0
Dada uma rede de transporte ,
encontrar um fluxo
tal que
para cada em e
para cada em .
Exemplo 3.4:
É dado um conjunto de fábricas que produzem um certo fertilizante agrícola.
É dado um conjunto de consumidores que usam esse fertilizante.
Cada fábrica produz exatamente toneladas
do fertilizante por mês
e cada consumidor consome exatamente toneladas
do fertilizante por mês.
Uma quantidade arbitrária do fertilizante pode ser levada
de uma fábrica até um consumidor
desde que exista um canal de transporte
ligando a .
Queremos saber se um dado conjunto de canais de transporte
é capaz de levar toda a produção das fábricas até os consumidores.
O problema 3.A0 é um caso especial
do problema 3.A,
como mostraremos a seguir.
Dada uma rede de transporte ,
considere a rede
em que e são definidas assim:
para cada em ,
para cada em , e
para cada arco de .
Como é bipartido,
temos para todo em e
para todo em .
Assim, toda solução da instância do problema 3.A
é solução da instância do problema 3.A0
e vice-versa.
Para formular o lema 3.1
e o teorema 3.2
na linguagem do problema 3.A0,
usamos a seguinte notação.
Para qualquer subconjunto de ,
denotamos por
o conjunto de todos os nós de
para os quais existe um arco com em .
Podemos dizer que é a vizinhança
de .
[A letra é a inicial
da palavra neighborhood.]
Corolário 3.3
Uma instância
do problema 3.A0 tem solução se e somente se
e
para todo subconjunto de .
Ademais, se é inteiro então
essas condições garantem a existência
de uma solução inteira
do problema.
Esboço da prova:
A parte somente se
é óbvia.
Agora considere a parte se
.
Suponha que a rede satisfaz as condições
e seja a correspondente instância do problema 3.A,
conforme definição acima.
É claro que .
Mostraremos a seguir que
para todo subconjunto de .
Há dois casos a considerar.
Se então
e portanto .
Por outro lado, se então
e .
Segue daí que
,
donde
,
e assim .
Concluímos que em ambos os casos temos .
Segue do teorema de Gale
(teorema 3.2)
que existe um fluxo
que satisfaz .
Um tal é solução do problema 3.A0. ■
A seguinte generalização do problema 3.A0 é conhecida como
problema do transporte e serve de modelo para vários problemas
práticos:
Problema 3.B (do transporte)
Dada uma rede de transporte ,
encontrar um fluxo
tal que
para cada em e
para cada em .
Exemplo 3.5:
Uma empresa tem um conjunto de fábricas de produzem pneus
e um conjunto de lojas que vendem esses pneus.
Cada fábrica é capaz de produzir no máximo pneus por mês e
cada loja vende pneus por mês.
Pneus podem ser levados da fábrica para a loja
apenas se houver um transportador apropriado
ligando a .
Em que condições um dado conjunto de transportadores é capaz de
suprir as lojas?
[CCPS fig.3.9]
Para obter a generalização apropriada do
corolário 3.3
basta eliminar a condição :
Teorema 3.4 (do transporte)
Uma instância
do problema 3.B tem solução se e somente se
para todo subconjunto de .
Ademais, se é inteiro
então essa condição garante a existência
de uma solução inteira do problema.
A prova do teorema é um bom exercício.
Exercícios 3.1
-
★
Prove o lema 3.1.
(Dica:
Veja o lema 2.1.)
-
★
Versão simétrica da condição de Gale.
Mostre que a condição de Gale é equivalente à seguinte:
para todo .
-
Deduza o teorema MFMC
(teorema 2.9)
do teorema de Gale
(teorema 3.2)
e do lema 3.1.
-
Preencha os detalhes da prova do teorema 3.2.
Em particular, prove que a condição
é independente da condição
para todo
.
-
★
Prova direta do teorema de Gale.
Prove o teorema de Gale sem usar o teorema MFMC
(teoremas 2.9).
(Dica:
A discrepância de um fluxo é o número
.
Use caminhos de aumento,
como os da seção 2.4,
para diminuir a discrepância de .)
-
Algoritmo.
Escreva um algoritmo que receba uma rede com
função-capacidade
e
função-demanda
e devolva
(i) um fluxo viável ou
(ii) um subconjunto de que viola a condição de Gale.
Seu algoritmo deve invocar a
versão Edmonds–Karp
do algoritmo de Ford–Fulkerson.
-
Encontre um fluxo viável na rede descrita a seguir.
Os nós são
(não confunda o nó com a função-demanda )
e as tabelas definem as funções e :
-
★
Algoritmo para árvore orientada sem capacidades.
Seja uma rede em que é uma árvore orientada
e uma função-demanda.
Escreva um algoritmo que receba e
e calcule um fluxo em que satisfaça
ou decida que um tal fluxo não existe.
(Sugestão: faça um algoritmo recursivo
que começa pelas folhas da árvore.)
-
Condições para árvore orientada sem capacidades.
Seja uma rede em que é uma árvore orientada
e uma função-demanda.
Dê uma condição necessária e suficiente para que
tenha um fluxo que satisfaz .
Estabeleça a relação entre essa condição e a condição de Gale.
-
Problema de Gale em árvore orientada.
Seja uma rede capacitada com demandas
em que é uma árvore orientada.
Escreva um algoritmo que encontre
um fluxo viável em .
Dê uma condição necessária e suficiente para que
tenha um fluxo viável.
Estabeleça a relação entre essa condição e a condição geral de Gale.
-
Seja um nó de um grafo dirigido com nós.
Seja a função-demanda definida por
e para cada .
Dê uma condição necessária e suficiente para que a rede
tenha um fluxo que satisfaz .
-
★
Rede sem capacidades.
Seja uma função-demanda em um grafo
dirigido .
Mostre que a rede tem um fluxo que satisfaz
se e somente se
e para todo
tal que .
(Dica:
Enuncie e prove em separado a parte
se
e a parte somente se
.)
- Prove o teorema 3.4.
-
Subgrafo bipartido com prescrição de graus.
Seja um grafo não-dirigido
bipartido.
Suponha dado um inteiro não-negativo para cada nó de .
Queremos encontrar tal que
o grau de cada nó no grafo seja .
Descreva um algoritmo para o problema.
Dê uma condição necessária e suficiente para que o problema tenha solução.
Discuta o caso particular do problema em que é constante.
[CCPS 3.18]
-
Grafo dirigido euleriano.
(O adjetivo euleriano é uma referência a
Leonhard Euler.)
Dado um grafo dirigido , encontrar um conjunto de arcos
cuja inversão
(isto é, troca de por )
resulte em um grafo dirigido
tal que para cada nó .
Dê uma condição necessária e suficiente para que o problema tenha solução.
[CCPS 4.5]
-
Orientação de grafo não-dirigido.
Dado um grafo não-dirigido
e um inteiro não-negativo ,
queremos transformar cada aresta de em um arco
de tal forma que no grafo dirigido resultante
o grau de saída de cada nó seja no máximo
(isto é, para todo nó ).
Dê uma condição necessária e suficiente para que uma instância desse problema
tenha solução.
Dê um algoritmo para o problema.
[CCPS 3.34]
-
Síntese de grafo dirigido.
Sejam
e
números inteiros não-negativos.
Queremos construir um grafo dirigido
com conjunto de nós
tal que cada nó tem grau de saída
e grau de entrada .
Mostre como resolver o problema.
[AMO 8.13]
-
Torneio viável.
Imagine um torneio de tênis com participantes.
Suponha que cada participante joga exatamente uma partida
com cada um dos outros e suponha que não há empates.
Seja o número de derrotas do tenista .
Dê uma condição necessária e suficiente para que
um dado vetor represente um torneio.
Dê um algoritmo que decida se representa um torneio.
[CCPS 3.35]
3.2 O problema de Hoffman
Algumas aplicações exigem que o fluxo em cada arco do grafo
tenha um certo valor mínimo.
Essas restrições por baixo
nos arcos
podem ser convertidas em demandas nos nós,
tranformando assim a aplicação em uma instância do
problema de Gale da seção anterior.
Uma demanda nos arcos
de um grafo dirigido é uma função que
associa um número real não-negativo
a cada arco do grafo;
portanto, .
[A letra é a inicial
de lower bound.]
Dizemos que um fluxo
no grafo
satisfaz
a demanda se para cada arco .
Problema 3.C (circulação viável)
Dada uma rede
em que é uma demanda nos arcos e
é uma
função-capacidade,
encontrar uma circulação
que satisfaça e respeite ,
ou seja, uma circulação tal que .
Para simplificar a conversa,
diremos que uma circulação é viável
se .
Exemplo 3.6:
Seja o grafo dirigido com nós descrito abaixo
por sua matriz de adjacências.
As funções e e uma circulação viável
são dados à direita da matriz:
Uma condição necessária para a existência de uma
circulação viável é intuitiva:
Lema 3.5 (condição necessária)
Se uma rede tem uma circulação viável então
e
para cada conjunto de nós. ■
(O significado das expressões
e foi definido na
seção 2.1.)
Assim, para tornar evidente que não existe circulação viável
basta exibir um arco tal que
ou exibir um conjunto de nós tal que .
A condição necessária dada no
lema 3.5
é conhecida como condição de Hoffman
em referência a
A. J. Hoffman
(não confunda com D.A. Huffman,
inventor do código de Huffman),
que mostrou (1960) que essa condição é suficiente:
Teorema 3.6 (Hoffman)
Para qualquer rede ,
se e
para todo subconjunto de
então existe uma circulação viável.
Ademais, se e são inteiros,
essa mesma condição garante a existência
de uma circulação viável inteira.
Prova:
A prova é uma redução do teorema de Gale
(teorema 3.2).
Suponha que a rede satisfaz a condição do teorema.
Para mostrar que existe uma circulação viável ,
usaremos o teorema de Gale
com no papel da função-demanda
e a diferença no papel da
função-capacidade.
Comece por observar que é um fluxo em
e considere o excesso
de fluxo em cada nó .
Em virtude do lema 2.1
do capítulo 2,
Agora considere a hipótese .
Se subtrairmos dos dois lados da desigualdade teremos
Nossa rede pode ser vista como uma instância
do problema de Gale com e definidos assim:
O parâmetro é uma função-demanda.
Como , o parâmetro é uma
função-capacidade.
Graças a
e ,
a rede satisfaz a
condição de Gale:
para cada .
O teorema 3.2
garante então que a rede
tem um fluxo
tal que e .
Para retornar à rede original ,
considere o fluxo
(trata-se de um fluxo pois
e ).
É claro que .
Ademais, é uma circulação
pois
para cada nó .
Em suma, é uma circulação viável,
como queríamos provar. ■
Exemplo 3.7:
Veja a rede construída na prova do
teorema 3.6
a partir da rede do exemplo 3.6:
A tabela acima mostra um fluxo
que satisfaz e
respeita .
Essa rede é igual à rede
do
exemplo 3.3.
Exemplo 3.8:
A rede descrita abaixo
é igual à rede do exemplo 3.6
exceto por .
A rede não tem circulação viável pois
o conjunto não satisfaz a condição .
Vale a seguinte generalização comum dos teoremas de Gale
(teorema 3.2)
e de Hoffman
(teorema 3.6):
Teorema 3.7
Seja um grafo dirigido,
uma função de em ,
uma função de em , e
uma função de em .
A rede
tem um fluxo tal que
e
se e somente se
para todo subconjunto de .
Ademais,
se , e são inteiros,
a mesma condição garante a existência de um fluxo
inteiro
com as propriedades enunciadas. ■
Exercícios 3.2
-
Mostre que as partes
e
da condição de Hoffman são independentes.
-
Seja um grafo dirigido que consiste em um ciclo dirigido simples
e nada mais.
Sejam e duas funções de em .
Parte 1:
Supondo que existe uma circulação tal que ,
mostre que
.
Parte 2:
Supondo que
,
mostre que a rede viola a condição de Hoffman.
-
★
Prove o lema 3.5.
-
Encontre uma circulação viável na rede descrita a seguir.
Os nós são
e a tabela dá os arcos e as funções e :
-
Encontre uma circulação viável na rede descrita a seguir.
Os nós são
e a tabela dá os arcos e as funções e :
-
Seja uma rede acíclica
em que e .
Deduza da condição de Hoffman que não existe
circulação viável em .
-
Seja uma rede em que .
Use a condição de Hoffman
para provar a seguinte proposição:
se para todo conjunto de nós
então a rede tem uma circulação viável.
-
Trajeto de caminhão de coleta de lixo.
Um ciclo dirigido num grafo dirigido
é euleriano,
se passa por cada arco e cada nó do grafo.
(É claro que um ciclo euleriano passa apenas uma vez por cada arco;
mas pode passar mais de uma vez por cada nó.)
[O adjetivo euleriano é uma referência a
Leonhard Euler.]
Mostre que um grafo dirigido tem um ciclo dirigido euleriano
se e somente se é conexo
e para cada nó .
[CCPS 4.4]
-
Seja uma rede em que e para cada arco .
Mostre que a rede tem uma circulação viável
se e somente se é fortemente conexo.
(Dica:
Enuncie e prove em separado a parte
se
e a parte somente se
.)
[AMO 3.53]
-
Prove o teorema 3.7,
que generaliza os teoremas de Gale e Hoffman.
3.3 Fluxo mínimo
O problema do fluxo máximo
(problema 2.A,
capítulo 2)
procura um fluxo de intensidade máxima
que respeite as capacidades dos arcos.
Se tocarmos capacidades dos arcos
por demandas nos arcos
e intensidade máxima
por intensidade mínima
seremos levados a considerar o seguinte problema:
Problema 3.D (fluxo mínimo)
Dados dois nós e de um grafo dirigido ,
uma função de em ,
e um número ,
encontrar um fluxo de a tal que
(Como de hábito, a expressão fluxo de a
significa que e
para cada diferente de e de .)
Para simplificar o palavreado,
diremos que um fluxo numa rede é -viável
se vai de a e satisfaz as condições
e .
Nosso problema consiste então em encontrar um fluxo -viável.
Exemplo 3.9:
Seja o grafo dirigido com nós descrito abaixo
por uma matriz de adjacências.
O nó inicial é e o nó final é
(ou seja,
faz o papel de e faz o papel de .)
A função e um fluxo de a
são dados à direita da matriz.
O fluxo é -viável.
Para formular condições de existência de um fluxo -viável,
vamos recorrer aos cortes dirigidos
que separam de .
(Como se sabe, um corte
é dirigido se .)
É fácil verificar a seguinte condição necessária:
Lema 3.8 (condição necessária)
Se uma rede
tem um fluxo -viável então
para todo corte dirigido
que separa de . ■
Essa condição necessária é também suficiente
se restringirmos a atenção às redes fonte-sorvedouro.
Uma rede é fonte-sorvedouro se
Todo arco de uma tal rede pertence a algum caminho dirigido de a .
Numa rede fonte-sorvedouro,
algum fluxo de a
é tal que .
Como não existe caminho dirigido de a ,
um fluxo
não pode ter intensidade arbitrariamente pequena.
Teorema 3.9 (condição suficiente)
Dada uma rede fonte-sorvedouro
e um número , se
para todo corte dirigido
que separa de ,
então a rede tem um fluxo -viável.
Ademais, se é inteiro
então existe um fluxo -viável inteiro.
Prova:
A prova é uma redução ao teorema de Hoffman
(teorema 3.6).
Suponha que a condição enunciada está satisfeita.
Seja o conjunto de arcos de .
Construa um grafo dirigido
acrescentando um novo arco a
e seja o conjunto de arcos de .
Seja a função de em definida por
e para cada em .
Seja a
função-capacidade
definida em
pelas seguintes propriedades:
É claro que .
Para provar que rede
satisfaz a condição de Hoffman
resta mostrar que
para todo subconjunto de .
Há três casos a considerar,
dependendo dos valores de e em :
-
Se em
então
onde quer que o arco esteja em relação a .
-
Se então
pois algum arco de entra em e portanto
.
-
Suponha agora que e
.
Seja um arco de que sai de .
Como a rede é fonte-sorvedouro,
pertence a algum caminho dirigido
de a .
Como o corte é dirigido,
temos e ,
ou seja, separa de .
Logo ,
e portanto
.
Como para todo
subconjunto de ,
o teorema 3.6
garante que
a rede tem uma circulação viável, digamos .
A restrição de ao conjunto de arcos é um fluxo
de a em .
Ademais, e
.
Em outras palavras, é um fluxo -viável. ■
Exemplo 3.10:
Para a rede do exemplo 3.9,
eis a rede
construída na prova do teorema 3.9:
(A rede só difere da rede
do exemplo 3.6
porque é diferente.)
A última linha da tabela dá uma circulação
tal que .
Exemplo 3.11:
Para verificar que não existe fluxo -viável na rede
do exemplo 3.9,
tome o conjunto e observe que o corte dirigido
separa de
e que .
É fácil deduzir do
lema 3.8
e do teorema 3.9
o seguinte teorema min-max:
Teorema 3.10 (min-flow max-cut)
Em toda rede fonte-sorvedouro tem-se
sendo tomado sobre todos os fluxos
de a tais que
e sendo tomado sobre todos os cortes dirigidos
que separam de .
Ademais, se é inteiro
então a igualdade min-max é satisfeita por um fluxo que é
inteiro.
Exercícios 3.3
-
Mostre que toda rede fonte-sorvedouro
tem um fluxo de a
(possivelmente de grande intensidade)
tal que .
-
É verdade que toda rede dotada de -fluxo é fonte-sorvedouro?
-
Prove o lema 3.8.
-
Aponte os detalhes obscuros da prova do
teorema 3.9
do fluxo mínimo.
Clarifique esses detalhes.
-
Encontre um fluxo -viável
na rede que tem nós
e as demandas nos arcos dadas na tabela.
-
Considere a rede que tem nós
e os arcos dados abaixo.
Encontre um fluxo -viável.
Encontre um fluxo -viável.
-
Considere a rede que tem nós
e os arcos dados abaixo.
Encontre um fluxo viável de intensidade .
-
Considere a rede com nós
e os arcos e demandas dados na tabela.
Existe fluxo -viável
de a ?
Existe fluxo -viável
de a ?
-
Fluxo mínimo versus corte máximo.
Prove o teorema 3.10.
-
Programas lineares.
Formule os programas lineares
que representam o problema do fluxo mínimo
e o do corte dirigido máximo.
(Veja o exercício Fluxo mínimo versus corte máximo acima.)
3.4 Coberturas por caminhos
O teorema do fluxo mínimo
(teorema 3.10)
tem duas consequências interessantes que envolvem coberturas
de grafos dirigidos
por caminhos dirigidos.
Uma cobertura dos arcos
(por caminhos dirigidos)
de um grafo dirigido
é um coleção de caminhos dirigidos
tal que cada arco de pertence a pelo menos um dos caminhos da coleção.
Uma cobertura dos arcos
é mínima se nenhum outra tem menos caminhos.
Problema 3.E (cobertura por caminhos)
Encontrar uma cobertura mínima
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.
Problema 3.F (corte dirigido máximo)
Encontrar um corte dirigido máximo em um grafo dirigido.
Exemplo 3.12:
Seja o grafo dirigido que tem nós
e os arcos indicados na tabela abaixo.
Os caminhos ,
, e
constitutem uma cobertura mínima dos arcos de .
A segunda linha da tabela é o vetor característico de um corte dirigido máximo.
Em qualquer grafo dirigido,
se é uma cobertura
e é um corte dirigido
então é evidente que .
Se vale a igualdade, a cobertura é mínima
e o corte é máximo.
O seguinte teorema mostra que a recíproca dessa afirmação
é verdadeira em DAGs.
Teorema 3.11
Em qualquer DAG,
uma cobertura mínima dos arcos (por caminhos dirigidos)
tem o mesmo tamanho que um corte dirigido máximo. ■
Prova:
A prova é uma redução ao teorema do fluxo mínimo e corte máximo
(teorema 3.10).
Como já observamos, para qualquer cobertura
e qualquer corte dirigido .
Resta mostrar que para alguma e algum .
Seja o DAG em questão.
Construa um grafo dirigido da seguinte maneira.
O conjunto de nós de é ,
sendo e dois novos nós.
Todos os arcos de também são arcos de .
Além disso, tem um arco
para cada fonte
de
e um arco para cada sorvedouro
de .
É claro que é um DAG,
que é a única fonte de , e
que é o único sorvedouro de .
Portanto, a rede é
fonte-sorvedouro
no sentido da seção 3.3.
Seja a função-demanda definida sobre os arcos de
pelas seguintes propriedades:
para cada em
e para cada em .
Na rede ,
seja um fluxo de intensidade mínima
dentre aqueles que vão de a e satisfazem .
Seja um corte dirigido que maximiza
dentre os cortes dirigidos que separam de .
De acordo com o teorema 3.10,
Denote por o conjunto .
No grafo , temos ,
donde
De acordo com o adendo do
teorema 3.10,
podemos supor que é inteiro.
Mais que isso, podemos supor que é binário.
Logo,
o fluxo pode ser decomposto em
caminhos dirigidos simples
em ,
todos de a ,
conforme o lema 2.5
do capítulo 2.
Digamos que são os caminhos da decomposição,
com .
Como , cada arco de
pertence a algum dos caminhos.
Cada induz um caminho dirigido em .
O conjunto de caminhos
é uma cobertura dos arcos de .
Ademais, o número de caminhos é
e é um corte dirigido em . ■
Teorema de Dilworth
Uma cobertura dos nós
(= dipaths cover)
de um grafo dirigido
é uma coleção de caminhos dirigidos
tal que
cada nó de pertence a pelo menos um dos caminhos da coleção.
(Não confunda esse conceito com a
cobertura por nós da
seção 6.4.)
Uma cobertura dos nós
é mínima se nenhuma outra tem menos caminhos.
Problema 3.G (da cobertura dos nós por caminhos)
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 de nós tal que
não existe caminho dirigido com origem e término em
nós distintos de .
Uma anticadeia é máxima se nenhuma outra tem mais nós.
Problema 3.H (da anticadeia máxima)
Encontrar uma anticadeia máxima num grafo dirigido.
Exemplo 3.13:
A primeira figura mostra uma anticadeia
em um DAG. (Veja os nós marcados com ✓.)
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 nós e a cobertura tem caminhos.
Em qualquer grafo dirigido,
para qualquer cobertura dos nós e qualquer anticadeia ,
é claro que .
Se vale a igualdade, a cobertura é mínima e a anticadeia é máxima.
R. P. Dilworth
mostrou (1950) que a recíproca dessa afirmação é verdadeira
quando o grafo é um DAG.
[Dilworth provou o teorema no contexto de ordens parciais.
Aqui, o teorema foi traduzido para DAGs.]
Teorema 3.12 (Dilworth)
Em qualquer DAG,
uma cobertura mínima dos nós
tem o mesmo tamanho que uma anticadeia máxima.
Prova:
A prova é uma redução ao teorema do fluxo mínimo e corte máximo
(teorema 3.10).
Como já observamos,
para qualquer cobertura
e qualquer anticadeia .
Resta mostrar que para alguma e alguma .
Seja o DAG em questão.
Construa um grafo dirigido da seguinte maneira.
Para cada nó de , o grafo tem
dois nós, e ,
Para cada arco de , o grafo tem um arco .
Além disso, tem dois novos nós, e ,
um arco para cada fonte de , e
um arco para cada sorvedouro de .
Os arcos da forma serão chamados especiais;
eles representam os nós de .
A rede é
fonte-sorvedouro no sentido da seção 3.3.
Defina uma função-demanda sobre os arcos de
da seguinte maneira:
se é um arco especial e em caso contrário.
O teorema 3.10
aplicado à rede
garante que existe um fluxo de a tal que
e existe um corte dirigido que separa de
tal que
Seja o conjunto dos nós de que quebra
, isto é,
o conjunto dos nós de tais que separa de em .
Observe que e
portanto
Imagine agora, por um momento, que não é uma anticadeia.
Então existe um caminho dirigido em
que vai de um nó de a outro nó de .
Em ,
esse caminho corresponde a um caminho dirigido
que vai de a .
Portanto, o caminho começa em e termina em ,
e assim tem um arco em .
Mas isso é impossível, pois o corte é dirigido.
Essa contradição mostra que é uma anticadeia.
De acordo com o adendo do
teorema 3.10,
podemos supor que é inteiro.
Mais que isso, podemos supor que é binário.
Logo, de acordo com o lema 2.5,
o fluxo pode ser decomposto em caminhos dirigidos simples
em ,
todos de a .
Sejam esses caminhos, com .
É claro que cada arco especial de pertence a algum dos caminhos.
Cada induz um caminho dirigido em .
O conjunto de caminhos é uma cobertura dos nós de .
Ademais, o número de caminhos é . ■
Exercícios 3.4
-
★
Seja um grafo dirigido e uma cobertura (por caminhos dirigidos)
dos arcos de .
Seja um corte dirigido em .
Dê uma prova elementar da desigualdade
,
ou seja, prove a desigualdade diretamente.
-
★
Seja um grafo dirigido e uma cobertura (por caminhos dirigidos)
dos nós de .
Seja uma anticadeia em .
Dê uma prova elementar da desigualdade
,
ou seja, prove a desigualdade diretamente.
-
Desenhe uma árvore radicada com 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.
-
Mostre uma anticadeia máxima e
um cobertura mínima dos nós por caminhos dirigidos no DAG da figura.
[CCPS fig 2.5]
-
★
Complete os detalhes mais obscuros da prova do teorema de Dilworth
(teorema 3.12).
-
Seja uma cobertura mínima dos nós de um grafo dirigido
por caminhos dirigidos.
Podemos supor que todos os caminhos são simples?
Podemos supor que a coleção é disjunta, ou seja,
que cada nó de pertence a apenas um dos caminhos de ?
-
Mostre que num grafo dirigido dotado de ciclos dirigidos
uma anticadeia máxima pode ser menor que
uma cobertura mínima dos nós por caminhos dirigidos.
-
★
Escalonamento de aviões.
Uma companhia de aviação quer servir rotas (= flight legs)
com o menor número possível de aviões.
Para isso, ela precisa combinar essas rotas
da maneira mais eficiente possível.
O voo da rota deve começar no horário e terminar no horário .
Um avião precisa de horas para retornar do destino da rota
à origem da rota .
Sugira uma maneira de resolver o problema.
[AMO 6.32,
CCPS 3.39]
-
Seja a coleção de todos os caminhos dirigidos
em um grafo dirigido .
Seja a matriz binária indexada por
e definida pela seguinte propriedade:
se e somente se está em .
Use para formular o programa linear
que corresponde ao problema da cobertura mínima dos nós por caminhos dirigidos.
Qual o dual desse programa linear?
Qual a relação entre o dual e anticadeias máximas?
-
★
Seja um grafo dirigido bipartido
com bipartição .
Mostre que um subconjunto de é uma anticadeia se e somente se
é uma cobertura por nós
(no sentido da
seção 6.4).
Que aparência tem uma cobertura mínima dos nós de por caminhos dirigidos?
-
Prove o teorema de Kőnig
(teorema 6.4)
a partir do teorema de Dilworth
(teorema 3.12).
-
Prove o teorema de Dilworth
(teorema 3.12)
a partir do teorema de Kőnig
(teorema 6.4).
Mais exercícios
-
★
Escalonamento em máquinas paralelas uniformes.
Suponha dadas tarefas (= jobs)
e processadores idênticos.
Cada tarefa precisa ser processada durante dias
em qualquer dos processadores.
O processamento permite preemption,
ou seja,
o processamento de 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 está disponível para processamento a partir
de uma certa data
(= release date)
e deve estar concluída até uma certa data
(= due date) .
(Suponha que .)
Exemplo:
Formule um problema de fluxo máximo que resolva o escalonamento.
(Dica:
Coloque o conjunto de datas
em ordem crescente.
Seja
o conjunto ordenado de datas, com .
Agora, basta decidir que parte do processamento de cada tarefa
será feita durante o intervalo .)
[CCPS 3.41]
[AMO 6.17]
-
Custos menos prêmios.
Seja um nó de um grafo dirigido .
Para cada arco ,
seja um número não-negativo que mede o custo de destruir o arco.
Se um atacante destrói um conjunto de arcos,
recebe um prêmio para cada nó que não pode mais ser alcançado
por um caminho dirigido a partir de .
O atacante quer escolher de modo a minimizar
custos menos prêmios.
Sugira um algoritmo.
[CCPS 3.44]