Emparelhamentos Máximos em Grafos Bipartidos

Documentos relacionados
1 Distância em Grafos

Resumo. O Problema da Atribuição de Tarefas pode ser traduzido para a Teoria dos Grafos da seguinte

GRAFOS ORIENTADOS. PSfrag replacements. Figura 1: Exemplo de um grafo orientado.

Estratégias vencedoras para o jogo Slither

Estruturas de Dados para Conjuntos Disjuntos: Union-find Letícia Rodrigues Bueno

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

Antes do Teorema de Hall, alguns conceitos importantes...

Teoria dos Grafos. Professor: Guilherme Oliveira Mota.

Teoria dos Grafos. Valeriano A. de Oliveira, Socorro Rangel, Silvio A. de Araujo. Departamento de Matemática Aplicada

5COP096 TeoriadaComputação

5COP096 TeoriadaComputação

Busca em Largura Letícia Rodrigues Bueno

Definição e Conceitos Básicos

Teoria dos Grafos. Valeriano A. de Oliveira, Socorro Rangel, Silvio A. de Araujo. Departamento de Matemática Aplicada

Teoria dos Grafos. Valeriano A. de Oliveira, Socorro Rangel, Silvio A. de Araujo. Capítulo 16: Grafos Planares. Departamento de Matemática Aplicada

Grafos. Exemplo de árvore geradora mínima. Notas. Notas. Notas. Notas. Árvores espalhadas mínimas. Como construir uma árvore geradora miníma

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

Cortes (cut sets) 2010/2 Teoria dos Grafos (INF 5037/INF2781) CC/EC/UFES

Algoritmos em redes de fluxo e aplicações

06 Grafos: Caminhos Mínimos SCC0503 Algoritmos e Estruturas de Dados II

1.2 Grau de um vértice

Invariantes de Laço. Profa. Sheila Morais de Almeida. junho DAINF-UTFPR-PG

2 Definição do Problema

Caminho Mínimo de Fonte Única em Grafos sem Pesos Negativos

Grafos Caminhos mais Curtos

Algoritmos em Grafos: Caminho Mínimo

Representações de Grafos

Algoritmos em Grafos

Teoria da Complexidade Computacional

PROBLEMA DO CARTEIRO CHINÊS

CAL ( ) MIEIC/FEUP Grafos: Introdução (Março, 2011)

Introdução a Grafos Letícia Rodrigues Bueno

Teste de Software. Técnica de Teste Estrutural. Rosemary Silveira Filgueiras Melo

AED Algoritmos e Estruturas de Dados LEE /2004

ESTRUTURAS DE DADOS (LEI, LM, LEE) Universidade da Beira Interior, Departamento de Informática Hugo Pedro Proença, 2017/2018

Teoria dos Grafos. Árvores Geradoras

Web site. Profa. Patrícia Dockhorn Costa.

GRAFOS Aula 02 Formalização: definições Max Pereira

umgrafo, em que V representa o conjunto dos vértices de G e E o conjunto das é um grafo bipartido;

Implementação de algoritmos para consultas de segmentos em janelas

x y Grafo Euleriano Figura 1

INSTITUTO FEDERAL DO ESPÍRITO SANTO CURSO BACHARELADO EM SISTEMAS DE INFORMAÇÃO

Prova Didática Grafos: Árvores Geradoras e Caminhos Mínimos, Análise de Complexidade

Estruturas de Dados Aula 1: Introdução e conceitos básicos 28/02/2011

Grafos: algoritmos de busca

Otimização em Grafos

Referências e materiais complementares desse tópico

Análise de Algoritmos

Estruturas de Dados Apresentação

Grafos Prismas Complementares Bem-cobertos

Grafos e Algoritmos Raimundo Macêdo. Teorema de Hall (Prova por Indução)

Planaridade AULA. ... META Introduzir o problema da planaridade de grafos. OBJETIVOS Ao final da aula o aluno deverá ser capaz de:

Teoria dos Grafos Aula 6

Caminho Mínimo de Fonte Única em Grafos com Pesos Negativos Letícia Rodrigues Bueno

Teste de Software. Técnica de Teste Estrutural. Rosemary Silveira Filgueiras Melo

AULA 11 PROJETO E ANÁLISE DE ALGORITMOS. Conceitos básicos e representação de grafos Karina Valdivia Delgado

Grafos: componentes fortemente conexos, árvores geradoras mínimas

Busca em Largura. Adaptado de Humberto C. B. Oliveira

Grafos Árvores Geradoras Mínimas

