Se x é uma solução ótima do programa linear (1) e M é um emparelhamento perfeito mínimo então cx ≤ c(M ). Em geral, a desigualdade é estrita. Entretanto, se o grafo é bipartido então vale a igualdade. É o que mostra um teorema clássico (1946) de Birkhoff:
Teorema 8.2 (Birkhoff) Um grafo bipartido G tem um emparelhamento perfeito se e somente se o programa linear (1) tem uma solução viável. Ademais, se G é bipartido e tem um emparelhamento perfeito então o custo de um emparelhamento perfeito mínimo é igual ao valor ótimo de (1).
Esse teorema pode ser deduzido do teorema 5.6 (página 66), que trata de fluxos de custo mínimo em redes capacitadas. Mas é mais interessante apresentar uma prova direta.
A prova do teorema 8.2 consiste em um algoritmo que resolve a restrição do pro- blema 8.1 a grafos bipartidos. Ao receber um grafo bipartido G, o algoritmo co- meça por determinar um potencial viável y e o correspondente “grafo de igualdade” Gy := (V (G), Ey). (Note que V (Gy) = V (G), ou seja, Gy não é apenas o subgrafo indu-
zido por Ey.) Em seguida, usa o algoritmo EMPBIPARTIDOPERFEITO(página108) para
procurar um ep em Gy. Se tiver sucesso, o ep encontrado é mínimo em G, conforme
a condição (4) de folgas complementares. Senão, EMPBIPARTIDOPERFEITO produzirá um emparelhamento imperfeito M em Gy e uma árvore frustrada T . Nesse caso, como
observamos na seção 7.4 (página 107), cada aresta de Gy tem uma ponta em B(T ) e
outra em A(T ). Então G não tenha ep algum ou existe um ε positivo com a seguinte propriedade: se somarmos ε ao potencial de cada nó em B(T ) e subtrairmos o mesmo εdo potencial de cada nó em A(T ), alguma nova aresta de G será acrescentada a Gy,
permitindo assim que o processo todo seja repetido, com maiores chances de sucesso. A operação de somar um número ao potencial dos nós de B(T ) e subtrair o mesmo número do potencial dos nós de A(T ) garante que as arestas que já estavam em Gy
continuem em Gy. Eis uma representação grosseira da estrutura do algoritmo:
enquanto M não é perfeito faça ajuste y e calcule Gy
M ←EMPBIPARTIDOPERFEITO(Gy)
EXEMPLO4: A figura mostra um grafo G, um emparelhamento M (linhas grossas), um potencial viável y e o grafo Gy(linhas contínuas). Não há ep em Gy.
y y y r +1 +2 +3 a +1 0 −1 b +2 +3 +4 d +3 +2 +1 f +1 +2 +3 g +2 +2 +1 h +3 +3 +4 i +2 +2 +2
A figura mostra também uma árvore frustrada T com raiz r em Gy. Temos B(T ) = {r, b, f } e
A(T ) = {a, d}. Adote ε = 1, some ε ao potencial de cada nó em B(T ) e subtraia ε ao potencial de cada nó em A(T ). O novo potencial é viável e está registrado na segunda coluna da tabela. As arestas f g e gh são acrescentadas a Gye a T . Mas Gycontinua não tedo um ep.
A próxima iteração calcula um novo potencial viável (terceira coluna da tabela). Isso acrescenta as arestas f i e hi a Gy, acrescenta a aresta hi a T , e assim revela o caminho aumentador (r, d, f, g, h, i).
Depois que esse caminho aumentador for processado, teremos um ep em Gy.
Esse algoritmo foi proposto por Kuhn (em 1955) e Munkers (em 1957) e ficou conhe- cido como algoritmo húngaro. O código tem dois processos iterativos, um encaixado no outro. O processo interno, que é essencialmente uma cópia do código de EMP- BIPARTIDOPERFEITO, ocupa as linhas 08–15, e opera sobre o grafo Gy, que permanece
inalterado. O processo externo, que ocupa as linhas 07–21, expande Gy acrescentando
arestas a Ey.
HÚNGARO(G) G é bipartido 01 seja y um potencial viável
02 seja M um emparelhamento qualquer em Gy talvez M = ∅
03 se M é um ep em Gy
04 então devolva M e pare 05 seja r um nó M -exposto em Gy
06 T ← ({r}, ∅) 07 repita
08 enquanto existe vw ∈ Ey com v ∈ B(T ) e w /∈ V (T ) faça
09 se w é coberto por M
10 então T ← ESTENDEÁRVORE(Gy, M, T, vw)
11 senão M ← AUMENTAEMP(Gy, M, T, r, vw)
12 se Gy tem nó M -exposto
13 então seja r um nó M -exposto
14 T ← ({r}, ∅)
15 senão devolva M e pare
16 ε ← min (¯cvw : v ∈ B(T ), w /∈ V (T ))
17 se ε = +∞ min tomado sobre conjunto vazio 18 então pare G não tem ep
19 senão yv ← yv+ εpara todo v ∈ B(T )
20 yv ← yv− ε para todo v ∈ A(T )
21 ¯cuv = cuv− yu− yv para cada uv em E(G)
No início de cada iteração do processo externo (linhas 07–21), 1. y é um potencial viável (e portanto ¯c ≥ 0),
2. M é um emparelhamento imperfeito em Gy.
No início de cada iteração do processo interno (linhas 08–15), 3. M é um emparelhamento imperfeito em Gy,
4. T é uma árvore M -alternante em Gy.
(Nas linhas 03, 05, 10 e 11, poderíamos trocar “Gy” por “G” pois V (Gy) = V (G).)
EXEMPLO5: Considere o grafo bipartido definido pela matriz de adjacências abaixo. À direita da matriz temos os custos c dos arcos.
a b c d a − − 1 1 b − − 1 1 c 1 1 − − d 1 1 − − ac ad bc bd c +90 +40 +75 +95
Comece a execução do algoritmo húngaro com o potencial viável y dado abaixo. Esse potencial determina o custo reduzido ¯ce o grafo Gydescritos a seguir. A tabela também dá o vetor caracte-
rístico x do emparelhamento M em Gyescolhido na linha 02.
y a +20 b 0 c +70 d +15 ac ad bc bd ¯ c 0 5 5 80 x 1 0 0 0 a b c d a − − 1 − b − − − − c 1 − − − d − − − −
A primeira iteração do bloco de linhas 08–21 começa com T = ({b}, ∅). Essa iteração não é capaz de aumentar o emparelhamento nem estender a árvore. Portanto, calcula ε = 5 e reajusta y, acrescentando bc a Ey.
dados a seguir, e com T = ({b}, ∅). y a +20 b +5 c +70 d +15 ac ad bc bd ¯ c 0 5 0 75 x 1 0 0 0 a b c d a − − 1 − b − − 1 − c 1 1 − − d − − − −
Essa segunda iteração acrescenta as arestas bc e ca à arvore. Em seguida calcula ε = 5 e reajusta y, acrescentando ad a Ey.
A terceira iteração do bloco de linhas 08–21 começa com y, ¯c, x e Gydados a seguir e com E(T ) =
{bc, ca}: y a +25 b +10 c +65 d +15 ac ad bc bd ¯ c 0 0 0 70 x 0 1 1 0 a b c d a − − 1 1 b − − 1 − c 1 1 − − d 1 − − −
Agora, x é o vetor característico de um ep em Gy. Esse ep (o mesmo do exemplo 3) é mínimo em G.
Desempenho. No pior caso, o algoritmo húngaro consome tempo O(mn2), 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 Gy a cada iteração.
O termo “n2” representa o consumo de tempo de EMPBIPARTIDOPERFEITO.
Exercícios
8.11 O que há de errado na seguinte afirmação? “Qualquer grafo bipartido com custos nas arestas tem um ep cujo custo é igual ao valor ótimo do pl (1).”
8.12 ? Mostre que a recíproca do teorema de Birkhoff (teorema8.2) é falsa. Isto é, mostre que existe um grafo não bipartido tal que, para todo vetor c com valores em Q, o valor ótimo do pl (1) é igual ao custo de um ep mínimo.[CCPS 5.23]
8.13 Reduza o problema do ep mínimo em grafos bipartidos ao problema do fluxo de custo mínimo (problema5.1). Em seguida, use o teorema5.6(seção5.4, página66) para provar o teorema de Birkhoff (teorema8.2).[CCPS 5.24]
8.14 ? Prove a primeira parte do teorema de Birkhoff (teorema 8.2), ou seja, mostre que um grafo bipartido G tem um ep se e somente se o pl (1) tem uma solução viável. (Dica: Suponha que G não tem ep e mostre que o pl dual (2) é ilimitado.)
8.15 Prove a primeira parte do teorema de Birkhoff (teorema8.2), ou seja, mostre que um grafo bipar- tido G tem um ep se e somente se o pl (1) tem uma solução viável. (Dica: Seja x uma solução viável do pl (1). Se x não é inteiro, existe um circuito C tal que 0 < xe< 1para cada aresta e de C.
Modifique x de modo a aumentar o número de componentes inteiras.)[CCPS 5.25]
8.16 Mostre que o pl (1) tem uma solução viável se e somente se existe um conjunto de arestas e circuitos ímpares tal que todo nó do grafo pertence a exatamente um dos circuitos ou a exatamente uma das arestas, mas não ambos.[CCPS 5.22]
8.17 Como calcular um potencial viável y na linha 01 do algoritmo HÚNGARO? (Procure calcular y de modo a colocar muitas arestas em Ey.)
8.18 Reescreva o código do algoritmo HÚNGAROtrocando o bloco de linhas 08-15 por uma invocação do algoritmo EMPBIPARTIDOPERFEITO(página108). Para isso, o algoritmo EMPBIPARTIDOPER-
M ← ∅(linha 01) e aceitar um emparelhamento imperfeito M como argumento. Segunda adap- tação: na linha 12, devolver M e T em lugar de A(T ).
8.19 Calcule um ep mínimo no grafo bipartido completo com bipartição ({a, b}, {c, d}) que tem os custos indicados abaixo. Comece com o potencial y indicado abaixo (ele é viável?) e com o emparelhamento M = {ac}. ac ad bc bd c +10 +50 +30 +30 y a 0 b +2 c +1 d +4
8.20 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 grafo de igualdade Gytenha muitas arestas.
ad ae af bd be bf cd ce cf c +20 +10 +50 +40 +30 +30 +50 +40 +20