MAC0499 Trabalho de Formatura Supervisionado Algoritmos para emparelhamentos Aluno: Roger Ricardo Flores de Araujo Orientador: José Coelho de Pina Brincando com ligações quı́micas No meio do caminho havia um caminho de aumento Emparelhamentos aparecem em quı́mica quando precisamos determinar as possı́veis estruturas de várias moléculas. A figura abaixo mostra a estrutura quı́mica parcial de uma molécula de hidrocarbonetos. A molécula contém átomos de carbono (representados por vértices com a letra ’C’) e átomos de hidrogênio (representados por vértices com a letra ’H’). Arestas representam ligações quı́micas entre átomos. Estas ligações quı́micas (que podem ser simples ou duplas), precisam satisfazer a valência correta para todos os vértices (a valência de um átomo é a soma de suas ligações quı́micas). Átomos de carbono têm valência 4 e átomos de hidrogênio têm valência 1. Um caminho P num grafo (V, E) é alternante em relação a um emparelhamento M , se as arestas de P estão alternadamente em M e E − M . Um caminho alternante é de aumento se suas extremidades não estão emparelhadas. Caminhos de aumento nos possibilitam encontrar emparelhamentos com maior quantidade de arestas, como mostra a figura a seguir. Contração: Seja G um grafo e O uma flor de G. Crie um novo grafo, no qual todos os vértices e arestas de O serão substituı́dos por um único novo pseudo-vértice S. Na figura seguinte temos o grafo resultante da contração de O. H H S M’:=P M H C C C C C H C C C C C C C C H H H H C C H C C C C C C C C C C C C H C H C C C H H C H H C C H H C C C C C H H C C C C C H Na parte esquerda da figura, temos um caminho aumentador P , no qual as arestas gordas são do emparelhamento M . Nas parte direita temos um emparelhamento de cardinalidade |M | + 1, obtido através da diferença simétrica entre P e M . O Método Húngaro encontra um emparelhamento máximo através de uma seqüência de caminhos de aumento. Cada caminho de aumento no grafo contraı́do pode ser convertido num caminho de aumento no grafo original. Aplicando alternadamente o método húngaro e contração, encontramos caminhos de aumento, se existirem. A próxima figura simula como o algoritmo da flor faria para encontrar um emparelhamento máximo no grafo ilustrado anteriormente. S Nem tudo são flores H H H H Na figura, cada aresta determina um ligação quı́mica simples e, conseqüentemente, cada átomo de hidrogênio possui valência 1, mas cada átomo de carbono possui somente valência 3. Gostarı́amos de determinar quais pares de átomos de carbono são ligados por uma ligação dupla para que cada átomo de carbono tenha valência 4. Poderı́amos formular este problema para determinar alguma provável estrutura de ligações duplas como um problema de emparelhamento. Na parte direita da figura acima, mostramos uma provável estrutura de componentes, na qual as arestas destacadas do grafo mostram as ligações duplas entre os átomos Aplicado a grafos não bipartidos, o método húngaro sofre uma ”certa dificuldade” quando encontra um circuito ı́mpar no grafo. Na figura abaixo, O é um circuito ı́mpar. S=V(O) S u Quaisquer duas arestas em M não têm vértice em comum. O problema no qual estamos interessados é o chamado problema do emparelhamento máximo: Dado um grafo (V, E), encontrar um emparelhamento de cardinalidade máxima. Vamos resolvê-lo inicialmente no caso mais simples (grafos bipartidos) e posteriormente no caso mais complexo (grafos não bipartidos). S’ Contrai S’ S Expande S’ S’’ Mas afinal, o que é um emparelhamento? Tipicamente, num emparelhamento, estamos interessados em dividir uma coleção em pares a fim de maximizar algum lucro ou minimizar um certo custo, sendo que tanto o lucro quanto o custo de cada par é conhecido previamente. Formalmente, podemos pensar da seguinte forma. Seja (V, E) um grafo não-orientado com conjunto V de vértices e conjunto E de arestas. Um emparelhamento (matching) em (V, E) é uma parte M de E dotada da seguinte propriedade: Expande S Contrai S b v S O P S S’ Contrai S’’ S’’ S’ Expande S’’ Aumente S’’ Quer saber mais? Um circuito O é alternante em relação a um emparelhamento M se M ∩ E(O) é um emparelhamento máximo em O. Quando O é um circuito alternante ı́mpar, é chamado de flor. O vértice de uma flor que não está emparelhado é chamado de botão da flor. Finalmente, se o botão b de uma flor é ligado a um vértice não emparelhado por um caminho alternante P com V (P ) ∩ V (O) = {b}, então P é chamado de haste da flor. Para superar a dificuldade sofrida pelo método húngaro, Jack Edmonds propôs o algoritmo das flores, no qual flores são ”contraı́das” assim que são encontradas. Caso haja interesse em saber mais detalhes, todo o material relacionado à iniciação cientı́fica está disponı́vel na Internet. A monografia contendo toda a teoria estudada, as implementações dos algoritmos e outras referências relacionadas podem ser encontradas nos sı́tios do projeto: http://www.ime.usp.br/~coelho/oticomb/ http://www.linux.ime.usp.br/~raraujo/mac499/