Informática I. Aula 14. Aula 14-10/10/2007 1

Teoria dos Grafos. Valeriano A. de Oliveira, Socorro Rangel, Silvio A. de Araujo. Capítulo 13: Árvores. Departamento de Matemática Aplicada

Projeto e Análise de Algoritmos

Estruturas de Dados. Grafos VIII: Árvores Geradoras Mínimas. Prof. Ricardo J. G. B. Campello

SIN5013 Análise de Algoritmos e Estrutura de Dados - 1o Semestre de 2019

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

Grafos COM11087-Tópicos Especiais em Programação II

INF 1010 Estruturas de Dados Avançadas

CIC 111 Análise e Projeto de Algoritmos II

Grafos: árvores geradoras mínimas. Graça Nunes

Busca em Profundidade. Busca em Grafos. Busca em Grafos. Busca em Grafos. Busca em Grafos. Os objetivos da busca são: Aplicações???

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

Noções da Teoria dos Grafos

Relações de Recorrência

Conceitos Básicos da Teoria de Grafos

Volmir Eugênio Wilhelm Departamento de Engenharia de Produção UFPR 45

Teoria dos Grafos. Edson Prestes

Doutorado em Ciência da Computação. Algoritmos e Grafos. Raimundo Macêdo

03 Grafos: percurso, ponderação e caminhos SCC0503 Algoritmos e Estruturas de Dados II

GRAFOS Conceitos Básicos (Parte 1)

não descobertos descobertos explorados descoberta cruzamento

Introdução à Teoria dos Grafos

Parte B Teoria dos Grafos

Árvores: Conceitos Básicos e Árvore Geradora

Noções da Teoria dos Grafos. André Arbex Hallack

Aula 19 Conjuntos disjuntos (Union-find)

Análise de Algoritmos e Estruturas de Dados

Caminhos mínimos de única origem

MC3305 Algoritmos e Estruturas de Dados II. Aula 00 Apresentação. Prof. Jesús P. Mena-Chalco.

TGR BCC Representação Computacional de Grafos. Prof. Ricardo José Pfitscher

O que é uma prova? Paulo Feofiloff

Teoria dos Grafos. Grafos Planares

Departamento de Engenharia de Produção UFPR 57

O estudo utilizando apenas este material não é suficiente para o entendimento do conteúdo. Recomendamos a leitura das referências no final deste

Busca em Profundidade e em Largura

Noções da Teoria dos Grafos. André Arbex Hallack

Teoria dos Grafos 1. Teoria dos Grafos

Doutorado em Ciência da Computação. Algoritmos e Grafos. Raimundo Macêdo LaSiD/DCC/UFBA

Árvores Árvores Geradoras de Custo Mínimo 0/16

Algoritmos e Estruturas de Dados II

Transcrição:

Introdução à Teoria dos Grafos Emparelhamentos Máximos em Grafos Bipartidos Bacharelado em Ciência da Computação, DCT UFMS, 6/6/2005 Entrega em 04/07/2005 Resumo Quando estudamos emparalhementos e fatorações em grafos, mencionamos a necessidade e a existência de algoritmos para encontrar emparelhamentos de cardinalidade máxima ou de valor máximo em grafos bipartidos ou em grafos gerais. Neste trabalho você deve implementar um algoritmo que recebe como entrada um grafo bipartido e encontra um emparelhamento de cardinalidade máxima nesse grafo. Sua implementação deve ser feita na linguagem C padrão (ANSI C). 1 Descrição do Problema O problema que queremos solucionar tem a seguinte descrição: Problema EMGB(G): dado um grafo bipartido G, com partição V 1 e V 2 de V G, encontrar um emparelhamento M em G de cardinalidade máxima. Seja M um emparelhamento em um grafo G e suponha que P é um caminho aumentador com respeito a M. Denote por M as arestas de P que pertencem a M e seja M = E P \ M. Faça M 1 = (M \ M ) M e observe que M 1 é um emparelhamento em G com cardinalidade M + 1. Dizemos que M 1 é obtido aumentando M sobre P. Observe que todo vértice que não é emparelhado com respeito a M 1 também não é emparelhado com respeito a M. Veja a figura 1 para um exemplo. PSfrag replacements G v 1 G v 1 v 2 v 2 v 3 v 3 v 8 v 7 v 4 v8 v 7 v 4 v 6 v 5 v 6 v 5 Figura 1: Emparelhamentos em um grafo G, onde arestas e vértices grifados são emparelhados. Um emparelhamento M. Um emparelhamento M 1 obtido pelo aumento de M sobre um caminho aumentador P : v 1, v 2, v 2, v 4, v 5, v 6, v 7, v 8. O resultado a seguir fornece a base para algoritmos que encontram emparelhamentos de cardinalidade máxima em grafos bipartidos e em grafos gerais. TEOREMA 1.1 Seja M um emparelhamento em um grafo G que não é máximo e seja v um vértice não emparelhado com respeito a M. Denote por M 1 o emparelhamento obtido aumentando M sobre algum caminho aumentador. Se G contém um caminho aumentador com respeito a M 1 que tem v como vértice inicial, então G contém um caminho aumentador com respeito a M que tem v como vértice inicial.

