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.