150 likes | 284 Views
Coloração de Grafos. Ronaldo Celso Messias Correia. O Problema da Coloração. A teoria da coloração de mapas diz ser possível colorir qualquer mapa planar utilizando no mínimo quatro cores Em 1976, usando grafos, Haken e Appel apresentaram uma solução.
E N D
Coloração de Grafos Ronaldo Celso Messias Correia Ronaldo Celso Messias Correia – ronaldo@fct.unesp.br
O Problema da Coloração • A teoria da coloração de mapas diz ser possível colorir qualquer mapa planar utilizando no mínimo quatro cores • Em 1976, usando grafos, Haken e Appel apresentaram uma solução Estruturas de Dados – Listas de Adjacências: Lista de Adjacências para a região A: [B, C, D]Lista de Adjacências para a região B: [A, C, E]Lista de Adjacências para a região C: [A, B, D, E, F]Lista de Adjacências para a região D: [A, C, F]Lista de Adjacências para a região E: [B, C, F]Lista de Adjacências para a região F: [C, D, E] Ronaldo Celso Messias Correia – ronaldo@fct.unesp.br
O Problema da Coloração • Procedimento para se atribuir as cores certas a cada região é o seguinte: • Escolhe-se uma região inicial, como por exemplo a região A e atribui-se uma cor a ela • Para atribuir uma cor para B é verificado se dentre as cores existentes, existe uma que não esteja colorindo nenhuma região adjacente a B, então essa cor deverá ser escolhida. Se todas as cores existentes estiverem sendo utilizadas em regiões vizinhas a B, então uma nova cor é criada. • O raciocínio é repetido analogamente para cada uma das regiões subsequentes As regiões foram coloridas com a utilização de apenas quatro cores e que essas regiões não possuem nenhuma região vizinha com a mesma cor que ela possui. Ronaldo Celso Messias Correia – ronaldo@fct.unesp.br
Representação através de grafos • Seja G=(V,E) um grafo e C um conjunto de cores. Uma coloração de G é uma atribuição de alguma cor de C para cada vértice de G, tal que dois vértices adjacentes sempre possuam cores distintas. • Formalmente podemos declarar o problema acima como: • Uma coloração de um grafo G=(V,E) é uma função , onde C é um conjunto de cores, tal que para cada aresta (v,u) de E tem-se . Uma k-coloração de G é uma coloração que utiliza k cores. O número cromático X(G) de um grafo G é o menor número de cores k tal que existe uma k-coloração para G. • Para grafos planares, o problema de coloração está intimamente ligado ao problema das 4 cores em mapas. • Encontrar o número cromático de um grafo é uma tarefa bastante difícil e não é conhecido algoritmo eficiente para realizar esta tarefa. Desta forma tenta-se obter uma aproximação para o problema, objetivando-se encontrar alguma coloração "razoável" para o grafo, i.e., procura-se o número de cores próximo ao número cromático. Ronaldo Celso Messias Correia – ronaldo@fct.unesp.br
Aplicações da Coloração • Quando uma aplicação é modelada como um problema de coloração de vértices, os vértices em cada classe de cores representam indivíduos ou itens que não competem ou conflitam entre si • Atribuição de freqüências de rádio • Separação de produtos explosivos • Agendamento de cursos na universidade • Alocação de registros para programação Ronaldo Celso Messias Correia – ronaldo@fct.unesp.br
Atribuição de frequências de rádio: • Os vértices representam os transmissores das estações de rádio • Duas estações são adjacentes quando suas áreas de transmissão se sobrepõem, o que resultaria em interferência se elas usassem a mesma freqüência • Cada cor contém estações que podem receber a mesma frequência Ronaldo Celso Messias Correia – ronaldo@fct.unesp.br
Separação de produtos explosivos: • Os vértices representam produtos químicos necessários em algum processo de produção • Existe uma aresta ligando cada par de produtos que podem explodir, se combinados • O número cromático representa o número mínimo de compartimentos para guardar estes produtos químicos em segurança Ronaldo Celso Messias Correia – ronaldo@fct.unesp.br
Agendamento de cursos na universidade: • Os vértices representam os cursos de uma universidade • Dois cursos são adjacentes se um aluno se matricula para ambos os cursos • O número cromático representa o número mínimo de horários necessários para acomodar os cursos Ronaldo Celso Messias Correia – ronaldo@fct.unesp.br
Alocação de registradores para programação: • Os vértices representam as variáveis a serem alocadas nos registradores de execução rápida • Duas variáveis são adjacentes se elas podem estar ativas ao mesmo tempo • O número cromático representa o número mínimo de registradores necessários para evitar o problema de overswapping Ronaldo Celso Messias Correia – ronaldo@fct.unesp.br
Algoritmo de Coloração Entrada: um grafo G com lista de vértices v1, v2, ..., vp Saída: uma coloração própria de vértices f: VG {1,2, ...} Algoritmo: Coloração Seqüencial de Vértices para i = 1 até p Seja f(vi) = o menor número de cor não usado nos vizinhos de menor índice de vi retorne coloração de vértices f Ronaldo Celso Messias Correia – ronaldo@fct.unesp.br O algoritmo abaixo produz rapidamente uma coloração própriapara qualquer grafo:
Algoritmo de Coloração utilizando busca em profundidade Programa Principal montar a lista de adjacências inicializar a estrutura de cores escolher o vertice Vi de maior grau para ser colorido primeiro chamar a sub-rotina Colore_Vertice para colorir o vertice Vi escolhido Sub-rotina Colore_Vertice: Vk se o vertice Vk ainda nao foi colorido procurar a cor C apropriada se nao existir cor apropriada para colorir o vertice Vk criar uma nova cor C fim se colorir o vertice Vk com a cor C para todo vertice Vj adjacente a Vk faça chamar a sub-rotina Colore_Vertice para colorir o vertice Vj Fim se Ronaldo Celso Messias Correia – ronaldo@fct.unesp.br
Algoritmo de Coloração utilizando busca em profundidade Ronaldo Celso Messias Correia – ronaldo@fct.unesp.br
Algoritmo de Coloração utilizando busca em largura Programa Principal montar a lista de adjacências inicializar a estrutura de cores inicializar a estrutura de fila escolher o vertice Vi de maior grau para ser colorido primeiro chamar a sub-rotina Colore_Vertice para colorir o vertice Vi escolhido inserir o vertice Vi na fila Q enquanto a fila Q nao estiver vazia faca remove o vertice Vk da fila para todo vertice Vj adjacente a Vk faça chamar a sub-rotina Colore_Vertice para colorir o vertice Vj inserir Vj na fila fim para fim enquanto Sub-rotina Colore_Vertice: Vk se o vertice Vk ainda nao foi colorido procurar a cor C apropriada se nao existir cor apropriada para colorir o vertice Vk criar uma nova cor C fim se colorir o vertice Vk com a cor C fim se Ronaldo Celso Messias Correia – ronaldo@fct.unesp.br
Algoritmo de Coloração utilizando busca em profundidade Ronaldo Celso Messias Correia – ronaldo@fct.unesp.br
Exercícios • Implementar os algoritmos de coloração utilizando busca em profundidade • Implementar os algoritmos de coloração utilizando busca em largura Ronaldo Celso Messias Correia – ronaldo@fct.unesp.br