Agora que sabemos calcular um emparelhamento perfeito (veja o capítulo 7) num grafo não-dirigido, podemos empreender o próximo passo: calcular um emparelhamento perfeito de custo mínimo. Este capítulo resolve o problema em grafos bipartidos e faz um esboço da solução no caso geral.
As técnicas desenvolvidas para resolver o problema estão na origem da chamada combinatória poliédrica, que se tornou ferramenta essencial no estudo de muitos problemas de otimização combinatória.
Todos os grafos neste capítulo são não-dirigidos. Por isso, diremos simplesmente grafo, deixando subentendido o adjetivo não-dirigido. Para conferir as definições de outros termos técnicos, consulte o índice remissivo e os apêndices.
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, ou nulo.) Para qualquer conjunto $M$ de arestas, denotaremos por $c(M)$ a soma $\sum_{e\in M} c_e$.
Problema 9.A (emparelhamento perfeito mínimo) Dado um grafo $G$ e uma função $c$ que atribui um custo em $\R$ a cada aresta, encontrar um emparelhamento perfeito $M$ que minimize $c(M)$.
Usaremos as abreviaturas ep
e ep mínimo
para as expressões emparelhamento perfeito
e emparelhamento perfeito de custo mínimo
respectivamente.
(É razoável omitir a expressão de custo
pois mínimo
não poderia estar se referindo à cardinalidade do emparelhamento.)
Exemplo 9.1: Considere o grafo definido pela matriz de adjacências abaixo. Os custos das arestas são dados na tabela. Há dois ep's, sendo $\conj{ad,bc}$ o que tem custo mínimo.
Para projetar um algoritmo para o problema 9.A, é importante representar o problema por meio de um programa linear. Se $x$ é o vetor característico de um ep num grafo $G$ então $x(\cut(v))=1$ para cada nó $v$ de $G$. Portanto, o problema do ep mínimo pode ser representado pelo seguinte programa linear: encontrar um vetor real $(x_e : e\in E)$ que
\begin{equation}\label{lp:bipartite-min-cost-pm} \begin{split} \text{minimize} \quad cx & \\ \text{sob as restrições} \quad x(\cut(v)) & \ = \ 1 \quad \text{para cada $v$ em $V$}\\ x_e & \ \geq \ 0 \quad \text{para cada $e$ em $E$,} \end{split} \end{equation}
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 9.A
desde que $x$ seja inteiro.
Entretanto, muitas soluções ótimas do pl não são
inteiras.
[Se trocarmos
a restrição $x_e\geq 0$
por $x_e \in \conj{0,1}$
—
ou, alternativamente,
por $x_e\in \Zplus$
—
o programa \eqref{lp:bipartite-min-cost-pm}
representará corretamente o problema 9.A,
mas deixará de ser linear.]
(Compare \eqref{lp:bipartite-min-cost-pm} 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.)
Exemplo 9.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 \eqref{lp:bipartite-min-cost-pm}.
Exemplo 9.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 $x'$ do pl \eqref{lp:bipartite-min-cost-pm}. As soluções $x$ e $x'$ são ótimas, mas apenas $x'$ representa um ep.
Exemplo 9.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$, $x'$, $x''$ e $x'''$ do pl \eqref{lp:bipartite-min-cost-pm}. Observe que $cx=20$, $cx'=19$, $cx''=20$ e $cx'''=30$. Apenas $x''$ e $x'''$ representam ep's, e nenhum deles é mínimo.
Programa dual. O dual do programa linear \eqref{lp:bipartite-min-cost-pm} consiste em encontrar um vetor real $(y_v : v\in V)$ que
\begin{equation}\label{lp:dual:bipartite-min-cost-pm} \begin{split} \text{maximize} \quad y\,1 & \\ \text{sujeito a} \quad y_v+y_w & \ \leq \ c_{vw} \quad \text{para cada $vw$ em $E$.} \end{split} \end{equation}
A expressão $y\,1$ denota a soma $\sum_{v\in V} y_v$. Diremos que um vetor $y$ que satisfaz as restrições \eqref{lp:dual:bipartite-min-cost-pm} é um potencial viável. [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 $y_v$.] É fácil encontrar um potencial viável: se $c_e \geq \alpha$ para toda aresta $e$ então o potencial que atribui $\alpha/2$ a cada nó é viável.
Dado um potencial $y$, o custo reduzido de uma aresta $vw$ é o número $c_{vw}-y_v-y_w$. O vetor de custos reduzidos será denotado por $\cy$. Portanto, \[ \cy_{vw} := c_{vw} - y_v - y_w \] para cada aresta $vw$. Observe que $\cy\geq 0$ se e somente se o potencial $y$ é viável.
Como se sabe, uma solução viável $x$ do pl \eqref{lp:bipartite-min-cost-pm} é ótima se e somente se existe um potencial 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 \begin{equation}\label{eq:complementary-slackness-min-cost-pm-2} x_e = 0 \quad \text{ou} \quad \cy_e = 0 \end{equation} para todo $e$ em $E$.
Exemplo 9.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 $\cy$ de custos reduzidos, e soluções viáveis $x$ e $x'$ do pl \eqref{lp:bipartite-min-cost-pm}.
As soluções viáveis $x$ e $y$ têm folgas complementares. Portanto, $x$ é solução ótima do pl \eqref{lp:bipartite-min-cost-pm}. Sendo binário, $x$ representa um ep mínimo.
As folgas das soluções viáveis $x'$ e $y$ também são complementares e portanto $x'$ é solução ótima do pl \eqref{lp:bipartite-min-cost-pm}. Mas $x'$ não representa um ep.
Como veremos na próxima seção, o programa linear dual \eqref{lp:dual:bipartite-min-cost-pm} e o conceito de potencial viável têm um papel importante no projeto de um algoritmo para o problema 9.A, pelo menos quando o problema é restrito a grafos bipartidos.
$x_e\leq 1$ para cada $e\in E$?
Seja $(G,c)$ uma instância
do problema 9.A
e considere a correspondente instância do
pl \eqref{lp:bipartite-min-cost-pm}.
Seja $y$ um potencial viável
e $\cy$ o correspondente custo reduzido.
Dizemos que uma aresta $e$ de $G$ está justa
se $\cy_e=0$.
O conjunto das arestas justas
será denotado por $\Eequ$
e às vezes denominado conjunto justo
.
A seguinte observação é o ponto de partida do projeto de um algoritmo para o problema 9.A. Dado um potencial viavel $y$ e um ep $M$ em $G$, se \begin{equation}\label{eq:matching-subseteq-equality-set} M \subseteq \Eequ \end{equation} então as folgas de $y$ e do vetor característico de $M$ são complementares, ou seja, satisfazem \eqref{eq:complementary-slackness-min-cost-pm-2}, e portanto $M$ é um ep mínimo. Assim, para encontrar um ep mínimo em $(G,c)$, basta encontrar um potencial viável $y$ e um ep no subgrafo gerador justo $(V(G),\Eequ)$. Se $G$ for bipartido, um tal par $(y,M)$ existe. (Para uma prova não algorítmica desse fato, veja o teorema de Birkhoff no capítulo 10.)
Preliminares. A procura por um ep no grafo $(V(G),\Eequ)$ pode ser executada pelo algoritmo EmpBipartidoPerfeito da seção 7.4. Por isso, convém resumir alguns dos conceitos introduzidos na seção 7.3.
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 7.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, não tem circuitos ímpares e portanto não tem arestas preto-pretas, como observamos na seção 7.3.
O algoritmo húngaro. O algoritmo que resolve a restrição do problema 9.A a grafos bipartidos foi proposto por H. Kuhn (1955) e J. Munkers (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 EmpBipartidoPerfeito para procurar um ep no grafo justo $\Gequ := (V(G),\Eequ)$. Se um tal ep for encontrado, o problema está resolvido graças a \eqref{eq:matching-subseteq-equality-set}. 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 \subseteq \Eequ$. (Na primeira iteração, $y$ é um potencial viável arbitrário.) Se $M$ é perfeito, o problema está resolvido. Suponha agora que $M$ não é perfeito. Então um código análogo ao de EmpBipartidoPerfeito é usado para calcular uma árvore $M$-alternante $T$ em $\Gequ$. Se $T$ levar a um caminho aumentador, começamos uma nova iteração com um emparelhamento maior. Caso contrário, $T$ é frustrada em $\Gequ$. Nesse caso, a árvore frustrada é usada como guia para ajustar o potencial viável $y$.
O ajuste de $y$ é feito da seguinte maneira. Seja $F$ o conjunto das arestas preto-verdes de $G$ e $F'$ o conjunto das arestas preto-vermelhas de $G$. (É claro que $F\cup F'$ é disjunto de $\Eequ$.) Se $F\cup F'$ é vazio então toda aresta de $G$ com uma ponta preta tem a outra branca, donde $T$ é frustrada em $G$, e assim $G$ não tem ep algum. Suponha agora que $F\cup F'$ não é vazio. Seja $\epsilon$ o menor custo reduzido dentre as arestas de $F\cup F'$, isto é, $\epsilon := \min\left(\cy_{vw} : vw\in F\cup F'\right)$. Um novo potencial é calculado da seguinte maneira: para cada nó $v$ de $T$,
O novo potencial é viável (veja o exercício abaixo). Uma nova iteração começa com esse novo potencial. O novo conjunto justo pode não ser um superconjunto do anterior. Ainda assim, o novo conjunto justo contém $M$ e $E(T)$. Ademais, o novo conjunto justo contém alguma aresta de $F\cup F'$, uma vez que $\epsilon > 0$. Uma nova iteração começa com o novo valor de $y$ e com o emparelhamento $M$ da iteração anterior.
Como se vê, o algoritmo avança ajustando o potencial viável $y$ e, ao mesmo tempo, o emparelhamento $M$. Esse tipo de algoritmo é conhecido como primal-dual e aparece frequentemente em otimização combinatória.
Exemplo 9.6 [CCPS fig.5.12]: 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 é $\Eequ=\conj{ra, ab, rd, df, gh}$. O algoritmo húngaro começa com o emparelhamento $M:=\conj{ab,df,gh}$ representado pelas linhas grossas da figura. A primeira iteração do algoritmo procura um ep no subgrafo justo $(V,\Eequ)$. 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.
Em $G$, o conjunto das arestas preto-verdes e preto-vermelhas é $F\cup F' :=\conj{bg, fg, fi}$. O menor custo reduzido nesse conjunto é $\epsilon:=1$. Um novo potencial é calculado somando $\epsilon$ ao potencial de cada nó preto e subtraindo $\epsilon$ do potencial de cada nó branco. Esse segundo potencial é viável. A aresta $fg$ fica justa e portanto pertence ao novo $\Eequ$.
Na segunda iteração, a árvore $T$ continua crescendo no novo subgrafo justo. As arestas $fg$ 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\cup F' :=\conj{fi, hi}$. O menor custo reduzido nesse conjunto é $\epsilon:=1$. Um novo potencial viável é calculado somando $\epsilon$ ao potencial de cada nó preto e subtraindo $\epsilon$ do potencial de cada nó branco. As arestas $fi$ e $hi$ tornam-se justas.
Na terceira iteração, a árvore $T$ continua crescendo no (novo) subgrafo justo. A aresta $hi$ é acrescentada 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,\Eequ)$. 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:
Segue o código do algoritmo húngaro:
Húngaro $(G, c)$ $\rhd$ $G$ é bipartido |
01 . seja $y$ um potencial viável |
02 . seja $M\subseteq \Eequ$ um emparelhamento em $G$ $\rhd$ talvez $M \larr \emptyset$ |
03 . enquanto o emparelhamento $M$ não é perfeito faça |
04 .ooo seja $r$ um nó $M$-exposto |
05 .ooo $T \larr (\conj{r},\emptyset)$ |
06 .ooo repita |
07 .oooooo enquanto existe aresta preto-verde em $\Eequ$ faça |
08 .ooooooooo seja $vw$ uma aresta preto-verde em $\Eequ$ |
09 .ooooooooo $T \larr \text{}$ EstendeÁrvore $(G,M,T,vw)$ |
10 .oooooo se não existe aresta preto-vermelha em $\Eequ$ $\rhd$ $T$ é frustrada |
11 .ooooooooo então seja $F$ o conjunto das arestas preto-verdes de $G$ |
12 .ooooooooo então seja $F'$ o conjunto das arestas preto-vermelhas de $G$ |
13 .ooooooooo então se $F\cup F'=\emptyset$ |
14 .oooooooooooo então então seja $A$ o conjunto dos nós brancos de $T$ |
15 .oooooooooooo então então devolva $A$ e pare $\rhd$ $G$ não tem ep |
16 .ooooooooo então $\epsilon \larr \min\left(c_{vw}-y_v-y_w : vw\in F\cup F'\right)$ |
17 .ooooooooo então $y_v\larr y_v+\epsilon$ para cada $v$ preto |
18 .ooooooooo então $y_v\larr y_v-\epsilon$ para cada $v$ branco |
19 .ooooooooo senão seja $vw$ uma aresta preto-vermelha em $\Eequ$ |
20 .ooooooooo senão $M \larr \text{}$ AumentaEmp $(G,M,T,vw)$ |
21
.ooooooooo
senão interrompa o repitada linha 06 $\rhd$ break |
22 . devolva $M$ e $y$ e pare |
Exceto pelas linhas 11 a 13 e 16 a 18, o código é essencialmente igual ao do algoritmo EmpBipartidoPerfeito da seção 7.4.
O processo iterativo externo, que ocupa as linhas 03 a 21, procura um ep no conjunto justo $\Eequ$. No início de cada iteração desse processo temos um potencial viável $y$ e um emparelhamento $M\subseteq \Eequ$.
O processo iterativo interno, que ocupa as linhas 06 a 21, recebe um emparelhamento imperfeito $M$ e procura um caminho $M$-aumentador no subgrafo justo. No início de cada iteração desse processo, temos não só um potencial viável $y$ e um emparelhamento imperfeito $M\subseteq \Eequ$, como também uma árvore $M$-alternante $T$ com $E(T)\subseteq \Eequ$. O algoritmo pode alterar $y$ durante a iteração, mas as propriedades $M\subseteq \Eequ$ e $E(T)\subseteq \Eequ$ são preservadas e pelo menos uma nova aresta torna-se justa.
Na linha 15, temos $\oc_1(G{-}A) > |A|$. A existência de um tal $A$ prova que $G$ não tem ep, conforme o lema 7.2.
Exemplo 9.7: Considere o grafo bipartido definido pela matriz de adjacências abaixo. À direita da matriz temos os custos das arestas.
Comece a execução do algoritmo Húngaro com o potencial viável $y$ dado abaixo. Esse potencial determina o custo reduzido $\cy$ e o subgrafo justo $\Gequ$ cuja matriz aparece abaixo. A tabela dá o vetor característico $x$ do emparelhamento $M$ escolhido na linha 02 do algoritmo.
A primeira iteração chega à linha 11 com $T=(\conj{b},\emptyset)$. Nas linhas 11 a 18, calcula $\epsilon=5$ e altera $y$, tornando justa a aresta $bc$. Veja os novos valores das variáveis:
A segunda iteração acrescenta as arestas $bc$ e $ca$ à arvore $T$. Em seguida, calcula $\epsilon=5$ e altera $y$, tornando justa a aresta $ad$. Veja os novos valores das variáveis:
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 \eqref{eq:matching-subseteq-equality-set}, o ep é mínimo em $G$.
Veja um resumo do rastreamento da execução do algoritmo. Cada linha da tabela descreve os valores das variáveis ao longo de uma iteração:
Desempenho.
No pior caso, o algoritmo Húngaro
consome $\Oh(m n^2)$ unidades de tempo,
sendo $m$ o número de arestas e $n$ o número de nós do grafo.
O termo $m$
é consequência do processo iterativo externo,
que acrescenta pelo menos uma aresta a $\Gequ$ a cada iteração.
O termo $n^2$
representa o consumo de tempo
do algoritmo EmpBipartidoPerfeito.
Todo grafo bipartido com custos nas arestas tem um ep cujo custo é igual ao valor ótimo do pl \eqref{lp:bipartite-min-cost-pm}.O que há de errado?
O programa linear \eqref{lp:bipartite-min-cost-pm}
representa mal o problema 9.A,
a menos que o grafo seja bipartido.
Tipicamente,
o custo $c(M)$ de um ep mínimo $M$ é estritamente maior
que o custo $cx$ de uma solução ótima $x$ do pl,
e a correspodente solução $x$ não é inteira.
Precisamos de um pl mais poderoso
,
com restrições lineares que cortem fora
as soluções não-inteiras do pl \eqref{lp:bipartite-min-cost-pm}.
A ideia de acrescentar restrições lineares a um pl
para eliminar soluções fracionárias indesejadas
é muito efetiva e mostrou-se útil
em muitos problemas de otimização combinatória.
Dizemos que um corte $\cut(S)$ num grafo $G$ tem margem ímpar se $|S|$ é ímpar. (A paridade de $|\cut(S)|$ é irrelevante.) Denotaremos por $\Fcal$ o conjunto de todos os subconjuntos $S$ de $V(G)$ tais que $|S|$ é ímpar. Se $S \in \Fcal$ e $x$ é o vetor característico de um ep então é claro que \begin{equation}\label{eq:blossom-inequality} x(\cut(S)) \geq 1\text{.} \end{equation} Portanto, podemos acrescentar essas desigualdades ao pl \eqref{lp:bipartite-min-cost-pm}. O resultado é o seguinte pl:
\begin{equation}\label{lp:min-cost-pm} \begin{split} \text{minimize} \quad cx & \\ \text{sujeito a} \quad x(\cut(v)) & \ = \ 1 \quad \text{para cada $v$ em $V$}\\ x(\cut(S)) & \ \geq \ 1 \quad \text{para cada $S$ em $\Fcal$}\\ x_e & \ \geq \ 0 \quad \text{para cada $e$ em $E$.} \end{split} \end{equation}
As restrições $x(\cut(S))\geq 1$
são conhecidas como
desigualdades florais
(= blossom inequalities).
O número de desigualdades florais é enorme
pois o conjunto $\Fcal$ é enorme.
É bem verdade que algumas dessas desigualdades são claramente redundates.
Em primeiro lugar, se $|S|=1$ então a restrição $x(\cut(S))\geq 1$
está subentendida em $x(\cut(v))=1$.
O mesmo acontece se $|\compl{S}|=1$,
sendo $\compl{S} = V\setm S$.
Em segundo lugar,
se $|S|$ e $|\compl{S}|$ são ímpares
então as restrições $x(\cut(S))\geq 1$ e $x(\cut(\compl{S}))\geq 1$
são idênticas e portanto uma pode ser eliminada.
Mas a eliminação dessas redundâncias óbvias
não leva a uma redução significativa
do número de desigualdades florais.
Em cada instância específica do pl \eqref{lp:min-cost-pm},
a grande maioria das desigualdades florais se revela redundante
por razões que não são óbvias.
A dificuldade está em saber quais desigualdades florais
poderiam ser ignoradas.
Programa dual. O pl dual de \eqref{lp:min-cost-pm} tem uma variável $y_v$ para cada nó $v$ e uma variável $Y_S$ para cada $S$ em $\Fcal$ e consiste em encontrar um par $(y,Y)$ que \begin{equation}\label{lp:dual:min-cost-pm} \begin{split} \text{maximize} \quad \textstyle y1 + Y1 & \\[0.5ex] \text{sujeito a} \quad \textstyle y_v+y_w + \sum (Y_S : S\in \Fcal_{vw}) & \ \leq \ c_{vw} \quad \text{para cada $vw$ em $E$}\\ Y_S & \ \geq \ 0 \quad \text{para cada $S$ em $\Fcal$,} \end{split} \end{equation}
sendo $y1 = \sum_{v\in V} y_v\,$, $Y1 = \sum_{S\in \Fcal} Y_S$ e $\Fcal_{vw} := \conj{S \in \Fcal : \cut(S)\ni vw}$.
Dado um par $(y,Y)$, o custo reduzido de qualquer aresta $vw$ é o número $\cyY_{vw}$ definido assim: \[\textstyle \cyY_{vw} := c_{vw} - y_v - y_w - \sum (Y_S : S\in \Fcal_{vw})\text{.} \] Portanto, $(y,Y)$ é viável em \eqref{lp:dual:min-cost-pm} se e somente se $\cyY_e\geq 0$ para cada $e$ em $E$ e $Y_S\geq 0$ para cada $S$ em $\Fcal$.
Folgas complementares. Para qualquer solução viável $x$ do pl \eqref{lp:min-cost-pm} e qualquer solução viável $(y,Y)$ do pl \eqref{lp:dual:min-cost-pm}, temos $cx=y1+Y1$ se e somente se valem as seguintes folgas complementares: para cada $e$ em $E$, \[ x_e = 0 \quad \text{ou} \quad \cyY_e = 0 \] e, para cada $S$ em $\Fcal$, \[ x(S) = 1 \quad \text{ou} \quad Y_S = 0\text{.} \] Dada uma solução viável $(y,Y)$ do pl dual \eqref{lp:dual:min-cost-pm}, as condições de folgas complementares têm a seguinte consequência: se $M$ é um ep tal que
$M \subseteq \EequY$ e $|M\cap S| = 1$ para cada $S$ em $\Fcal$ tal que $Y_S > 0$
então $M$ é um ep mínimo.
Laminaridade. Em geral, numa solução ótima $(y,Y)$ de \eqref{lp:dual:min-cost-pm}, a maior parte das componentes de $Y$ é nula. Ademais, os conjuntos $S$ para os quais $Y_S>0$ formam uma coleção laminar (veja a seção A.5 do apêndice A) e portanto há menos que $2|V|$ deles.
Exemplo 9.8 [CCPS fig.5.13]: Para a instância do problema 9.A descrita a seguir, uma solução ótima do pl \eqref{lp:bipartite-min-cost-pm} não define um ep.
Considere então os pl's \eqref{lp:min-cost-pm} e \eqref{lp:dual:min-cost-pm}. Uma solução viável $x$ do pl \eqref{lp:min-cost-pm} e uma solução viável $(y,Y)$ do pl dual \eqref{lp:dual:min-cost-pm} estão indicadas abaixo, juntamente com o custo reduzido $\cyY$. O vetor dual $Y$ tem uma única componente não nula: $Y_S>0$ apenas quando $S = \conj{a,b,c}$. (São nulas, por exemplo, as componentes de $Y$ que correspondem aos conjuntos $\conj{a,d,f}$, $\conj{a,c,f}$ e $\conj{a,c,d}$.)
Com um pouco de paciência, verificamos que os valores $\cyY$ na tabela estão corretos e são não-negativos. Tomando $M:=\conj{e : x_e=1}$, constatamos que $M$ é um ep e $M \subseteq \EequY$. Além disso, $|M\cap \cut(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 + Y1$. Veja outro potencial $(y,Y)$ que tem folgas complementares com as de $x$:
promissores; se isso não produzir o vetor característico de um ep, acrescente a $\Fcal'$ mais alguns elementos de $\Fcal$ que pareçam promissores e repita o processo.
Em 1965, J. Edmonds usou os pl's \eqref{lp:min-cost-pm} e \eqref{lp:dual:min-cost-pm} como ponto de partida para obter um algoritmo que resolve o problema 9.A do ep mínimo. O algoritmo de Edmonds é conhecido como algoritmo das flores para ep mínimo (= blossom algorithm for minimum perfect matching). O ponto de partida é o algoritmo EmpPerfeito da seção 7.6. As flores produzidas por EmpPerfeito correspondem, grosso modo, aos conjuntos ímpares $S$ que têm $Y_S\neq 0$.
A discussão do algoritmo foge ao escopo destas notas. Vou me limitar a exibir o código, sem maiores explicações.
Blossom $(G,c)$ |
01 . seja $y$ uma solução viável do pl \eqref{lp:dual:bipartite-min-cost-pm} |
02 . seja $M \subseteq \Eequ$ um emparelhamento em $G$ $\rhd$ talvez $M \larr \emptyset$ |
03 . enquanto o emparelhamento $M$ não é perfeito faça |
04 .ooo $G' \larr G$, $c' \larr c$, $M' \larr M$ $\rhd$ $G'$ é o grafo derivado |
05 .ooo seja $r$ um nó $M'$-exposto de $G'$ |
06 .ooo $T' \larr (\conj{r},\emptyset)$ |
07 .ooo repita $\rhd$ as pontas das arestas são tomadas em $G'$ |
08 .oooooo enquanto existe aresta preto-verde ou preto-preta em $\Eequ$ |
09 .ooooooooo seja $vw$ uma aresta preto-verde ou preto-preta |
10 .ooooooooo se $vw$ é preto-verde |
11 .oooooooooooo então $T' \larr \text{}$ EstendeÁrvore $(G',M',T',vw)$ |
12 .oooooooooooo senão ContraiFlor $(G',M',T',vw,c')$ |
13 .oooooo se existe pseudonó branco $v$ tal que $y_v=0$ |
14 .ooooooooo então expanda $v$ e atualize $M'$, $T'$, e $c'$ |
15 .oooooo se não existe aresta preto-vermelha em $\Eequ$ |
16 .ooooooooo então seja $A'$ o conjunto dos nós brancos de $T'$ |
17 .ooooooooo então se $A'$ tem pseudonós |
18 .oooooooooooo então então $y\larr \text{}$ Ajuste $(G',c',M',T',y)$ |
19 .oooooooooooo então senão devolva $A'$ e pare $\rhd$ $G$ não tem ep |
20 .oooooo seja $vw$ uma aresta preto-vermelha em $\Eequ$ |
21 .oooooo $M' \larr \text{}$ AumentaEmp $(G',M',T',vw)$ |
22 .oooooo estenda $M'$ a um ep $M$ em $G$ |
23 . devolva $M$ e pare $\rhd$ $M$ é um ep |
Esse algoritmo pode ser implementado de modo a consumir $\Oh(n^2m)$ unidades de tempo.