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 $(D,u,r,s)$ e um número $k$, encontrar um fluxo viável de $r$ a $s$ que tenha intensidade pelo menos $k$. 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 $r$ de $s$ e tem capacidade menor que $k$.
Para simplificar a discussão,
vamos relaxar a definição de
função-
(Consulte o índice remissivo e os apêndices para conferir as definições de termos técnicos.)
Uma função-demanda
em um grafo dirigido $D$ é qualquer função
que associa um número real
$b_v$ a cada nó $v$.
Um fluxo $x$ em $D$ satisfaz
uma função-demanda $b$ se tem excesso
$b_v$ em cada nó $v$,
ou seja, se
\[
\xinout(v) = b_v
\]
para cada nó $v$.
Assim, se $b_v \lt 0$ então $v$ é produtor de fluxo
e se $b_v > 0$ então $v$ é 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 $(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)$. Ademais, denotaremos por $V$ o conjunto de nós de $D$. Para simplificar o palavreado, diremos que um fluxo é viável se satisfaz $b$ e respeita $u$.
Exemplo 3.1:
Seja $D$
o grafo dirigido com nós $p \ i \ j \ q$
descrito abaixo por uma
matriz de adjacências.
À direita da matriz temos uma função-demanda $b$.
Mais à direita, uma
função-
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 $(D,b,u)$ tem um fluxo viável então $b(V)=0$ e $b(X) \leq \uin(X)$ para todo subconjunto $X$ de $V$. ■
(Como de hábito, $b(X)$ denota a soma $\sum (b_v : v \in X)$.) Assim, para tornar evidente que não existe fluxo viável basta mostrar que $b(V)\neq 0$ ou exibir um conjunto $X$ tal que $b(X) > \uin(X)$. 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 $(D,b,u)$, se $b(V) = 0$ e $b(X) \leq \uin(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.
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 $(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 $(\Dcheck,\ucheck)$ a rede capacitada definida da seguinte maneira. O conjunto de nós de $\Dcheck$ é $V\cup\conj{r,s}$, sendo $r$ e $s$ dois novos nós, e o conjunto de arcos de $\Dcheck$ é definido assim:
Seja $R$ um conjunto que separa $r$ de $s$ em $\Dcheck$. A capacidade do corte $\cutcheckout(R)$ na rede $(\Dcheck,\ucheck)$ é a soma de três parcelas: as capacidades dos arcos que vão de $r$ a $P\setm R$, as capacidades dos arcos que vão de $Q\cap R$ a $s$, e as capacidades dos arcos que vão de $V\cap R$ a $V\setm R$. Adote a notação $R' := V\setm R$ e observe que \[ \begin{split} \ucheckout(R) & \ = \ -b(P \setm R) + b(Q \cap R) + \uin(R')\\ & \ \geq \ -b(P \setm R) + b(Q \cap R) + b(R')\\ & \ = \ -b(P \setm R) + b(Q \cap R) + b(P\setm R) + b(Q\setm R)\\ & \ = \ b(Q \cap R) + b(Q\setm R)\\ & \ = \ b(Q)\,\text{.} \end{split} \] Concluímos assim que todo corte que separa $r$ de $s$ na rede $(\Dcheck,\ucheck)$ tem capacidade pelo menos $b(Q)$. Segue daí, pelo teorema MFMC (teorema 2.9), que existe um fluxo viável $\xcheck$ na rede $(\Dcheck,\ucheck, r, s)$ tal que $\intens(\xcheck) = b(Q)$. Como $\intens(\xcheck) = \text{}$ $\xcheckin(s) \leq \text{}$ $\ucheckin(s) = b(Q)$, todos os arcos que entram em $s$ estão cheios de fluxo e portanto $\xcheck_{qs}=b_q$ para todo $q$ em $Q$. Como $b(V)=0$ e portanto $b(P) = -b(Q)$, temos também $\xcheck_{rp}=-b_p$ para todo $p$ em $P$.
Seja $x$ a restrição de $\xcheck$ aos arcos da rede original $(D,u)$. É claro que $x$ respeita $u$. Resta mostrar que $x$ satisfaz $b$. Para cada $q$ em $Q$ temos $\xinout(q) = \text{}$ $\xcheckinout(q) + \xcheck_{qs} = \text{}$ $\xcheck_{qs} = b_q$. Analogamente, $\xinout(p) = -b_p$ para cada $p$ em $P$. Portanto, $x$ respeita $b$.
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 $(D,b,u)$ do exemplo 3.1, veja a rede auxiliar $(\Dcheck,\ucheck, r, s)$ construída na prova do teorema 3.2 (complete a figura). A segunda tabela mostra um fluxo viável $\xcheck$ de $r$ a $s$ na rede $(\Dcheck,\ucheck, r, s)$.
Exemplo 3.3: Seja $(D,b,u)$ a rede definida a seguir. (Ela é igual à rede do exemplo 3.1 exceto pelo valor de $u_{qp}\,$.)
Essa rede não tem fluxo viável porque o conjunto $X:=\conj{p,j}$ não satisfaz a condição $b(X) \leq \uin(X)$.
Tal como apresentada acima, a condição de Gale é assimétrica. Mas ela equivale à seguinte condição simétrica: $-\uout(X) \leq \text{}$ $b(X) \leq \text{}$ $\uin(X)$ para todo conjunto $X$ de nós.
As instâncias do problema 3.A em que o grafo $D$ é bipartido e $u_e = \infty$ para todo arco $e$ (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 $(D,P,Q,a)$ em que $D$ é um grafo dirigido bipartido, $(P,Q)$ é uma bipartição de $D$, e $a$ é um vetor não-negativo indexado por $P\cup Q$.
Problema 3.A0 Dada uma rede de transporte $(D,P,Q,a)$, encontrar um fluxo $(x_e : e\in E(D))$ tal que $\xout(p) = a_p$ para cada $p$ em $P$ e $\xin(q) = a_q$ para cada $q$ em $Q$.
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 $p$ produz exatamente $a_p$ toneladas do fertilizante por mês e cada consumidor $q$ consome exatamente $a_q$ toneladas do fertilizante por mês. Uma quantidade arbitrária do fertilizante pode ser levada de uma fábrica $p$ até um consumidor $q$ desde que exista um canal de transporte $pq$ ligando $p$ a $q$. 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 $(D,P,Q,a)$, considere a rede $(D,b,u)$ em que $b$ e $u$ são definidas assim: $b_p = -a_p$ para cada $p$ em $P$, $b_q = a_q$ para cada $q$ em $Q$, e $u_{pq} = \infty$ para cada arco $pq$ de $D$. Como $D$ é bipartido, temos $\xinout(p) = \xout(p)$ para todo $p$ em $P$ e $\xinout(q) = \xin(q)$ para todo $q$ em $Q$. Assim, toda solução da instância $(D,b,u)$ do problema 3.A é solução da instância $(D,P,Q,a)$ 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 $Y$ de $Q$,
denotamos por $N(Y)$
o conjunto de todos os nós $p$ de $P$
para os quais existe um arco $pq$ com $q$ em $Y$.
Podemos dizer que $N(Y)$ é a vizinhança
de $Y$.
[A letra $N$
é a inicial
da palavra neighborhood.]
Corolário 3.3 Uma instância $(D,P,Q,a)$ do problema 3.A0 tem solução se e somente se $a(P) = a(Q)$ e $a(N(Y)) \geq a(Y)$ para todo subconjunto $Y$ de $Q$. Ademais, se $a$ é 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 $(D,P,Q,a)$ satisfaz as condições
e seja $(D,b,u)$ a correspondente instância do problema 3.A,
conforme definição acima.
É claro que $b(V) = b(P) + b(Q) = -a(P) + a(Q) = 0$.
Mostraremos a seguir que
\[
b(X) \leq \uin(X)
\]
para todo subconjunto $X$ de $V(D)$.
Há dois casos a considerar.
Se $\cutin(X) \neq \emptyset$ então $\uin(X) = \infty$
e portanto $b(X) \leq \uin(X)$.
Por outro lado, se $\cutin(X) = \emptyset$ então
$\uin(X) = 0$ e $N(Q \cap X) \subseteq P \cap X$.
Segue daí que
$a(P \cap X) \geq \text{}$ $a(N(Q\cap X) \geq \text{}$
$a(Q \cap X)$,
donde
$b(X) = \text{}$ $b(P \cap X) + b(Q \cap X) = \text{}$
$-a(P \cap X) + a(Q \cap X) \leq \text{}$
$-a(Q \cap X) + a(Q \cap X) = 0$,
e assim $b(X) \leq \uin(X)$.
Concluímos que em ambos os casos temos $b(X) \leq \uin(X)$.
Segue do teorema de Gale
(teorema 3.2)
que existe um fluxo $x$
que satisfaz $b$.
Um tal $x$ é 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 $(D,P,Q,a)$, encontrar um fluxo $(x_e : e\in E(D))$ tal que \[ \xout(p) \leq a_p \] para cada $p$ em $P$ e $\xin(q) = a_q$ para cada $q$ em $Q$.
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 $p$ é capaz de produzir no máximo $a_p$ pneus por mês e cada loja $q$ vende $a_q$ 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$. 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 $a(P) = a(Q)$:
Teorema 3.4 (do transporte) Uma instância $(D,P,Q,a)$ do problema 3.B tem solução se e somente se $a(N(Y)) \geq a(Y)$ para todo subconjunto $Y$ de $Q$. Ademais, se $a$ é 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.
$b(V)$é independente da condição
$b(X) \leq \uin(X)$ para todo $X$.
see a parte
somente se.)
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 $l$ que associa um número real não-negativo a cada arco do grafo; portanto, $l \in \Rplus^{E}$. [A letra $l$ é a inicial de lower bound.] Dizemos que um fluxo $x$ no grafo satisfaz a demanda $l$ se $x_e \geq l_e$ para cada arco $e$.
Problema 3.C (circulação viável)
Dada uma rede $(D,l,u)$
em que $l$ é uma demanda nos arcos e
$u$ é uma
função-
Para simplificar a conversa, diremos que uma circulação $x$ é viável se $l \leq x \leq u$.
Exemplo 3.6: 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:
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 $(D,l,u)$ tem uma circulação viável então $l\leq u$ e $\lout(X) \leq \uin(X)$ para cada conjunto $X$ de nós. ■
(O significado das expressões $\lout(X)$ e $\uin(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 $l_e > u_e$ ou exibir um conjunto $X$ de nós tal que $\lout(X) > \uin(X)$. 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 $(D,l,u)$, se $l\leq u$ e $\lout(X) \leq \uin(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.
Prova:
A prova é uma redução do teorema de Gale
(teorema 3.2).
Suponha que a rede $(D,l,u)$ satisfaz a condição do teorema.
Para mostrar que existe uma circulação viável $x$,
usaremos o teorema de Gale
com $-\linout$ no papel da função-demanda
e a diferença $u-l$ no papel da
função- Comece por observar que $l$ é um fluxo em $D$
e considere o excesso
$\linout(v)$ de fluxo em cada nó $v$.
Em virtude do lema 2.1
do capítulo 2,
\begin{equation}\label{eq1:proof:teo:hoffman}
-\linout(V) = 0\,\text{.}
\end{equation}
Agora considere a hipótese $\lout(X) \leq \uin(X)$.
Se subtrairmos $\lin(X)$ dos dois lados da desigualdade teremos
\begin{equation}\label{eq2:proof:teo:hoffman}
-\linout(X) \leq \inn{(u-l)}(X)\,\text{.}
\end{equation}
Nossa rede $(D,l,u)$ pode ser vista como uma instância $(D,b,\ucheck)$
do problema de Gale com $b$ e $\ucheck$ definidos assim:
\[
b := -\linout \hspace{3ex} \text{e} \hspace{3ex} \ucheck := u - l\,\text{.}
\]
O parâmetro $b$ é uma função-demanda.
Como $l\leq u$, o parâmetro $\ucheck$ é uma
função- para cada nó $v$.
Em suma, $x$ é uma circulação viável,
como queríamos provar. ■
Exemplo 3.7: Veja a rede $(D,b,\ucheck)$ construída na prova do teorema 3.6 a partir da rede $(D,l,u)$ do exemplo 3.6:
Exemplo 3.8: A rede $(D,l,u)$ descrita abaixo é igual à rede do exemplo 3.6 exceto por $u_{qp}$. A rede não tem circulação viável pois o conjunto $X:=\conj{p,j}$ não satisfaz a condição $\lout(X) \leq \uin(X)$.
Vale a seguinte generalização comum dos teoremas de Gale (teorema 3.2) e de Hoffman (teorema 3.6):
Teorema 3.7 Seja $D$ um grafo dirigido, $b$ uma função de $V$ em $\R$, $l$ uma função de $E$ em $\Rplus$, e $u$ uma função de $E$ em $\Rplus\cup\conj{\infty}$. A rede $(D,b,l,u)$ tem um fluxo $x$ tal que $\xinout = b$ e $l \leq x \leq u$ se e somente se \[ l\leq u \hspace{3ex} \text{e} \hspace{3ex} b(X) + \lout(X) \leq \uin(X) \] para todo subconjunto $X$ de $V$. Ademais, se $b$, $l$ e $u$ são inteiros, a mesma condição garante a existência de um fluxo $x$ inteiro com as propriedades enunciadas. ■
$l\leq u$e
$\lout(X) \leq \uin(X)$da condição de Hoffman são independentes.
see a parte
somente se.) [AMO 3.53]
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 $r$ e $s$ de um grafo dirigido $D$, uma função $l$ de $E(D)$ em $\Rplus$, e um número $k\geq 0$, encontrar um fluxo $x$ de $r$ a $s$ tal que \[ x \geq l \hspace{3ex} \text{e} \hspace{3ex} \intens(x) \leq k\,\text{.} \]
(Como de hábito, a expressão fluxo $x$ de $r$ a $s$
significa que $\xinout(s) \geq 0$ e
$\xinout(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 \geq l$ e $\intens(x) \leq k$.
Nosso problema consiste então em encontrar um fluxo $k$-viável.
Exemplo 3.9: 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$ (ou seja, $p$ faz o papel de $r$ e $q$ faz o papel de $s$.) A função $l$ e um fluxo $x \geq l$ de $p$ a $q$ são dados à direita da matriz. O fluxo $x$ é $3$-viável.
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 $\cutout(X)$ é dirigido se $\cutin(X)=\emptyset$.) É fácil verificar a seguinte condição necessária:
Lema 3.8 (condição necessária) Se uma rede $(D,l,r,s)$ tem um fluxo $k$-viável então $\lout(X) \leq k$ para todo corte dirigido $\cutout(X)$ que separa $r$ de $s$. ■
Essa condição necessária é também suficiente se restringirmos a atenção às redes fonte-sorvedouro. Uma rede $(D,l,r,s)$ é fonte-sorvedouro se
Todo arco de uma tal rede pertence a algum caminho dirigido de $r$ a $s$.
Numa rede fonte- Teorema 3.9 (condição suficiente)
Dada uma rede fonte-sorvedouro $(D,l,r,s)$
e um número $k\geq 0$, se
\[
\lout(X) \leq k
\]
para todo corte dirigido $\cutout(X)$
que separa $r$ de $s$,
então a rede tem um fluxo $k$-viável.
Ademais, se $l$ é inteiro
então existe um fluxo $k$-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 $E$ o conjunto de arcos de $D$.
Construa um grafo dirigido $\Dcheck$
acrescentando um novo arco $sr$ a $D$
e seja $\Echeck$ o conjunto de arcos de $\Dcheck$.
Seja $\lcheck$ a função de $\Echeck$ em $\Rplus$ definida por
$\lcheck_{sr}=0$ e $\lcheck_e=l_e$ para cada $e$ em $E$.
Seja $\ucheck$ a
função- Como $\lcheckout(X)\leq \ucheckin(X)$ para todo
subconjunto $X$ de $V(\Dcheck)$,
o teorema 3.6
garante que
a rede $(\Dcheck,\lcheck,\ucheck)$ tem uma circulação viável, digamos $\xcheck$.
A restrição de $\xcheck$ ao conjunto $E$ de arcos é um fluxo $x$
de $r$ a $s$ em $D$.
Ademais, $x \geq l$ e
$\intens(x) \leq \text{}$ $\ucheck_{sr} = k$.
Em outras palavras, $x$ é um fluxo $k$-viável. ■
Exemplo 3.10:
Para a rede $(D,l,r,s)$ do exemplo 3.9,
eis a rede $(\Dcheck,\lcheck,\ucheck)$
construída na prova do teorema 3.9:
(A rede $(\Dcheck,\lcheck,\ucheck)$ só difere da rede
do exemplo 3.6
porque $\ucheck$ é diferente.)
A última linha da tabela dá uma circulação $\xcheck$
tal que $\lcheck \leq \text{}$ $\xcheck \leq \ucheck$.
Exemplo 3.11:
Para verificar que não existe fluxo $2$-viável na rede
do exemplo 3.9,
tome o conjunto $X:=\conj{p,j}$ e observe que o corte dirigido
$\cutout(X)$ separa $r$ de $s$
e que $\lout(X) > 2$.
É 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 $(D,l,r,s)$ tem-se
\[\textstyle
\min_{x}\,\intens(x) = \max_{X}\,\lout(X)\,\text{,}
\]
sendo $\min_{x}$ tomado sobre todos os fluxos $x$
de $r$ a $s$ tais que $x\geq l$
e sendo $\max_{X}$ tomado sobre todos os cortes dirigidos
$\cutout(X)$ que separam $r$ de $s$.
Ademais, se $l$ é inteiro
então a igualdade min-max é satisfeita por um fluxo $x$ que é
inteiro.
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 $D$
é um coleção de caminhos dirigidos
tal que cada arco de $D$ 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 Problema 3.F (corte dirigido máximo)
Encontrar um corte dirigido máximo em um grafo dirigido.
Exemplo 3.12:
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.
Em qualquer grafo dirigido,
se $\Pcal$ é uma cobertura
e $C$ é um corte dirigido
então é evidente que $|\Pcal| \geq |C|$.
Se vale a igualdade, a cobertura $\Pcal$ é mínima
e o corte $C$ é 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, $|\Pcal| \geq |C|$ para qualquer cobertura $\Pcal$
e qualquer corte dirigido $C$.
Resta mostrar que $|\Pcal| = |C|$ para alguma $\Pcal$ e algum $C$.
Seja $D$ o DAG em questão.
Construa um grafo dirigido $\Dcheck$ da seguinte maneira.
O conjunto de nós de $\Dcheck$ é $V(D)\cup \conj{r,s}$,
sendo $r$ e $s$ dois novos nós.
Todos os arcos de $D$ também são arcos de $\Dcheck$.
Além disso, $\Dcheck$ tem um arco $rv$
para cada fonte $v$
de $D$
e um arco $ws$ para cada sorvedouro $w$
de $D$.
É claro que $\Dcheck$ é um DAG,
que $r$ é a única fonte de $\Dcheck$, e
que $s$ é o único sorvedouro de $\Dcheck$.
Portanto, a rede $(\Dcheck,r,s)$ é
fonte-sorvedouro
no sentido da seção 3.3.
Seja $l$ a função-demanda definida sobre os arcos de $\Dcheck$
pelas seguintes propriedades:
$l_e=1$ para cada $e$ em $E(D)$
e $l_f=0$ para cada $f$ em $E(\Dcheck) \setm E(D)$.
Na rede $(\Dcheck,l,r,s)$,
seja $x$ um fluxo de intensidade mínima
dentre aqueles que vão de $r$ a $s$ e satisfazem $x \geq l$.
Seja $\cutout(X)$ um corte dirigido que maximiza $\lout(X)$
dentre os cortes dirigidos que separam $r$ de $s$.
De acordo com o teorema 3.10,
\[
\intens(x) = \lout(X)\,\text{.}
\]
Denote por $X{-}r$ o conjunto $X\setm \conj{r}$.
No grafo $D$, temos $|\cutout(X{-}r)| = \lout(X)$,
donde
\[
\intens(x) = |\cutout(X{-}r)|\text{.}
\]
De acordo com o adendo do
teorema 3.10,
podemos supor que $x$ é inteiro.
Mais que isso, podemos supor que $x$ é binário.
Logo,
o fluxo $x$ pode ser decomposto em
$\intens(x)$ caminhos dirigidos simples
em $\Dcheck$,
todos de $r$ a $s$,
conforme o lema 2.5
do capítulo 2.
Digamos que $P_1,\ldots,P_k$ são os caminhos da decomposição,
com $k = \intens(x)$.
Como $x\geq l$, cada arco de $D$
pertence a algum dos caminhos.
Cada $P_i$ induz um caminho dirigido $Q_i$ em $D$.
O conjunto $\conj{Q_1,\ldots,Q_k}$ de caminhos
é uma cobertura dos arcos de $D$.
Ademais, o número de caminhos é $k = |\cutout(X{-}r)|$
e $\cutout(X{-}r)$ é um corte dirigido em $D$. ■
Uma cobertura dos nós
(= dipaths 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.
(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 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
Em qualquer grafo dirigido,
para qualquer cobertura $\Pcal$ dos nós e qualquer anticadeia $B$,
é claro que $|\Pcal| \geq |B|$.
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,
$|\Pcal| \geq |B|$ para qualquer cobertura $\Pcal$
e qualquer anticadeia $B$.
Resta mostrar que $|\Pcal| = |B|$ para alguma $\Pcal$ e alguma $B$.
Seja $D$ o DAG em questão.
Construa um grafo dirigido $\Dcheck$ da seguinte maneira.
Para cada nó $v$ de $D$, o grafo $\Dcheck$ tem
dois nós, $v_1$ e $v_2$,
\[
\text{ligados por um arco $v_1v_2$.}
\]
Para cada arco $vw$ de $D$, o grafo $\Dcheck$ tem um arco $v_2w_1$.
Além disso, $\Dcheck$ tem dois novos nós, $r$ e $s$,
um arco $rv_1$ para cada fonte $v$ de $D$, e
um arco $w_2s$ para cada sorvedouro $w$ de $D$.
Os arcos da forma $v_1v_2$ serão chamados especiais;
eles representam os nós de $D$.
A rede $(\Dcheck,r,s)$ é
fonte-sorvedouro no sentido da seção 3.3.
Defina uma função-demanda $l$ sobre os arcos de $\Dcheck$
da seguinte maneira:
$l_e = 1$ se $e$ é um arco especial e $l_{e} = 0$ em caso contrário.
O teorema 3.10
aplicado à rede $(\Dcheck,l,r,s)$
garante que existe um fluxo $x$ de $r$ a $s$ tal que $x \geq l$
e existe um corte dirigido $\cutout(X)$ que separa $r$ de $s$
tal que
\[
\intens(x) = \lout(X)\,\text{.}
\]
Seja $B$ o conjunto dos nós de $D$ que $X$ De acordo com o adendo do
teorema 3.10,
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 $\intens(x)$ caminhos dirigidos simples
em $\Dcheck$,
todos de $r$ a $s$.
Sejam $P_1,\ldots,P_k$ esses caminhos, com $k = \intens(x)$.
É claro que cada arco especial de $\Dcheck$ pertence a algum dos caminhos.
Cada $P_i$ induz um caminho dirigido $Q_i$ em $D$.
O conjunto $\conj{Q_1,\ldots,Q_k}$ de caminhos é uma cobertura dos nós de $D$.
Ademais, o número de caminhos é $|B|$. ■
Formule um problema de fluxo máximo que resolva o escalonamento.
(Dica:
Coloque o conjunto $\conj{r_1,d_1,r_2,d_2,\ldots,r_n,d_n}$ de datas
em ordem crescente.
Seja $t_1 \lt t_2 \lt \cdots \lt t_{m+1}$
o conjunto ordenado de datas, com $m+1 \leq 2n$.
Agora, basta decidir que parte do processamento de cada tarefa $T_j$
será feita durante o intervalo $(t_i, t_{i+1})$.)
[CCPS 3.41]
[AMO 6.17]
Exercícios 3.3
3.4 Coberturas por caminhos
dual
de uma cobertura dos arcos é um corte dirigido.
Um corte dirigido num grafo
é máximo se nenhum outro tem mais arcos.
Teorema de Dilworth
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
nós distintos de $B$.
Uma anticadeia é máxima se nenhuma outra tem mais nós.
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.
quebra
, isto é,
o conjunto dos nós $v$ de $D$ tais que $X$ separa $v_1$ de $v_2$ em $\Dcheck$.
Observe que $|B| = \lout(X)$ e
portanto
\[
\intens(x) = |B|\,\text{.}
\]
Imagine agora, por um momento, que $B$ não é uma anticadeia.
Então existe um caminho dirigido em $D$
que vai de um nó $v$ de $B$ a outro nó $w$ de $B$.
Em $\Dcheck$,
esse caminho corresponde a um caminho dirigido
que vai de $v_2$ a $w_1$.
Portanto, o caminho começa em $V(\Dcheck)\setm X$ e termina em $X$,
e assim tem um arco em $\cutin(X)$.
Mas isso é impossível, pois o corte $\cutout(X)$ é dirigido.
Essa contradição mostra que $B$ é uma anticadeia.
Exercícios 3.4
Mais exercícios