Você está na página 1de 21

Coloração de

Vértices
Bianca Medeiros, Pedro Henrique, Bruno Amaro e Lucas Vieira
Introdução
Os primeiros resultados sobre coloração de grafos lidam quase que exclusivamente
com grafos planares na forma da coloração de mapas. Enquanto tentava colorir um
mapa dos condados da Inglaterra, Francis Guthrie postulou a conjectura das quatro
cores, notando que quatro cores eram suficientes para colorir o mapa, para que as
regiões que partilham uma fronteira comum não recebessem uma mesma cor. O irmão
de Guthrie passou a pergunta para seu professor de matemática Augustus de Morgan
da University College, que o mencionou a William Hamilton em 1852. Arthur Cayley
levantou o problema em uma reunião do London Mathematical Society em 1879. No
mesmo ano, Alfred Kempe publicou um artigo que afirmava ter estabelecido o
resultado, e por uma década o problema das quatro cores foi considerado resolvido.
Para sua realização, Kempe foi eleito membro da Royal Society e mais tarde Presidente
da Sociedade Matemática de Londres.
Em 1890, Heawood apontou que o argumento de Kempe estava errado. No entanto,
ele provou o teorema de cinco cores, dizendo que cada mapa planar pode ser colorido
com não mais de cinco cores, usando idéias de Kempe. No século seguinte, uma
grande quantidade de trabalhos e teorias foram desenvolvidas para reduzir o número
de cores a quatro, até que o teorema de quatro cores foi finalmente comprovado em
1976 por Kenneth Appel e Wolfgang Haken. A prova voltou para as ideias de Heawood
e Kempe e negligenciando os desenvolvimentos intervenientes.

A prova do teorema de quatro cores também é notável por ser a primeira grande
prova auxiliada por computador. A coloração de grafos tem sido estudada como um
problema algorítmico desde o início da década de 1970: o problema número
cromático é um dos 21 problemas NP-completos de Karp, de 1972. Vários algoritmos
de tempo exponencial foram desenvolvidos com base no método de Zykov (1949).
Uma das principais aplicações de coloração de grafos, alocação de registradores em
compiladores foi introduzida em 1981.
Definição
A definição de uma coloração dos vértices de um grafo não-dirigido se
resume a uma atribuição de cores aos vértices, de forma que cada vértice
recebe uma e apenas uma só cor. Dessa forma, podemos dizer que uma
coloração nada mais é do que uma numeração dos vértices. E também
que uma coloração é uma partição do conjunto de vértices, ou seja, cada
bloco da partição corresponde a uma cor. Caso a coloração seja válida
com 2 cores, ela é chamada de bicoloração.
Problema
Uma coloração de um grafo é válida se as duas pontas de cada aresta têm cores
diferentes.

Uma coloração com k cores não significa que todas as k cores são usadas, apenas
significa que o número de cores não passa de k. Portanto, uma coloração válida com k
cores também é uma coloração válida com k +1 cores. A propósito, dizemos que um
grafo é k-colorível se tem uma coloração válida com k cores.

Encontrar colorações válidas com muitas cores (tantas quantas são os vértices, por
exemplo) é fácil. Encontrar colorações válidas com poucas cores é bem mais difícil.
Problema
A figura ao lado mostra um grafo não-
dirigido, que tem uma coloração válida
com 3 cores:

