Conjuntos independentes em grafos

figs/the-web/8-queen-solution.png

É possível colocar t damas num tabuleiro de xadrez t-por-t de modo que nenhuma delas possa atacar outra? Esta é uma instância do problema dos conjuntos independentes máximos em grafos.

Esta página foi inspirada, em parte, no capítulo 10 do livro de Kleinberg e Tardos.

Conjuntos independentes

 
0 1 1 1 1 1
1 0 1 1 1 1
1 1 0 0 0 1
1 1 0 0 0 1
1 1 0 0 0 1
1 1 1 1 1 0

Um conjunto independente (= independent set) em um grafo é um conjunto de vértices dois a dois não adjacentes.  Portanto, um conjunto S de vértices é independente se nenhuma aresta tem ambas as pontas em S. Conjuntos independentes também são conhecidos como conjuntos estáveis.

Um conjunto independente em um grafo G é máximo se não existe outro maior em G. Em outras palavras, um conjunto independente X em G é máximo se não existe um conjunto independente S em G tal que S⎮ > ⎮X.

Problema do Conjunto Independente Máximo:  Encontrar um conjunto independente máximo em um grafo.

O problema é notoriamente difícil. É claro que um algoritmo de força bruta, que examina todos os 2n subconjuntos do conjunto de vértices do grafo, resolve o problema. Mas não se descobriu (ainda?) um algoritmo que seja substancialmente mais rápido. É possível até que um tal algoritmo não existe. (Veja a página Complexidade e problemas NP-completos.)

A variante de decisão do problema pede apenas uma resposta booleana: dado um grafo G e um número natural k, decidir se G tem um conjunto independente com k ou mais vértices. Mas essa variante não é mais fácil que o problema original.

the-web/cube-maximum-independent-set.png     the-web/generalized-petersen-max-indep-set.png

Exemplo A.  A figura mostra conjuntos independentes máximos em dois grafos (vértices vermelhos no primeiro grafo e vértices azuis no segundo).

Exercícios 1

  1. ★ Escreva um algoritmo que receba um grafo G e um subconjunto S de V(G) e decida se S é independente. Quanto tempo seu algoritmo consome? (Suponha que G é dado por uma matriz de adjacência.)
  2. Dê um exemplo de um grafo com n vértices que tenha um conjunto independente máximo com n vértices. Dê outro exemplo em que um conjunto independente máximo tenha n − 1 vértices. Dê outro exemplo em que um conjunto independente máximo tenha apenas 1 vértice.
  3. Qual o tamanho de um conjunto independente máximo em um grafo que consiste em um circuito simples e nada mais? Qual o tamanho de um conjunto independente máximo em um grafo que consiste em um caminho simples e nada mais.
  4. grafos-exercicios/triangles.png   grafos-exercicios/petersen01.png
    Encontre conjuntos independentes máximos nos grafos da figura.
  5. Grafo do cavalo. Encontre um conjunto independente máximo no grafo do cavalo 3-por-3. Repita o exercício para o grafo do cavalo 4-por-4 e para o grafo do cavalo 5-por-5.
  6. Grafo da dama. Encontre um conjunto independente máximo no grafo da dama 5-por-5. Repita o exercício para o grafo da dama 8-por-8.
  7. Clique. Uma clique é um conjunto de vértices dois a dois adjacentes. Mostre que o problema da clique máxima é equivalente ao problema do conjunto independente máximo.
  8. Desafio! Invente um algoritmo que resolva o problema do conjunto independente máximo em tempo Ο(n9), sendo n o número de vértices do grafo. (Você pode trocar 9 por seu expoente favorito.)

Casos especiais do problema

Embora o problema de conjunto independente máximo seja muito difícil em geral, sua restrição a alguns tipos de grafos é fácil. Considere os dois casos a seguir.

Grafos de intervalos.  Uma coleção de intervalos na reta pode ser representada por um grafo. Cada intervalo é um vértice e dois vértices são adjacentes se os correspondentes intervalos não são disjuntos, ou seja, se têm um ou mais pontos em comum. Assim, uma coleção de intervalos é disjunta se e somente se o correspondente conjunto de vértices é independente. Portanto, o problema da coleção disjunta máxima de intervalos é um caso especial (ou seja, uma coleção de instâncias) do problema de conjunto independente máximo. De acordo com a página Intervalos disjuntos, existe um algoritmo linearítmico para esse caso especial.

Exemplo B.  A figura abaixo representa uma coleção de intervalos na reta. (A mesma coleção do exemplo C na página Intervalos disjuntos.) Faça uma figura convencional do grafo que representa essa coleção.
figs/mine/livrinho-intervals-noweights-1.png

Florestas.  O problema do conjunto independente máximo é fácil quando restrito a florestas. A descrição de um algoritmo eficiente para esse caso usa o seguinte conceito: uma folha de uma floresta é um vértice que tem exatamente 1 vizinho. Toda floresta com pelo menos uma aresta tem pelo menos uma folha.

O algoritmo que calcula um conjunto independente máximo numa floresta F pode ser descrito assim. Cada iteração começa com uma floresta L. (No começo da primeira iteração, L é F.) Enquanto L tiver pelo menos uma aresta,

escolha uma folha v da floresta L,
seja w o único vizinho de v em L,
remova as arestas de L que incidem em w,
remova o vértice w de L.

No início da última iteração, L não tem arestas. Nesse momento, o conjunto de vértices de L é um conjunto independente máximo em F.