PROVA. Suponha o contrário, isto é, que G contém um caminho aumentador com respeito a M 1 com início no vértice v, mas G não tem um caminho aumentador com respeito a M que tem início no vértice v. Seja P : v = u 1, u 2,..., u n um caminho aumentador com respeito a M 1. Então, por suposição, P não é um caminho aumentador com respeito a M. Assim, P contém uma aresta que pertence a M 1 mas não a M. Seja i o menor índice tal que u 2i u 2i+1 M 1 \ M. Então u 2i é emparelhado com respeito a M; caso contrário, P : v = u 1, u 2,..., u 2i é um caminho aumentador com respeito a M com início em v. Suponha que M 1 é obtido aumentando M sobre um caminho aumentador Q: v 1, v 2,..., v k com respeito a M. Então, u 2i u 2i+1 E Q \M e u 2i é incidente com uma aresta e de Q que pertence a M. Suponha que u 2i = v j com 1 < j < k. Então e = v j 1 v j ou e = v j v j+1. Considere inicialmente que e = v j 1 v j. O caminho Q : v 1, v 2,..., v j 1, v j é um caminho alternante com respeito a M que contém exatamente um vértice não emparelhado, o vértice v 1. As arestas não emparelhadas de Q com respeito a M tornam-se arestas emparelhadas com respeito a M 1 quando aumentamos M sobre Q. Segue que Q e P têm somente o vértice v j = u 2i em comum. Mas v = u 1, u 2,..., u 2i, v j 1, v j 2,..., v 1 é um caminho aumentador com respeito a M, o que contradiz a hipótese. No caso em que e = v j v j+1 podemos mostrar de forma similar que v = u 1, u 2,..., u 2i, v j+1,..., v k é um caminho aumentador com respeito a M. Isto novamente produz uma contradição. Assim, M 1 não contém um caminho aumentador que tem início em v. Uma conseqüência imediata do teorema anterior é a seguinte. COROLÁRIO 1.2 Seja M um emparelhamento em um grafo G. Suponha que M = M 1, M 2,..., M k é uma seqüência de emparelhamentos em G tal que M i é obtido aumentando M i 1 sobre algum caminho aumentador, para 2 i k. Suponha que o vértice v não é emparelhado com respeito a M e não existe um caminho aumentador com respeito a M com início em v. Então, G não contém um caminho aumentador com respeito a M i que tem início em v, para 2 i k. Um emparelhamento máximo em um grafo G pode ser obtido pela construção de uma seqüência M 1, M 2,..., M k de emparelhamentos em G, onde M 1 é um emparelhamento inicial em G, M i é obtido de M i 1, para 2 i k, aumentando M i 1 sobre algum caminho aumentador e M k é o maior emparelhamento possível, isto é, M k é o emparelhamento de cardinalidade máxima. 2 Algoritmo A idéia do algoritmo pode ser descrita da seguinte maneira. Seja M um emparelhamento qualquer em um grafo G. Selecione um vértice v que não é emparelhado com respeito a M e determine se existe um caminho aumentador que tem v como início. Se existe um caminho como esse, então aumente M sobre esse caminho obtendo um novo emparelhamento M com cardinalidade M = M + 1. Então, v é um vértice emparelhado com respeito a M. Suponha, entretanto, que não existe um caminho aumentador com respeito a M que tem início em v. Então, pelo corolário 1.2, não é necessário procurar por caminhos aumentadores iniciando em v nos passos subseqüentes. Seja G é um grafo bipartido com emparelhamento M e suponha que v é um vértice não emparelhado com respeito a M. Usando a busca em largura, uma árvore com raiz v é construída de tal forma que todos os caminhos da raiz v às folhas dessa árvore são caminhos alternantes com respeito a M. Essa árvore é chamada uma árvore alternante. Além disso, se existe um caminho aumentador que tem início em v, então essa informação é obtida da construção da árvore alternante. Para verificar a existência de um caminho aumentador, o seguinte processo realizado. Se existe um