Vale a pena mencionar a seguinte variante do problema: dado um grafo não-dirigido G e um inteiro k, encontrar
uma coloração válida de G com k cores. (É claro que nem toda instância dessa variante tem solução.) Essa variante
é computacionalmente equivalente ao problema da coloração mínima, embora isso não seja imediatamente
aparente.
É fácil provar que um grafo é k-colorível: basta exibir uma coloração válida com k cores. Mas como provar que um
dado grafo não é k-colorível? Essa questão está na base da dificuldade do problema da coloração.
Exemplos:
Uma indústria química precisa armazenar os reagentes que tem
em estoque. Por razões de segurança, alguns pares de reagentes
não podem ficar no mesmo galpão. Qual o número mínimo de
galpões necessário para armazenar todos os reagentes? Nesse
exemplo, cada reagente é um vértice do grafo, reagentes
incompatíveis definem as arestas, e cada galpão é uma cor.
Exemplos:
O quebra-cabeça Sudoku consiste em
preencher uma matriz 9-por-9 com os números
1 2 3 ... 9 de tal forma que cada linha seja uma
permutação de 1..9, cada coluna seja uma
permutação de 1..9 e cada uma das nove
submatrizes 3-por-3 com borda mais escura
seja uma permutação de 1..9. Esse quebra-
cabeça é uma instância do problema da
coloração mínima. Os vértices do grafo são as
81 casas da matriz e dois vértices são vizinhos
se estiverem na mesma linha, ou na mesma
coluna, ou na mesma submatriz 3-por-3 com
borda escura. O desafio está em obter uma
coloração válida com as cores 1 2 3 ... 9.
Algoritmos
Para encontrar uma coloração válida de um grafo com k de cores,
poderíamos simplesmente fazer uma lista de todas as colorações com k
cores e eliminar, sistematicamente, as que não são válidas. Mas esse
algoritmo de força bruta é extremamente lento, pois o número de colorações
cresce exponencialmente com o número de vértices do grafo.
Um algoritmo rápido para o problema da coloração mínima ainda não foi
descoberto. Suspeita-se mesmo que um tal algoritmo não existe.
Em vista disso, trataremos apenas de algumas heurísticas simples. Essas
heurísticas produzem colorações válidas mas em geral usam mais cores que
o mínimo necessário.
Uma Heurística Gulosa
A seguinte heurística, conhecida como algoritmo de coloração sequencial, produz uma
coloração válida de qualquer grafo. No início de cada iteração, temos uma coloração
válida incompleta que usa as cores 0 1 2 ... k−1. Cada iteração consiste no seguinte:
escolha um vértice incolor v se alguma cor c não é usada por nenhum vizinho de v
então atribua cor c=v senão atribua cor k=v e some 1+k.
Em geral, cada iteração tem vários candidatos para o papel de c, ou seja, tem mais de
uma cor disponível para o vértice v. O algoritmo escolhe qualquer uma das cores
disponíveis, sem medir as consequências que essa escolha terá em iterações futuras
(note que o algoritmo não pode se arrepender e mudar uma escolha feita no passado).
Esse comportamento é conhecido como guloso (= greedy).
Algoritmo DSATUR
É um método heurístico que apresenta um bom desempenho. É exato para grafos bipartidos e
ferramenta importante para algoritmos que buscam cliques maximais em grafos. Este algoritmo
usa o conceito de grau de saturação de um vértice (grau de saturação de um vértice é o número
de diferentes cores para o qual o mesmo é adjacente).

O algoritmo DSATUR, assim denominado em função do emprego do grau de saturação, pode ser
então descrito como um procedimento que compreende a execução das seguintes etapas:
1. Ordene os vértices de G(V, E) em ordem decrescente de graus.
2. Atribua ao vértice de maior grau a cor 1.
3. Selecione o vértice com maior grau de saturação. Se houver vértices com mesmo grau de
saturação, opte por qualquer um de grau máximo pertencente ao sub-grafo ainda não
colorido.
4. Atribua ao vértice selecionado a cor de menor índice disponível.
5. Se todos os vértices estiverem coloridos, pare. Caso contrário, retorne à etapa 3.
O algoritmo apresentado tem complexidade O(n2).
Implementação
Algoritmo Guloso de Coloração
Sequencial:
No início de cada iteração, o conjunto de cores é
0..k-1. No ponto A, available[0..k-1] é o vetor
característico do conjunto de cores disponíveis
para o vértice v.
É claro que a coloração produzida pelo algoritmo
é válida. Mas o número de cores pode ser bem
maior que o mínimo necessário. Assim, do ponto
de vista do problema da coloração mínima, esse
algoritmo guloso é apenas uma heurística.
Algoritmo Welsh e Powell
Foi proposto por Welsh e Powell em 1975. É um algoritmo guloso, visto que
determina a cor do vértice ݆j após os ݆j-1 vértices terem sido coloridos, tendo sempre
como propósito minimizar o número de cores necessárias.
Análise de
Complexidade
A ordenação dos vértices em ordem não crescente
de graus pode ser realizada em O(n.log n) com um
algoritmo ótimo genérico. O cálculo do grau dos
vértice é O(m + n), usando listas de adjacências.

A coloração propriamente depende da obtenção de


até k cores, inserida em um laço O(n), implicando em
custo O(k.n). O custo global do algoritmo é O(n2).
Troca de Cores em Componentes
bi-coloridas
Para fugir do caráter guloso do algoritmo de coloração sequencial, podemos permitir que o algoritmo reveja decisões
tomadas em iterações anteriores.

Suponha que temos uma coloração válida incompleta do grafo não-dirigido G e um vértice v que ainda não foi colorido.
Suponha que dispomos de k cores apenas e que cada uma das cores é usada na vizinhança de v. É possível alterar a
coloração corrente de modo que alguma das cores saia da vizinhança de v, e assim fique disponível para v? Eis que uma
heurística da troca de cores em componentes bi-coloridas que pode fazer isso.

