coloracao-grafos-lucianoloder

29
TEORIA DA COMPUTAÇÃO COLORAÇÃO DE GRAFOS Aluno: Luciano Ludwig Loder

Upload: carla-pires

Post on 27-Oct-2014

74 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: coloracao-grafos-lucianoloder

TEORIA DA COMPUTAÇÃO

COLORAÇÃO DE GRAFOS

Aluno: Luciano Ludwig Loder

Page 2: coloracao-grafos-lucianoloder

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

Page 3: coloracao-grafos-lucianoloder

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

Page 4: coloracao-grafos-lucianoloder

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.

Page 5: coloracao-grafos-lucianoloder

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.

Page 6: coloracao-grafos-lucianoloder

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).

Page 7: coloracao-grafos-lucianoloder

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.

Page 8: coloracao-grafos-lucianoloder

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.

Page 9: coloracao-grafos-lucianoloder

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

Page 10: coloracao-grafos-lucianoloder

COLORAÇÃO POR BUSCA EM PROFUNDIDADE

Page 11: coloracao-grafos-lucianoloder

COLORAÇÃO POR BUSCA EM PROFUNDIDADE

Page 12: coloracao-grafos-lucianoloder

COLORAÇÃO POR BUSCA EM PROFUNDIDADE

Page 13: coloracao-grafos-lucianoloder

COLORAÇÃO POR BUSCA EM PROFUNDIDADE

Page 14: coloracao-grafos-lucianoloder

COLORAÇÃO POR BUSCA EM PROFUNDIDADE

Page 15: coloracao-grafos-lucianoloder

COLORAÇÃO POR BUSCA EM PROFUNDIDADE

Page 16: coloracao-grafos-lucianoloder

COLORAÇÃO POR BUSCA EM PROFUNDIDADE

Page 17: coloracao-grafos-lucianoloder

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³)

Page 18: coloracao-grafos-lucianoloder

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

Page 19: coloracao-grafos-lucianoloder

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

Page 20: coloracao-grafos-lucianoloder

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

Page 21: coloracao-grafos-lucianoloder

COLORAÇÃO POR BUSCA EM LARGURA

Page 22: coloracao-grafos-lucianoloder

COLORAÇÃO POR BUSCA EM LARGURA

Page 23: coloracao-grafos-lucianoloder

COLORAÇÃO POR BUSCA EM LARGURA

Page 24: coloracao-grafos-lucianoloder

COLORAÇÃO POR BUSCA EM LARGURA

Page 25: coloracao-grafos-lucianoloder

COLORAÇÃO POR BUSCA EM LARGURA

Page 26: coloracao-grafos-lucianoloder

COLORAÇÃO POR BUSCA EM LARGURA

Page 27: coloracao-grafos-lucianoloder

COLORAÇÃO POR BUSCA EM LARGURA

Page 28: coloracao-grafos-lucianoloder

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³)

Page 29: coloracao-grafos-lucianoloder

BIBLIOGRAFIA

http://www.lcad.icmc.usp.br/~nonato/ED/Coloracao/coloracao.html

http://en.wikipedia.org/wiki/Graph_coloring