• Nenhum resultado encontrado

na estrutura F ree. Em um método de seleção aleatório, uma cor valida é selecionada aleatoriamente a partir do conjunto de cores disponíveis.

Para a seleção de arestas, é definido o conceito de seleção lexicográfica. Neste

método de seleção, todas as arestas não coloridas incidentes no vértice vi são proces-

sadas antes das arestas não coloridas incidentes no vértice vi+1. Além disso, as arestas

também podem ser processadas em ordem aleatória.

Combinando estas duas diferentes possibilidades de estratégias de execução, sur- gem quatro diferentes versões para o algoritmo proposto:

– PCAL: Seleção de cores pela primeira disponível e seleção de arestas em ordem lexicográfica.

– PCAA: Seleção de cores pela primeira disponível e seleção aleatória de arestas. – CAAL: Escolha aleatória de cores e seleção de arestas em ordem lexicográfica. – CAAA: Escolha aleatória de cores e arestas.

Diversas outras estratégias de escolhas de cores, arestas e vértices foram testadas, tais como: ordenar os vértices de forma a selecionar primeiramente as arestas daqueles de maior grau, ordenar os vértices de forma a selecionar primeiramente as arestas daqueles de menor grau, escolher a cor que aparece com a menor frequência no grafo para colorir a aresta, escolher a cor que aparece com a maior frequência no grafo e por fim escolher as arestas do grafo que incidem nos vértices com a maior quantidade de arestas incidentes descoloridas. No entanto, nenhuma dessas estratégias se mostraram tão eficientes quanto as que estão sendo apresentadas neste trabalho. A apresentação de tais resultados foi omitida com o objetivo de focar o texto nos resultados obtidos com maior relevância.

No Capítulo 4 são apresentados os resultados empíricos da análise das estratégias de execução propostas com o intuito de determinar aquela com o melhor desempenho.

3.4

Pré-processamento

Com o objetivo de encontrar rapidamente uma cor válida para as arestas do grafo, foram propostas estratégias de pré-processamento que verificam todas as arestas do grafo de entrada G na tentativa de determinar rapidamente uma cor válida para cada uma delas. O grafo de saída G é um grafo parcialmente colorido que será utilizado como entrada para os algoritmos de coloração de arestas apresentados nesta dissertação.

Este pré-processamento é uma função hash que determina uma cor para uma dada aresta utilizando a soma dos índices dos vértices conectados por ela, calculada

26 Capítulo 3. Algoritmo para Coloração de Arestas

em módulo ∆ + 1. Por exemplo, para determinar uma cor de uma aresta e(vi, vj)

calcula-se o resultado de (i + j) mod ∆ + 1 e então a cor α(i+j) mod ∆+1 será utilizada

para colorir tal aresta.

Caso o grafo em questão possua um vértice universal, é possível garantir que as arestas do mesmo podem ser coloridas, utilizando no máximo ∆ + 1 cores, com com- plexidade Θ(m). Esta afirmação é consequência da proposição apresentada a seguir.

Proposição. Seja o conjunto de vértices V (G) = {vo, v1, ..., vn−1} e o conjunto

de cores C = {α0, α1, ..., α∆}. Se G contém um vértice universal, é possível colorir

qualquer aresta e(vi, vj) com a cor α(i+j)mod(∆+1) e assim obter uma coloração própria

válida utilizando não mais que ∆ + 1 cores.

Prova. Sejam vi, vj e vk três vértices distintos de um grafo que possui um vértice

universal, tais que vi é adjacente a vj e a vk. Assumindo, por absurdo, que as arestas

(vi, vj) e (vi, vk) sejam coloridas com a mesma cor, gerando uma coloração inválida,

temos que:

(i + j)mod(∆ + 1) = (i + k)mod(∆ + 1)

(i + j)≡ (i + k)mod(∆ + 1)

j ≡ k mod(∆ + 1)

onde a última equação afirma que j e k devem ter o mesmo resto da divisão por ∆ + 1. Uma vez que 0 ≤ j, k < n, onde n = ∆ + 1 devido à presença de um vértice universal, implica que j = k, o que é impossível uma vez que os vértices em questão são distintos.