Suponha que, para simplificar, que a cor 0 aparece uma só vez na vizinhança de v. Digamos que w é o vizinho de v que tem
cor 0. Seja X o conjunto dos vértices que têm cor 0 ou 1 e considere o sub­-grafo não-dirigido G[X] induzido por X. Suponha
que a componente conexa de G[X] que contém w não contém nenhum dos vizinhos de v que têm cor 1. Nesse caso, se
intercambiamos as cores 0 e 1 em X, a cor 0 ficará disponível para v!.

Essa heurística pode, às vezes, reduzir o número de cores usado pelo algoritmo de coloração sequencial. (Em geral,
entretanto, a heurística não produz uma coloração válida com número mínimo de cores.).
Exemplo:
Considere a coloração válida incompleta do
grafo grade da figura. Os números 0 1 2
indicam as cores. Digamos que o vértice v não
tem cor. Como esse vértice tem vizinhos de
cores 0, 1 e 2, não pode receber nenhuma
dessas cores.
Os vizinhos de v, em sentido horário a partir do
oeste, são w x y z. A componente das cores 0 e
1 que contém w não contém y. Portanto, se
intercambiamos as cores 0 e 1 na componente
que contém w, a cor 0 ficará disponível para v.
(Tente repetir esse truque com outros pares de
cores e outros vizinhos de v.).
Cliques
Os Cliques, são um dos conceitos mais básicos na teoria dos grafos, eles são utilizados em vários problemas
matemáticos utilizando grafos. Um clique é um subconjunto de vértices de um grafo não direcionado G tal que
cada dois vértices distintos no clique são adjacentes; ou seja, seu subgrafo induzido é completo.

Exemplo:

Uma definição mais a funda sobre o que é Clique, em um grafo não direcionado G= (V, E) é um subconjunto de

vértices C V, tal que para cada dois vértices em C existe uma aresta os conectando. Isso equivale a dizer que um
subgrafo induzido de C é completo.
Clique Maximal
Um clique maximal é um clique que não pode ser estendido ao se adicionar um ou mais
vértices adjacentes, ou seja, um clique que não existe exclusivamente dentro de um
conjunto de vértices de um clique maior.

Um clique maximal é um clique que não pode ser estendido incluindo mais um vértice
adjacente, ou seja, um clique que não existe exclusivamente dentro do conjunto de vértices
de um clique maior. As cliques máximas podem ser pequenas. Um grafo pode conter um
clique não máximo com muitos vértices e um clique separado de tamanho 2 que é máximo.
Enquanto uma clique máxima (isto é, a maior) é necessariamente máxima.

Um clique máximo é o maior clique possível em um dado grafo. O número do clique ω(G) de
um grafo G é o número de vértices de um clique máximo em G. O número da intersecção de
G é o menor número de cliques que, juntos, cobrem todas as arestas de G.
Exemplo

Nesse exemplo, vemos 5 cliques


de tamanho 3.

Exemplo
Um grafo com 23 cliques de 1-vértice (seus vértices), 42
cliques de 2-vértices (suas arestas), 19 cliques de 3-vértices
(os triângulos em azul claro), e 2 cliques de 4-vértices (azul
escuro). Seis das arestas e 11 dos triângulos formam
cliques maximais. As duas 4-cliques em azul escuro são
tanto máximas quanto maximais, e o número de clique do
grafo é 4.

Há uma relação simples entre cliques e coloração de


vértices: se um grafo não-dirigido tem uma clique de
tamanho q, então qualquer coloração válida precisa de
pelo menos q cores. Portanto, se um grafo não-dirigido tem
uma clique de tamanho q e uma coloração válida com
apenas q cores, a coloração é mínima e a clique é máxima.
(Em geral, entretanto, uma clique máxima é bem menor
que o número de cores de uma coloração válida mínima.).

No grafo do Sudoku, há cliques com 9 vértices e portanto


toda coloração válida precisa de pelo menos 9 cores. Por
outro lado, qualquer coloração que use apenas 9 cores
prova que o grafo não tem cliques com mais que 9 vértices.
Participantes
Bianca Santos Medeiros
Pedro Henrique Pereira Lopes Soares
Bruno Amaro de Souza
Lucas Vieira de Almeida

Referências
https://www.ime.usp.br/~pf/algoritmos_para_grafos/aulas/vertex-coloring.html
https://pt.wikipedia.org/wiki/Clique
https://discourse.opengenus.org/t/algorithm-to-find-cliques-of-a-given-size-k-in-o-n-k-time-complexity/3546
https://pt.wikipedia.org/wiki/Colora%C3%A7%C3%A3o_de_grafos

Você também pode gostar