Você está na página 1de 7

Trabalho de Tpicos Especiais em Algoritmos e Estruturas de Dados

Ramicao e Corte para o Problema da Clique Mxima


Sumrio
1 Objetivo

2 O Problema da Clique Mxima

3 O Algoritmo de Ramicao e Corte

4 Limitantes (Bounding )

4.1

Limitante baseada em colorao de vrtices

. . . . . . . . . . . . . . . . . . . . . . . . . .

5 Instncias

6 Avaliao Experimental

7 Relatrio e Apresentao

1 Objetivo
Implementar o algoritmo de ramicao e corte (

branch and bound )

para o problema da clique mxima

visto em sala e executar experimentos com ele.

Data de Entrega:

27/8/2015 (no haver prorrogao)

Os trabalhos podem ser feitos

individualmente

ou

em dupla.

O relatrio, o cdigo fonte e outros arquivos do projeto devem ser submetidos no Moodle at a data
de entrega e os trabalhos devero ser defendidos em sala de aula (por ambos os alunos caso seja feito em
dupla). A falta da submisso dos arquivos ou a falta no dia de defesa dos trabalhos implicar em nota
nula.
Referncias bibliogrcas e a internet podem ser consultadas para sanar dvidas sobre o problema
da clique mxima, sobre a tcnica de ramicao e corte e para tirar dvidas sobre a linguagem de
programao. Porm, no ser aceita a cpia de cdigo na parte que implementa o algoritmo de ramicao
e corte.

Os pseudocdigos de todos os algoritmos esto apresentados abaixo e parte importante desse

trabalho consiste em implement-los. Cada aluno ou equipe responsvel pelo prprio cdigo e no deve
compartilhar com as demais equipes.

2 O Problema da Clique Mxima


Denio 1 (Clique) Dado um grafo
um grafo completo.

G = (V, E) uma clique em G um subconjunto de V que induz

Denio 2 (Problema da Clique Mxima) Dado um grafo, encontrar um conjunto de vrtices que
uma clique de tamanho mximo no grafo.

Veja o exemplo da gura 1. Uma lista no exaustiva de cliques daquele grafo :

{3, 4}
{3, 4, 7}
{1, 5, 8}
{2, 5, 6, 8}
Algumas dessas cliques so
e

{1, 5, 8}

isto , no podem ser estendidas.

so exemplos de cliques maximais.

cardinalidade dentre
que

maximais,

{2, 5, 6, 8}.

todas

A clique

mxima,

{1, 4}, {3, 4, 7}

As cliques

por outro lado, a clique de maior

1 . No exemplo da gura 1, h apenas uma clique mxima

as cliques do grafo

A clique mxima pode no ser nica.

Figura 1: Exemplo de grafo. Uma clique mxima desse grafo

{2, 5, 6, 8}.

O problema da clique mxima NP-difcil. Vrias solues exatas e heursticas foram propostas para
o problema da clique mxima.
ramicao e corte (

Trataremos aqui apenas de uma soluo exata baseada na tcnica de

branch and bound ) tal como descrita na prxima seo.

3 O Algoritmo de Ramicao e Corte


O algoritmo de ramicao e corte para o problema da clique mxima consiste em enumerar todas as
cliques do grafo. No incio da busca, temos uma clique vazia e todos os vrtices so candidatos a entrar
na clique. A clique atual ser denotada pela letra

K.

e o conjunto de candidatos ser denotado pela letra

Cada passo da busca consiste em escolher um vrtice

do conjunto de candidatos

e tomar dois

caminhos possveis:
1. no utilizar o vrtice
2. adicionar o vrtice

na clique

clique

O item 1 consiste em empilhar em uma pilha


removido de

K.

um estado denido pelo par

(Q, K)

com o vrtice

Esses estados empilhados sero processados posteriormente.

No item 2, alm de adicionar o vrtice

em

Q,

removemos de

v e todos os vrtices que


de K so vizinhos de todos

o vrtice

v . Isso garante a seguinte invariante: todos os vrtices


Q. Isso garante que qualquer vrtice de K pode estender a atual clique.
Quando o conjunto K se torna vazio, a clique encontrada comparada com a maior clique anteriormente

no forem vizinhos de
os vrtices da clique
encontrada.

A maior delas armazenada.

Retroceder signica remover um par

(Q, K)

backtrack ).

