Aula 27 - Cobertura de Vértices e Emparelhamentos
Universidade Federal do Rio Grande do Sul
Instituto de Informática
Departamento de Informática Teórica
Estes slides utilizam conteúdo adaptado da bibliografia da disciplina e também de notas de aula e slides prévios dos professores Bruno Grisci, Rodrigo Machado, André Grahl Pereira, Lucas Nunes Alegre, Marcus Ritt e Luciana Buriol.
Suponha um museu (ou galeria de arte) onde estão expostos diversos quadros muito valiosos. Para elaborar um sistema de monitoramento adequado, há disponíveis diversas câmeras de vigilância, que podem ser instaladas em entroncamentos de corredores do museu. Por simplicidade, assumimos que cada câmera permite a vigilância (em 360 graus) de todos os corredores a ela associados até o próximo entroncamento.
Pergunta: Qual o menor número de câmeras que precisamos instalar (e onde elas devem estar) para que não haja nenhum corredor do museu descoberto?
Podemos a partir do mapa do museu, gerar um grafo associado:
Mapa do museu
Def. Seja G = (V,E) um grafo simples. Uma cobertura de vértices é um subconjunto X \subseteq V tal que, para toda aresta \{x,y\} \in E,
x \in X \quad \text{ou}\quad y \in X.
Ex. Abaixo temos em azul uma cobertura de vértices para o grafo do museu.
Def. Uma cobertura de vértices X de um grafo simples G é mínima sss para toda cobertura de vértices Y de G, |X| \leq |Y|.
Not. Denotamos \textcolor{#2e75b6}{\beta}(G) = |X| a cardinalidade de uma cobertura de vértices mínima X de G.
Exemplo. No caso do museu, temos abaixo (em azul) uma cobertura mínima com 5 nodos (note que há outras coberturas mínimas possíveis).
\quad \textcolor{#2e75b6}{\beta}(G) = 5
Determine uma cobertura de vértices mínima e parâmetro \textcolor{#2e75b6}{\beta} do seguinte grafo:
Lembremos que um conjunto independente de um grafo simples G=(V,E) é um subconjunto de vértices X \subseteq V tal que, para quaisquer dois nodos x,y \in X, não há aresta entre eles (\{x,y\} \notin E).
Notação. Denotamos \textcolor{#c40000}{\alpha}(G) o tamanho do conjunto independente máximo (de maior tamanho) de G. Também chamado número de estabilidade de G.
Exemplo. Para o grafo do museu, em vermelho temos um conjunto independente máximo.
\quad \textcolor{#c40000}{\alpha}(G) = 5
P. Dado um grafo simples G, existe alguma relação entre \textcolor{#c40000}{\alpha}(G) e \textcolor{#2e75b6}{\beta}(G)?
Seja G=(V,E) um grafo simples.
Obs. Se X \subseteq V for uma cobertura de vértices, então V-X é um conjunto independente.
Obs. Se Y \subseteq V for um conjunto independente, então V-Y é uma cobertura de vértices.
Lema.
\textcolor{#c40000}{\alpha}(G) + \textcolor{#2e75b6}{\beta}(G) = |V|
Seja \textcolor{#c40000}{S} \subseteq V um conjunto independente de tamanho \textcolor{#c40000}{\alpha}(G).
Seja \textcolor{#2e75b6}{C} \subseteq V uma cobertura de vértices de tamanho \textcolor{#2e75b6}{\beta}(G).
Seja G=(V,E) um grafo simples.
Obs. Uma coloração de vértices de G corresponde a uma partição dos seus vértices em subconjuntos independentes. O número mínimo de cores necessárias numa coloração de vértices é o número cromático \chi(G).
Lema.
\chi(G) \geq \frac{|V|}{\textcolor{#c40000}{\alpha}(G)}
Prova.
Def. Seja G=(V,E) um grafo simples. Um emparelhamento de G é um subconjunto A \subseteq E onde, para todas arestas e_1,e_2 \in A, temos que e_1 e e_2 não são adjacentes (isto é, não possuem nenhum vértice em comum).
Obs. Um emparelhamento também é chamado acoplamento, conjunto independente de arestas ou casamento. Em inglês, usa-se a expressão matching.
Ex. Emparelhamento (em azul) contendo três arestas.
Def. Se um emparelhamento A de G incidir sobre todos os vértices do grafo, dizemos que A é um emparelhamento perfeito.
Obs. Só é possível haver emparelhamentos perfeitos quando |V| for par.
Not. Denotamos \textcolor{#c40000}{\alpha'}(G) o tamanho do emparelhamento máximo (de maior tamanho) do grafo G.
Obs. Note que o maior emparelhamento pode não ser perfeito.
Ex. Emparelhamento perfeito e máximo (em azul):
Def. Seja G=(V,E) um grafo simples. Denotamos grafo linha de G o grafo simples L(G)=(V',E') onde
Exemplo:
Lema. Como cada emparelhamento em G é um conjunto independente em L(G), temos \textcolor{#c40000}{\alpha'}(G) = \textcolor{#c40000}{\alpha}(L(G)).
Determine um emparelhamento máximo para o seguinte grafo:
P. O emparelhamento encontrado é perfeito?
Obs. A forma mais comum de encontrar um emparelhamento máximo é começar com um emparelhamento qualquer M e procurar caminhos aumentantes (caminho que permite aumentar o tamanho do emparelhamento atual).
Pelo lema de Berge, M é máximo sss não existe caminho aumentante em relação a M.
| Caso | Ideia/algoritmo | Complexidade |
|---|---|---|
| Grafo bipartido, sem pesos | Redução para fluxo máximo; caminhos aumentantes um a um | O(\lvert V\rvert\lvert E\rvert) |
| Grafo bipartido, sem pesos | Hopcroft–Karp: encontra vários caminhos aumentantes por fase | O(\sqrt{\lvert V\rvert}\,\lvert E\rvert) |
| Grafo geral, sem pesos | Edmonds: algoritmo dos blossoms, contraindo ciclos ímpares | O(\lvert V\rvert^2\lvert E\rvert) |
| Grafo geral, sem pesos | Micali–Vazirani: versão mais eficiente, porém mais complexa | O(\sqrt{\lvert V\rvert}\,\lvert E\rvert) |
Obs. Encontrar um emparelhamento maximal é mais simples: um algoritmo guloso basta. Porém, maximal não significa máximo; em geral é apenas uma 2-aproximação para o tamanho ótimo.
Obs. Alguns problemas em grafos possuem algoritmos eficientes, como busca em largura, busca em profundidade, caminhos mínimos, árvores geradoras mínimas e emparelhamentos em vários casos.
Existe um ciclo simples que visita todos os vértices exatamente uma vez?
Ao falar de classes de complexidade, nós categorizamos as classes dos problemas decidíveis, isto é, problemas para os quais existem algoritmos que respondem corretamente perguntas de SIM ou NÃO.
Se sabe:
Ainda não se sabe:
Parecem perguntas bem diferentes:
Contudo, conjecturamos que a resposta seja não!
Um problema é NP-completo quando:
P = NP\text{?}
Por isso, costuma-se usar:
Obs. Vários problemas clássicos de grafos são NP-completos quando escritos como problemas de decisão.
Obs. Uma redução polinomial é uma forma eficiente de transformar instâncias de um problema em instâncias de outro.
Exemplo intuitivo:
resolver CLIQUE eficientemente \Rightarrow resolver outros problemas NP-completos eficientemente
Assim, NP-completude é uma linguagem comum para explicar por que muitos problemas diferentes parecem compartilhar a mesma barreira de dificuldade.
e \subseteq V.
Assim, grafos comuns são um caso particular de hipergrafos em que toda aresta tem tamanho 2.


Saiba mais: https://en.wikipedia.org/wiki/Hypergraph
?