• Nenhum resultado encontrado

Algoritmo para grafos bipartidos

No documento Curso de Otimização Combinatória (páginas 128-132)

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

No documento Curso de Otimização Combinatória (páginas 128-132)