vértice u não emparelhado adjacente a v, então um caminho aumentador v, u foi encontrado. Então, M é aumentado sobre este caminho aumentador para obter um emparelhamento de cardinalidade M + 1. Caso contrário, todo vértice adjacente a v é emparelhado. Neste caso, uma árvore alternante com raiz v é construída, como na figura 2 a seguir. A raiz dessa árvore é o vértice v, posicionado no nível 0, e todos os vértices adjacentes a v em G, digamos u 1, u 2,..., u k, são posicionados no nível 1 e conectados a v. Agora, seja u i v i M, com 1 i k, arestas do emparelhamento M adjacentes a u 1, u 2,..., u k. Os vértices v 1, v 2,..., v k são posicionados então no nível 2 e conectados a u i, para 1 i k. Suponha que todos os níveis da árvore alternante foram construídos até o nível m, onde m é par, e que nenhum caminho aumentador com início em v tenha sido encontrado. A construção da árvore alternante continua da seguinte forma. Para todo vértice x no nível m da árvore alternante, examine todo vértice y adjacente a x. Se y já pertence à árvore alternante então não há nada a fazer. Caso contrário, y não pertence à árvore alternante e então y é um vértice emparelhado ou não. Se y é um vértice emparelhado, então yz M para algum z e z não pertence à árvore alternante. Então, y e z são adicionados à árvore alternante nos níveis m+1 e m+2, respectivamente, e conectados. A figura 2 ilustra essa situação. Entretanto, se y é um vértice não emparelhado, então um (v, y)-caminho aumentador foi encontrado. A figura 2 ilustra esse caso. v 0 v 1 2 PSfrag replacements x m x y m + 1 y z m + 2 Figura 2: Construção de uma árvore alternante. A construção da árvore alternante termina quando um caminho aumentador é encontrado ou quando não há mais como acrescentar novos níveis a essa árvore. No primeiro caso, o emparelhamento M é aumentado sobre o caminho aumentador encontrado, produzindo um emparelhamento de cardinalidade M + 1. Suponha que exista um vértice não emparelhado com relação a este novo emparelhamento que não foi considerado anteriormente como raiz de uma árvore alternante. Uma árvore alternante com raiz nesse vértice não emparelhado é construída. Se não existem mais vértices com essa característica, um emparelhamento de cardinalidade máxima foi encontrado. No segundo caso, não existe um caminho aumentador com respeito a M que tem início em v. Se G ainda possui um vértice não emparelhado que não foi previamente considerado como raiz de uma árvore alternante, então tal vértice é escolhido para ser raiz de uma nova árvore alternante. Se tal vértice não existe, um emparelhamento de cardinalidade máxima foi obtido. A descrição do algoritmo acima é apresentada em pseudocódigo a seguir. Cada vértice u V G tem um atributo emparelhado, que contém um nó v V G se a aresta uv pertence ao emparelhamento

