Problema do emparelhamento máximo em grafos

Propaganda
Problema do emparelhamento máximo em grafos bipartidos
(maximum bipartite matching)
Problema do emparelhamento máximo em grafos bipartidos (maximum bipartite matching)
1. Um emparelhamento em um grafo não dirigido G=(V,E) (graph matching, correspondência) é um
subconjunto E´
´.
E de arestas de G, tal que cada vértice de V incide em no máximo uma aresta de E
2. Por exemplo: Considere o seguinte problema: imagine que você tenha um conjunto de pessoas e queira
separar um conjunto de pares de pessoas que se conhecem. O problema pode ser modelado como um
grafo em que as pessoas são os vértices, e (u,v) é uma aresta do grafo se u e v se conhecem (par não
orientado, grafo não dirigido). Neste caso, um conjunto de pares que se conhecem é um matching: cada
par é uma aresta (pessoas que se conhecem), e cada pessoa só pode estar em um par no matching,
isto é, cada vértice só pode ser incidente a uma aresta.
3. O problema do emparelhamento máximo em um grafo não dirigido consiste simplesmente em
encontrar "um" emparelhamento no grafo que tenha o maior número de arestas possível (porque "um" e
não "o"?). Você acha fácil fazer um algoritmo para isto? Bem, depende: é relativamente fácil fazer um
algoritmo se você já sabe como explorar análise combinatória em algoritmos. Mas este algoritmo vai
"provavelmente" ter um tempo de execução superpolinomial: a análise de pior caso vai mostrar que o
pior caso do algoritmo ingênuo é
de alguma classe que não é polinomial. Existem no entanto
algoritmos polinomiais para graph matching, em particular o "Blossom Algorithm" de Jack Edmonds, que
é bastante complicado, e executa em tempo O(|V|^4). Há outros algoritmos um pouco mais
eficientes. Neste momento discutiremos apenas um caso especial do problema do emparelhamento
máximo em um tipo particular de grafo chamado grafo bipartido, que tem enorme aplicação prática, e que
tem conexão com fluxos.
4. Um grafo não dirigido G=(V,E) é dito bipartido(bipartite graph), se for possível encontrar um corte (S,
V-S) em G tal que todas as arestas de V (isto é, de E) cruzam o corte.
1. Um corte (S, V-S) é simplesmente umapartição de V em dois subconjuntos S, T (pela definição
de partição, S e T devem ser disjuntos e a união de S e T é o próprio V; desta forma, ao invés de
S, T,mais simples expressar como S e V-S.
2. Uma aresta (u,v) cruza um corte (S, V-S), se u está de um lado e v do outro, isto é:
e
ou vice-versa.
3. As noções acima também se aplicam a grafos dirigidos. Um grafo dirigido bipartido tem a partição
definida implicitamente pelas arestas: um dos conjuntos é o dos vértices que tem arcos saindo e
outro é o dos que tem arcos chegando (mostre que se houver algum vértice no grafo dirigido que
tem simultaneamente grau de entrada e de saída maior que 0, o grafo não pode ser bipartido)
5. Exemplos de grafos bipartite:
1. Um exemplo típico é o de tarefas e máquinas: uma tarefa pode ser executável por mais de uma
máquina; uma máquina pode ser capaz de executar diversos tipos de tarefas. Se as arestas
conectam uma tarefa e uma máquina sse a tarefa pode ser executada pela máquina, então o grafo
é bipartite.
2. Outro exemplo, um pouco mais criativo: V é um conjunto de íons, e E é um conjunto de ligações
iônicas entre eles. Um íon pode estar ligado com 0 ou mais outros íons, mas seguramente existe
um corte em que de um lado estão os cátions e de outro os ânions, e as ligações iônicas, todas
são formadas por pares que estão em lados opostos.
6. O problema do emparelhamento máximo em grafo bipartido consiste em dado um grafo bipartido G,
encontrar um emparelhamento máximo em G. Este problema pode ser facilmente resolvido,reduzindoo ao problema de fluxo máximo (o conceito de redução entre problemas é muito importante em
algoritmos e em teoria da computação e será melhor estudado ao longo do curso; este é um exemplo).
1. Primeiro verifique que, se G=(V, E) é bipartido, é fácil construir um algoritmo que acha a partição
(S, V-S)
2. Constrói-se uma rede de fluxo consistindo de um grafo dirigido G´=(V´, E´) com capacidades c
(u,v), fonte s e dreno t assim:
1. V´ = V U {s,t}, onde s e t são novos vértices, que não estão em V
2. Para toda aresta
, assumindo, sem perda de generalidade (w.l.o.g. = without
loss of generality), que
e
, insere-se (u,v) em E´ (note que estas
arestas são apenas versões dirigidas das arestas de E)
3. Para cada vértice
insere (s, u) em E´
4. Para cada vértice
insere (v, t) em E´
5. Para toda aresta (u,v) de E´, faz c(u,v) = 1 (todas as capacidades são unitárias)
3. Neste caso, o tamanho do maior emparelhamento em G é igual ao valor do fluxo máximo na rede
de G´. E o emparelhamento buscado é o conjunto de pares (u,v) tal que f(u,v) =1, onde f é o fluxo
máximo encontrado.
4. Este processo pode ser implementado em O (VE), porque
capacidades integrais é
e fluxo máximo com
Download