Download - coloracao-grafos-lucianoloder
TEORIA DA COMPUTAÇÃO
COLORAÇÃO DE GRAFOS
Aluno: Luciano Ludwig Loder
INTRODUÇÃO
O problema de coloração de grafos surgiu do problema de coloração de mapas, onde se desejava colorir um mapa de tal forma que estados adjacentes não tivessem a mesma cor
Atualmente esse problema é empregado em outros campos, tais quais:
Alocação de registradores em compiladores. Escalonamento de tarefas Roteamento de canal em circuitos VLSI
NÚMERO CROMÁTICO
É o número mínimo de cores necessário para colorir um grafo qualquer.
Foi provado em 1976 que o número cromático de qualquer grafo planar é de 4
POLINÔMIOS CROMÁTICOS
Conta o número de formas que um grafo pode ser colorido usando um número fixo de cores.
O polinômio cromático é uma função, P(G, t) que especifica o número de possibilidades de colorir o grafo G com T cores.
ALGORITMOS PROPOSTOS
Vários algoritmos foram propostos para resolver esse problema. Dentre eles pode-se destacar:
Pesquisa por força-bruta (solução exata) Contração Greedy coloring
Neste trabalho será apresentada a pesquisa por força-bruta e a greedy coloring.
PESQUISA POR FORÇA-BRUTA
Dados K cores e N vértices, considera cada uma das KN atribuições de K cores para N vértices e testa para cada um deles se a solução é válida.
Esse procedimento é impraticável para valores grandes de vértices N e cores K.
A complexidade do problema é O(KN).
GREEDY COLORING
Considera os vértices em uma ordem específica, V1, V2, … Vn, e atribui a V
I a menor cor disponível não
utilizada pelos vizinhos de VI, adicionando uma cor a
mais, caso necessário.
Dependendo da ordem dos vértices, esse algoritmo exige um número de cores bem maior que o mínimo.
COLORAÇÃO POR BUSCA EM PROFUNDIDADE
A rotina segue os seguintes passos:
Monta a lista de adjacências Inicializa a lista de cores Escolhe o vértice Vi de maior grau para ser colorido
primeiro Chama a sub-rotina Colore_Vertice para colorir o
vértice escolhido.
COLORAÇÃO POR BUSCA EM PROFUNDIDADE
Sub-rotina Colore_Vertice: Vk
Se o vertice Vk ainda não foi colorido Procurar a cor C apropriada Se não existir uma cor apropriada, criar
uma nova cor Colorir o vértice V com a cor C Para todo vértice Vj adjacente a Vk faça
Chamar a sub-rotina Colore_vertice para colorir o vértice Vj
COLORAÇÃO POR BUSCA EM PROFUNDIDADE
COLORAÇÃO POR BUSCA EM PROFUNDIDADE
COLORAÇÃO POR BUSCA EM PROFUNDIDADE
COLORAÇÃO POR BUSCA EM PROFUNDIDADE
COLORAÇÃO POR BUSCA EM PROFUNDIDADE
COLORAÇÃO POR BUSCA EM PROFUNDIDADE
COLORAÇÃO POR BUSCA EM PROFUNDIDADE
COLORAÇÃO POR BUSCA EM PROFUNDIDADE
Custo Computacional:
Considerando que N seja o número de vértices, E o número de arestas, NC o número de cores e NVZ o número de vizinhos (vértices adjacentes) temos:
Montar a lista de adjacência = O(N+E) Escolher o vértice de maior grau = O(N) Procurar cor = O(NVZ*NC) Colorir o vértice = O(1) Para todos os vértices, colorir todos os seus
adjacentes = O((N-1)*(NVZ*NC)) Custo total = O(N+E)+O(N)+O(N*(NVZ*NC)) = O(N³)
COLORAÇÃO POR BUSCA EM LARGURA
A rotina segue os seguintes passos:
Montar a lista de adjacências Inicializar a estrutura de cores Inicializar a estrtura de fila Escolher o vértice Vi de maior grau para ser
colorido primeiro Chamar a sub-rotina Colore_Vertice para colorir o
Vértice Vi escolhido Inserir o vértice Vi na fila Q
COLORAÇÃO POR BUSCA EM LARGURA
Enquanto a fila Q não estiver vazia, faça: Remove o vértice Vk da fila Para todo vértice Vj adjacente a Vk faça
Chamar a sub-rotina Colore_Vertice para colorir o Vértice Vj
Inserir Vj na fila
COLORAÇÃO POR BUSCA EM LARGURA
Sub-rotina Colore_Vertice Vk:
Se o verticeVk ainda não foi colorido Procurar a cor C apropriada Se não existir cor apropriada para colorir o vértice
Vk Criar uma nova cor C
Colorir o vértice Vk com a cor C
COLORAÇÃO POR BUSCA EM LARGURA
COLORAÇÃO POR BUSCA EM LARGURA
COLORAÇÃO POR BUSCA EM LARGURA
COLORAÇÃO POR BUSCA EM LARGURA
COLORAÇÃO POR BUSCA EM LARGURA
COLORAÇÃO POR BUSCA EM LARGURA
COLORAÇÃO POR BUSCA EM LARGURA
COLORAÇÃO POR BUSCA EM LARGURA
Custo computacional:
Considerando que N seja o número de vértices, E o número de arestas, NC o número de cores e NVZ o número de vizinhos, temos:
Montar a lista de adjacências = O(N+E) Escolher o vértice de maior grau = O(N) Procurar cor = O(NVZ*NC) Colorir vértice = O(1) Inserir e remover da fila = O(1) Para todos os vértices colorir todos os
seus adjacentes = O((N-1)*(NVZ*NC)) Custo total = O(N+E)+O(N)+O(N*(NVZ*NC)) = O(N³)
BIBLIOGRAFIA
http://www.lcad.icmc.usp.br/~nonato/ED/Coloracao/coloracao.html
http://en.wikipedia.org/wiki/Graph_coloring