corrente, um atributo raiz que indica logicamente se o vértice u já foi raiz de alguma árvore alternante, um atributo árvore, indicando logicamente se o vértice u pertence à árvore alternante, um atributo pai, indicando o vértice pai de u na árvore alternante, além do atributo Adj que contém a lista dos vértices adjacentes a u em G. ALGORITMO EMPARELHAMENTO-MÁXIMO-B(G, M): recebe um grafo bipartido G e um emparelhamento M em G e devolve um emparelhamento de cardinalidade máxima M 1 em G. 1: M 1 M 2: para cada u V G faça 3: raiz[u] falso 4: para cada u V G faça 5: se emparelhado[u] = λ e raiz[u] = falso então 6: raiz[u] verdadeiro 7: árvore[u] verdadeiro 8: para cada v V G faça 9: se v u então 10: árvore[v] falso 11: Q Fila 12: ENTRA-NA-FILA(Q, u) 13: enquanto Q faça 14: v SAI-DA-FILA(Q) 15: para cada w Adj[v] faça 16: se árvore[w] verdadeiro então 17: se emparelhado[w] λ então 18: x emparelhado[w] 19: árvore[w] verdadeiro 20: árvore[x] verdadeiro 21: pai[w] v 22: pai[x] w 23: ENTRA-NA-FILA(Q, x) 24: senão 25: com o apontador pai, determine o (u, v)-caminho P na árvore alternante; 26: seja P o caminho alternante obtido da concatenação de P e do (v, w)-caminho; 27: aumente M 1 através do caminho aumentador P, obtendo M ; 28: faça M 1 M e saia dos laços das linhas 15 e 13; 29: devolva M 1 Um exemplo de execução do algoritmo EMPARELHAMENTO-MÁXIMO-B é ilustrado na figura 3. O grafo bipartido G é apresentado com o emparelhamento inicial M destacado. O tempo de execução desse algortimo é O(pq), se o grafo G tem ordem p e tamanho q. 3 Implementação Programas que não seguirem estas recomendações não serão corrigidos e terão nota 0. Linguagem de programação Use a linguagem C padrão (ANSI C). Compilador Bloodshed Dev-C++ é um ambiente integrado de desenvolvimento para as linguagens C e C++ que usa a implementação Mingw do GCC (GNU Compiler Collection) como seu compilador. O Dev-C++ é desenvolvido por Colin Laplace, Mike Berg e Hongli Lai e é um software livre (sob a

x 2 x 1 x 2 x 3 x 4 x 5 x 6 y 2 y 6 x 3 x 5 y 1 y 2 y 3 y 4 y 5 y 6 Q i f x 2 x 3 x 5 PSfrag replacements x 2 x 2 y 2 y 6 y 2 y 6 x 3 x 5 x 3 x 5 y 3 y 4 y 5 y 3 y 4 y 5 x 4 x 1 x 6 x 4 x 1 x 6 y 1 Q i f x 2 x 3 x 5 x 4 x 1 x 6 Q i f x 2 x 3 x 5 x 4 x 1 x 6 (c) (d) Figura 3: Execução do algoritmo EMPARELHAMENTO-MÁXIMO-B tendo o grafo em como entrada e o emparelhamento M destacado. Em, (c) e (d) temos a construção de uma árvore alternante. Observe que um caminho aumentador é encontrado em (d).

GNU General Public License). Isso significa, entre outras coisas, que pode ser distribuído e copiado à vontade. Você pode utilizar outro compilador, mas deve ter certeza que seu programa pode ser compilado pelo Dev-C++ antes de entregá-lo. Na página que contém a descrição desse trabalho 1, há um link com instruções para baixar e instalar esse compilador. Entrada do programa Seu programa deve receber como entrada um grafo bipartido e um emparelhemento inicial e deve devolver um emparelhamento de cardinalidade máxima sobre esse grafo. Seu programa deve receber a entrada através de um arquivo texto contendo as informações sobre o grafo e o emparelhamento inicial. Por exemplo, suponha que o grafo e o emparelhamento da figura 3 sejam a entrada. Então, um arquivo de nome entrada.txt conterá as seguintes informações: 12 16 x1,x2,x3,x4,x5,x6,y1,y2,y3,y4,y5,y6 (x1,y1),(x1,y2),(x1,y4),(x2,y2),(x2,y6),(x3,y2),(x4,y3),(x4,y5),(x4,y6),(x5,y3),(x5,y4),(x5,y5),(x5,y6),(x6,y1),(x6,y5) (x1,y4),(x3,y2),(x4,y3),(x5,y6),(x6,y5) A primeira linha do arquivo contém a informação da ordem e do tamanho do grafo de entrada. A segunda linha contém os rótulos dos seus vértices. A terceira contém as arestas do grafo e a última as arestas que compõem o emparelhamento inicial. Saída do programa A saída deve ser um arquivo texto saida.txt contendo as arestas de um emparelhamento de cardinalidade máxima. No exemplo da figura 3, a saída deve ser a seguinte: (x1,y1),(x2,y6),(x3,y2),(x4,y3),(x5,y4),(x6,y5) Linha de comando Seu programa deve ser executado em uma linha de comando da seguinte forma: > programa [entrada.txt] [saida.txt] Grupos Esse trabalho pode ser desenvolvido em grupo. Cada grupo pode conter até 2 alunos. Entrega Na data de entrega especificada, entregue na secretaria do DCT um disquete identificado com o(s) nome(s) do(s) integrante(s) do grupo contendo o programa fonte do trabalho. Referências [1] J. A. Bondy and U. S. R. Murty, Graph Theory with Applications, The Macmillan Press LTD, 1977. [2] G. Chartrand and O. R. Oellermann, Applied and Algorithmic Graph Theory, McGraw-Hill, Inc., 1993. [3] T. H. Cormen, C. E. Leiserson, R. L. Rivest, and C. Stein, Introduction to Algorithms, The MIT Press, 2nd Edition, 2001. 1 http://www.dct.ufms.br/ fhvm/disciplinas/2005/grafos/tarefas.html