Pode-se dizer que esse algoritmo é guloso. A correção do algoritmo decorre do seguinte invariante: no começo de cada iteração, o conjunto de vértices de L inclui algum conjunto independente máximo de F. Esse invariante segue do seguinte

Teorema: Em qualquer floresta, toda folha pertence a algum conjunto independente máximo.

Prova: Seja F a floresta em questão, seja v uma folha de F, e seja w o único vizinho de v. Seja X um conjunto independente máximo de F. Um de v e w pertence a X, pois caso contrário X ∪ { v } seria um conjunto independente, o que contraria a maximalidade de X. Agora considere as seguintes alternativas. Se v ∈ X então X tem a propriedade desejada. Se w ∈ X então o conjunto (X − { w }) ∪ { v } é um conjunto independente máximo e contém v, CQD.

A implementação eficiente do algoritmo exige algum esforço: é preciso inventar uma representação da floresta L que seja mais apropriada que uma simples matriz de adjacência.

Exercícios 2

  1. Num dos casos especiais acima, representamos uma coleção de intervalos por um grafo. Considere a operação inversa e mostre que nem todo grafo pode ser representado por uma coleção de intervalos.
  2. Quais das afirmações a seguir são verdadeiras?  Toda floresta tem pelo menos uma folha. Em qualquer árvore, o conjunto de todas as folhas é um conjunto independente máximo. Em qualquer árvore, o conjunto de todas as folhas é um conjunto independente maximal. Se X é um conjunto indendente máximo de uma árvore com 3 ou mais vértices, então X não contém vizinhos de folhas.
  3. Toda floresta é uma coleção de árvores sem vértices em comum. Não seria mais simples restringir a árvores o algoritmo descrito acima para florestas?
  4. Escreva uma implementação eficiente do algoritmo que calcula um conjunto independente máximo em uma floresta.

Maximal versus máximo

Um conjunto independente I em um grafo G é maximal se não for subconjunto próprio de algum outro conjunto independente, ou seja, se não existe um conjunto independente J tal que JI.

É claro que todo conjunto independente máximo é maximal, mas a recíproca está muito longe de ser verdadeira. (Veja um dos exercícios abaixo.)

the-web/cube-maximal-independent-set.png

Exemplo C.  A figura mostra um conjunto independente maximal (vértices vermelhos) no grafo do cubo.

É fácil calcular um conjunto independente maximal. O seguinte algoritmo recebe um grafo G e devolve o vetor característico de um conjunto independente maximal:

Independente-Maximal (G)
1 . para cada vértice v
2 .ooo x[v] := 0
3 . para cada vértice v
4 .ooo x[v] := 1
5 .ooo para cada vizinho w de v
6 .oooooo se x[w] = 1
7 .ooooooooo x[v] := 0
8 . devolva x

Ao longo da execução do algoritmo, seja X o conjunto de todos os vértices v tais que x[v] = 1. No começo de cada execução da linha 4, valem as seguintes propriedades invariantes:

  1. X é independente,
  2. vX,
  3. para cada vértice u já examinado, se uX então u tem um vizinho em X.

Portanto, no início da linha 8, o conjunto independente X é maximal.

Consumo de tempo.  Quanto tempo o algoritmo Independente-Maximal consome para processar um grafo com n vértices? Considere inicialmente o bloco de linhas 3-7. O consumo de tempo desse bloco é proporcional ao número de execuções de linha 6. Para cada valor fixo de v, a linha 6 é executada para cada vizinho de v. Como cada vértice tem menos que n vizinhos, o número total de execuções da linha não passa de n×(n − 1). Portanto, o bloco de linhas 3-7 consome Ο(n²) unidades de tempo.

Como o par de linhas 1-2 consome Θ(n) unidades de tempo, o consumo total do algoritmo é de Ο(n²) unidades de tempo.

Se adotarmos n² como tamanho do grafo, podemos dizer que o algoritmo é linear.

Para fazer um cálculo mais preciso, podemos levar em conta o número de arestas, m, do grafo e adotar n + m como tamanho do grafo. Nesse caso, o cálculo do número de execuções da linha 6 precisa ser refeito. Ao examinar um vizinho de v na linha 5, o algoritmo está examinando uma aresta do grafo. Nesse processo, cada aresta pq do grafo é examinada no máximo duas vezes (primeiro com pq = vw e depois com pq = wv). Se o grafo for representado por listas de adjacência, a linha 6 será executada no máximo 2m vezes. (Essa estimativa é muito menor que n² se m for muito menor que n².) Assim, o consumo total do algoritmo é de

Ο(n + m)

unidades de tempo.

Exercícios 3

  1. ★ Mostre que um conjunto independente maximal pode ser arbitrariamente menor que um conjunto independente máximo.
  2. Caracterização de independente maximal. Seja S um conjunto independente em um grafo. Mostre que S é maximal se e somente se todo vértice fora de S tem um vizinho em S.
  3. ★ Prove que o algoritmo Independente-Maximal está correto.
  4. Heurística. Melhore o algoritmo Independente-Maximal com a seguinte heurística: em cada iteração, escolha um vértice v que tenha o menor número de vizinhos w tais que x[w] = 1.
  5. ★ Escreva uma generalização do algoritmo Independente-Maximal que receba um grafo G e um conjunto independente I e devolva o vetor característico de um conjunto independente maximal que inclua I. Suponha que G é dado por sua matriz de adjacência e que os vértices são 1, 2, … , n. Suponha que I é dado por um vetor característico.