Portanto, também é impossível que cores iguais sejam atribuídas às arestas (vi, vj) e

(vi, vk). 

A proposição apresentada pode ser utilizada na tentativa de colorir a maior quan- tidade possível de arestas de um grafo. Se este grafo não possui um vértice universal, a proposição falha para algumas arestas e, assim, as arestas que não puderam ser coloridas pelo pré-processamento serão coloridas pelo algoritmo de coloração. Neste trabalho, o pré-processamento é aplicado de duas formas diferentes:

Pré-processamento a priori : Nesta abordagem, o algoritmo de pré-processamento

tenta colorir cada aresta (vi, vj) com a cor α(i+j)mod(∆+1). Se um conflito ocorre (porque

outra aresta incidente em vi ou em vj já foi colorida com a mesma cor), a aresta não

colorida (vi, vj) é armazenada na lista EdgeList(E) para ser posteriormente processada

pelo algoritmo principal. O Algoritmo 3 descreve os passos do pré-processamento a priori.

O passo 1 do Algoritmo 3, mostra que o procedimento deve ser aplicado em todas

3.4. Pré-processamento 27

Algoritmo 3: Utilizando o pré-processamento a priori.

1 para cada e(vi, vj)∈ Edge(G) faça

2 α← (i + j)mod(∆ + 1)

3 se α∈ F ree(vi)∩ F ree(vj) então

4 Colorir a aresta e(vi, vj) utilizando a cor α

5 senão

6 EdgeList(E)← EdgeList(E) + e

7 Aplique o algoritmo de coloração de arestas utilizando o grafo parcialmente

colorido G e a lista EdgeList(E) como entrada

é dado por (i + j)mod(∆ + 1). No passo 3, verifica-se a disponibilidade dessa cor nos

vértices vi e vj. Caso α esteja disponível nos dois vértices, no passo 4, a aresta e(vi, vj)

será colorida com a cor α. Caso contrário, a aresta e será armazenada em uma lista de arestas não coloridas, EdgeList(E), de acordo com os passos 5 e 6. No passo 7, o algoritmo de coloração de arestas é utilizado para colorir cada uma das arestas da lista EdgeList(E), com o objetivo de obter uma coloração válida de G.

No Algoritmo 3, a ordem com que as arestas são fornecidas trata-se apenas de um detalhe de implementação. Qualquer uma das ordens de seleção de arestas apresentadas na Seção 3.3 podem ser adotadas. No entanto, a estratégia a priori não garante que as arestas serão coloridas na mesma ordem em que foram passadas para o algoritmo de pré-processamento, haja visto que algumas arestas podem ser armazenadas para serem coloridas posteriormente pelo algoritmo de coloração de arestas.

Pré-processamento embutido: Nesta abordagem, o algoritmo de pré-processamento

tenta colorir cada aresta (vi, vj) com a cor α(i+j)mod(∆+1). Se um conflito ocorre, o

algoritmo de coloração de arestas é chamado imediatamente para resolvê-lo. Neste caso, o processamento embutido e o algoritmo principal de coloração de arestas trabalham juntos. O Algoritmo 4 descreve os passos do pré-processamento embutido.

Algoritmo 4: Utilizando o pré-processamento embutido.

1 para cada e(vi, vj)∈ Edge(G) faça

2 α = (i + j)mod(∆ + 1)

3 se α∈ F ree(vi)∩ F ree(vj) então

4 Colorir a aresta e(vi, vj) utilizando a cor α

5 senão

6 Aplique o algoritmo de coloração de arestas em e

28 Capítulo 3. Algoritmo para Coloração de Arestas

Algoritmo 3. No entanto, no passo 5, ao invés de armazenar a aresta não colorida, o

algoritmo de coloração de arestas é aplicado na aresta e(vi, vj), sempre garantindo uma

coloração parcial do grafo G, até que todas as arestas sejam coloridas.

Neste algoritmo, diferentemente do Algoritmo 3, o algoritmo de pré- processamento, juntamente com o algoritmo de coloração de arestas, colore as arestas de G na ordem em que são fornecidas. Assim, as estrategias de execução para a ordem de processamento das arestas, definidas na Seção 3.3, são respeitadas.

Documentos relacionados