Ento, chega a hora do algoritmo retroceder (


do topo da pilha

P.

Vocs podem entender a execuo do algoritmo como uma rvore na qual cada nodo representa um
estado

(Q, K)

ou

(clique, candidatos).

Os lhos esquerdos de cada n representam a insero de um

A cardinalidade de um conjunto o nmero de elementos nele.

vrtice na clique e o lho direito consiste em proibir a utilizao desse vrtice (removendo-o de
adicion-lo em

sem

Q).

A seguir apresentamos o pseudocdigo do algoritmo. Precisaremos da seguinte denio:

Denio 3 (Vizinhana de vrtice) A vizinhana de um vrtice v V G (v) = {u V


E}.

Algoritmo: Ramicao e Corte para a Clique Mxima


Entrada: G = (V, E) um grafo
Sada: C V uma clique mxima de G

2 C
3 P {(, V )} // uma pilha de pares (Q, K)
4 // onde Q uma clique e K um conjunto de vrtices
5 // candidatos a entrar na clique Q
6 enquanto P 6= faa
7
(Q, K) pop(P)
8
enquanto K 6= AND |C| < |Q| + bound(G, Q, K)
9
v um elemento qualquer de K
10
K K {v}
11
P .push( (Q, K) )
12
(Q, K) (Q {v}, K G (v) )
13
14
15
16

se |C| < |Q| ento

// Encontrou uma clique maior


CQ

retorna C

faa

: {u, v}

4 Limitantes (Bounding )
Sem limitao da busca pela soluo tima, a rvore de busca do algoritmo de ramicao e corte imensa
para qualquer grafo denso com mais de 50 vrtices (informalmente, um grafo denso um grafo com muitas
arestas).
O desempenho do algoritmo de ramicao e corte depende da qualidade do limitante da busca e do
tempo computacional necessrio para calcular esse limitante.

4.1

Limitante Trivial

O limitante trivial corresponde a seguinte funo

bound(G, Q, K):

Algoritmo: bound(G, Q, K) // Limitante Trivial

devolve |K|; // devolve o tamanho do conjunto de candidatos

(Q, K) caso o tamanho da clique mxima encontrada


at ento for menor do que o tamanho da clique atual Q mais o tamanho do conjunto de candidatos K .
certo que a maior clique que pode ser encontrada a partir de (Q, K) tem tamanho menor do que ou igual
a |Q| + |K|. Veja a linha 8 do algoritmo de ramicao e corte.
Assim, a busca s continuar a partir de um n

4.2

Limitante baseada em colorao de vrtices

Uma colorao de vrtices de um grafo uma atribuio de cores a todos os vrtices do grafo tal que
vrtices adjacentes recebem cores distintas.

Denio 4 (Problema da Colorao de Vrtices) O problema da colorao de vrtices consiste em


encontrar uma colorao de vrtices com nmero mnimo de cores.

Importante:

a relao entre o problema da colorao de vrtices e o problema da clique mxima a

seguinte: o tamanho da clique mxima de um grafo menor do que ou igual ao nmero de cores utilizadas
em qualquer colorao do grafo. Note que eu disse qualquer colorao. Quanto menos cores a colorao

utilizar, menor ser o limitante para a clique mxima, porm qualquer colorao fornece um limitante .
Como o problema da colorao de vrtices tambm NP-difcil, no podemos garantir que uma colorao tima ser encontrada. Porm, pode-se utilizar uma heurstica gulosa que rpida para encontrar
alguma colorao do grafo que pode ser utilizada como limitante.
Mas como aplicar o problema da colorao ao problema da clique mxima? Considere uma clique

K em uma execuo do algoritmo de ramicao e corte. O algoritmo tenta


Q com vrtices de K . Se um subconjunto K 0 K ao ser acrescentado em Q forma uma
0
0
clique Q K em G, ento, necessariamente, K uma clique em G. Ento, a clique mxima do grafo
G[K] (o grafo induzido por K ) um limitante para o nmero de vrtices de K que podem entrar na clique
Q.
Portante, o tamanho de Q mais o tamanho de qualquer colorao de G[K] uma limitante no tamanho
da maior clique que pode ser obtida a partir do estado (Q, K) do algoritmo de busca.
0
0
Formalmente, seja um estado (Q, K) do algoritmo de ramicao e corte. Seja K K tal que Q K
a maior clique em G[Q K]. Seja c o nmero de cores de uma colorao de G[K]. Ento,

um conjunto de candidatos
estender a clique

|Q K 0 | = |Q| + |K 0 | |Q| + c
2

Caso voc encontre uma colorao que use

cores e tambm uma clique mxima de tamanho

mxima e a colorao mnima!

k,

isso garante que a clique

G[K] somada
contida em Q K .

Ou seja, qualquer colorao de


tamanho da maior clique

cardinalidade de

fornece um limitante superior no

Resumindo, temos a seguinte funo limitante:

Algoritmo: bound(G, Q, K) // Limitante usando colorao

2 c = nmero
3 devolve c;

de cores de colorao qualquer de

G[K]

Abaixo est uma das muitas heursticas gulosas para o problema da colorao. Ela necessariamente
deve ser implementada. A implementao de outras heursticas para o problema da colorao e a comparao do algoritmo de ramicao e corte com diferentes heurstica de colorao opcional (e vale nota
extra no trabalho).
A heurstica consiste em colorir os vrtices um por vez, com base em alguma ordem inicial qualquer. As
cores so representadas pelos nmeros inteiros de 1 at o nmero de cores usadas. O vrtice

v1

colorido

com a cor 1 e os demais vrtices so coloridos com a menor cor que no provoque uma colorao invlida.
Caso necessrio, uma nova cor no utilizada at ento usada (quando os vizinhos do vrtice j utilizam
todas as cores usadas previamente).
Veja abaixo o pseudocdigo dessa heurstica:

Algoritmo: Heurstica Gulosa para Colorao de Vrtices


Entrada: Conjunto de vrtices

KV

de um grafo

Sada: o tamanho de uma colorao de

2
3
4
5
6
7

cor[v] 0, para todo v em K


cor[K[0]] 1
numero_de_cores 1
para i 2 at |K| faa
para j 1 at numero_de_cores
cor_usada[j] f alse
para cada

11
12
13
14

para

15
16
17

se

18

faa

vizinho v de K[i] faa


cor[v] 6= 0 ento
cor_usada[cor[v]] true

8
9
10

se

G[K]

c 1 at numero_de_cores
se not cor _usada[c] ento
cor[K[i]] c

faa

break

c = numero_de_cores + 1 ento
numero_de_cores = numero_de_cores + 1
cor[K[i]] numero_de_cores

devolve numero_de_cores

G = (V, E)

5 Instncias
As instncias oferecidas ao programa devero estar no seguinte formato: a primeira linha contm dois
nmeros inteiros
mente. As

que representam o nmero de vrtices e o nmero de arestas do grafo, respectiva-

linhas seguintes contm cada uma um par de nmeros que corresponde aos vrtices de uma

aresta. Os grafos so no orientados. Os vrtices so sempre numerados de 1 at N.


Exemplo:

5
1
2
3
1
1
4

6
2
3
4
5
6
6
Essa instncia corresponde ao grafo com 5 vrtices e as 6 seguintes arestas:

{1, 6}

{1, 2}, {2, 3}, {3, 4}, {1, 5},

{4, 6}.

Um conjunto de 20 instncias ser oferecido na pgina da disciplina no Moodle, especicamente aqui:

http://goo.gl/RNnMFL.
Algumas dessas instncias podem ser resolvidas de forma relativamente rpida e outras so mais difceis.
Observe que sem a implementao de uma limitante para o corte (

bound ), o programa de enumerao pode

levar um tempo de execuo muito alm do prazo de entrega do trabalho (e, na verdade, muito alm da
nossa expectativa de vida). Mesmo com a implementao de um bom limitante, h instncias no muito
grandes, acima de 200 vrtices, para as quais o tempo de execuo do algoritmo de ramicao e corte
pode levar um tempo invivel.
Devido a natureza difcil do problema, recomendvel que o programa conte o nmero de nodos da
rvore de execuo que foram visitados e interrompa a execuo quando um nmero pr-determinado seja
atingido. Esse nmero precisa ser estimado para que o algoritmo execute por um nmero de horas que
voc pretende esperar pela resposta.

6 Avaliao Experimental
A avaliao experimental do trabalho consiste em executar o programa em vrias classes de grafos e
comparar os seguintes valores:

soluo.

tempo de execuo, nmero de iteraes efetuadas e qualidade da

A qualidade da soluo corresponde a indicar se o programa conseguiu produzir uma soluo

tima (cujo valor ser fornecido pelo professor) e, se no, quo prxima da soluo tima a soluo
encontrada se encontra.
O relato dos experimentos, o cdigo fonte e eventuais scripts utilizados na execuo dos experimentos
devem ser parte do relatrio.

7 Relatrio e Apresentao
Cada trabalho deve conter um relatrio em formato PDF com:
1. capa com ttulo e nome do(s) aluno(s)
2. Descrio do algoritmo de ramicao e corte e dos limitantes implementados.
3. Descrio dos experimentos executados.

4. Resultados dos experimentos.


5. Discusso sobre os resultados dos experimentos.
6. Cdigo fonte e scripts utilizados.
7. Referncias consultadas (incluindo sites na Web).
Os trabalhos devero ser apresentados e defendidos em sala. Em caso do trabalho ter sido feito em
dupla, ambos os alunos devem participar da defesa.