You are on page 1of 21

Tratamento de Problemas NP-Difı́ceis:

BackTracking

Cid C. Souza
Eduardo C. Xavier

Instituto de Computação/Unicamp

26 de outubro de 2009

Cid C. Souza Eduardo C. Xavier (IC/Unicamp)


Tratamento de Problemas NP-Difı́ceis: BackTracking26 de outubro de 2009 1 / 21
Introdução

Casos de aplicação:
Problemas cujas soluções podem ser representadas por tuplas
(vetores) de tamanho fixo ou variável da forma (x1 , . . . , xn ).
Solucionar o problema equivale a encontrar uma tupla que otimiza ou
satisfaz uma função critério P(x1 , . . . , xn )
As vezes também queremos encontrar todas as tuplas que satisfaçam
P(x1 , . . . , xn ).
Restrições:
Explı́citas: especificam os domı́nios (finitos) das variáveis na tupla.
Implı́citas: relações entre as variáveis da tupla que especificam quais
delas respondem ao problema, satisfazendo P.

Cid C. Souza Eduardo C. Xavier (IC/Unicamp)


Tratamento de Problemas NP-Difı́ceis: BackTracking26 de outubro de 2009 2 / 21
Exemplo: Oito Rainhas

Devemos dispor 8 rainhas em um tabuleiro de tal forma que não se


ataquem.
Cada rainha deve estar em uma coluna diferente.
Váriáveis x1 , . . . , x8 que indicam em qual coluna a rainha da linha i
está.
I Restrições Explı́citas: Variáveis assumem valores em {1, 2, . . . , 8}
I Restrições Implı́citas: Duas rainhas não podem se atacar.
Note que o número de tuplas é da ordem de 8!.

Cid C. Souza Eduardo C. Xavier (IC/Unicamp)


Tratamento de Problemas NP-Difı́ceis: BackTracking26 de outubro de 2009 3 / 21
Conceitos Básicos

Algoritmo Força Bruta: enumera todas tuplas de estados e verifica


quais delas satisfazem às restrições implı́citas e explı́citas.
Algoritmo Backtracking: busca sistemática no espaço de estados do
problema que é organizado segundo uma estrutura de árvore,
denominada árvore de espaço de estados.
I uso de funções limitantes para restringir a busca na árvore.

Cid C. Souza Eduardo C. Xavier (IC/Unicamp)


Tratamento de Problemas NP-Difı́ceis: BackTracking26 de outubro de 2009 4 / 21
Conceitos Básicos

Exemplo de árv. para 4 rainhas:

1 2 3 4
x1

x2 2 3 4

x3 2
3 4 4 2 3

4 3 4 2 3 2
x4

Cid C. Souza Eduardo C. Xavier (IC/Unicamp)


Tratamento de Problemas NP-Difı́ceis: BackTracking26 de outubro de 2009 5 / 21
Conceitos Básicos

Espaço de Estados do Problema: conjunto de todas as


subseqüências das tuplas.
I No exemplo são todos os nós.
Espaço de soluções: conjunto de todas as tuplas satisfazendo as
restrições explı́citas e implı́citas.

Cid C. Souza Eduardo C. Xavier (IC/Unicamp)


Tratamento de Problemas NP-Difı́ceis: BackTracking26 de outubro de 2009 6 / 21
Conceitos Básicos

Durante a execução o algoritmo explora nós. Consideramos a seguinte


terminologia:
nós ativos: aqueles que ainda têm filhos a serem gerados.
nós amadurecidos: aqueles em que todos os filhos já foram gerados
ou não devam ser mais expandidos de acordo com a função limitante.
nó corrente: aquele que está sendo explorado.

Cid C. Souza Eduardo C. Xavier (IC/Unicamp)


Tratamento de Problemas NP-Difı́ceis: BackTracking26 de outubro de 2009 7 / 21
Conceitos Básicos

Métodos de exploração do espaço de estados (EE):


Backtracking: busca no EE é feita em profundidade. Assim que um
filho F de um nó R é gerado, o nó filho F passa a ser o nó corrente.
I É feito um backtracking para retornar ao nó R.
Branch-and-Bound: durante a busca no EE a geração de todos os
filhos do nó corrente assim como o cálculo da função limitante em
cada um deles é feita de uma vez só.

Cid C. Souza Eduardo C. Xavier (IC/Unicamp)


Tratamento de Problemas NP-Difı́ceis: BackTracking26 de outubro de 2009 8 / 21
BACK (k)
Entrada: x1 , x2 , . . . , xk−1 (já escolhidos).
Saı́da: todas as soluções serão impressas.
(* Obtém o domı́nio de xk e o seu tamanho.*)
(T , `) ← Domı́nio (x1 , x2 , . . . , xk−1 );
Para i = 1 até ` faça (* testa todos valores do domı́nio *)
xk ← T [i];
Se (x1 , . . . , xk ) satisfaz às restrições implı́citas então
IMPRIMA(x1 , . . . , xk ); (* solução encontrada *)
(* Verifica se busca deve prosseguir nesta subárvore *)
Se Bk (x1 , . . . , xk ) é verdadeiro então BACK(k + 1);
fim-para.

Cid C. Souza Eduardo C. Xavier (IC/Unicamp)


Tratamento de Problemas NP-Difı́ceis: BackTracking26 de outubro de 2009 9 / 21
Conceitos Básicos

Exemplo de backtracking para 4 rainhas:

1 2 3 4
x1

x2 2 3 4 4
1 3

B
x3 B 2 B
4 2 3 3 1

B B B B
3 3
x4

B S

Cid C. Souza Eduardo C. Xavier (IC/Unicamp)


Tratamento de Problemas NP-Difı́ceis: BackTracking26 de outubro de 2009 10 / 21
Sub-Set Sum (SuS)

SuS: dado um conjunto S = {w1 , . . . , wn } de n valores inteiros


positivos
P e um valor inteiro positivo W , existe U ⊆ {1, . . . , n} tal que
i∈U iw = W ?
Exemplo: Se n = 4, S = {11, 13, 24, 7} e W = 31 tem-se
U = {1, 2, 4} e U = {3, 4}.
Representação das soluções:
1 tupla de tamanho variável: como no exemplo acima.
2 tupla de tamanho fixo n: xi = 1 se i ∈ U e xi = 0 caso contrário.

Cid C. Souza Eduardo C. Xavier (IC/Unicamp)


Tratamento de Problemas NP-Difı́ceis: BackTracking26 de outubro de 2009 11 / 21
Sub-Set Sum (SuS)

Componentes do algoritmo:
Tuplas de tamanho n (fixo) onde todo xi está em {0, 1}.
Hipóteses: 0 < w1 ≤ w2 ≤ . . . ≤ wn < W e ni=1 wi ≥ W .
P

Para uma tupla-parcial (x1 , . . . , xk−1 ) já determinada, usar


parâmetros:
Pk−1
I s = Pi=1 wi xi . Soma dos pesos da sub-solução.
n
I r = i=k wi . Soma dos pesos restantes.

Cid C. Souza Eduardo C. Xavier (IC/Unicamp)


Tratamento de Problemas NP-Difı́ceis: BackTracking26 de outubro de 2009 12 / 21
Sub-Set Sum (SuS)

Funções Limitantes:
Pk Pn
1 Bk (x1 , . . . , xk ) = true ⇔ i=1 wi xi + i=k+1 wi ≥ W.
2 Suponha que 0 < w1 ≤ w2 ≤P . . . ≤ wn . Então (x1 , . . . , xk ) não pode
levar a uma nova solução se ki=1 wi xi + wk+1 > W . Logo, uma
outra função limitante seria:

Bk0 (x1 , . . . , xk ) = true ⇔ Bk (x1 , . . . , xk ) = true e


Pk
i=1 wi xi + wk+1 ≤ W .

Cid C. Souza Eduardo C. Xavier (IC/Unicamp)


Tratamento de Problemas NP-Difı́ceis: BackTracking26 de outubro de 2009 13 / 21
Sub-Set Sum (SuS)

SuS (s, k, r ) (* Domı́nio de xk será sempre {0, 1}. *)


xk ← 1; (* Caso xk = 1. *)
Se (s + wk = W ) então
IMPRIMA (x1 , . . . , xk , 0, . . . , 0) (* não precisa de recursão *)
se não
Se (s + wk + wk+1 ≤ W ) então SOS(s + wk , k + 1, r − wk );
fim-se
xk ← 0; (* Caso xk = 0. *)
Se (s + r − wk ≥ W ) e (s + wk+1 ≤ W ) então
SOS(s, k + 1, r − wk );
fim-se
fim.

Cid C. Souza Eduardo C. Xavier (IC/Unicamp)


Tratamento de Problemas NP-Difı́ceis: BackTracking26 de outubro de 2009 14 / 21
Sub-Set Sum (SuS)

Exemplo: n = 6, W = 30, S = {5, 10, 12, 13, 15, 18}.


Espaço de estados total na árvore: 26+1 − 1 = 127.
Parte da árvore de espaço de estados gerada por SuS(0,1,73)
(próxima transparência ...)
Legenda:
- triplas (s, k, r );
- são os nós-resposta.

Cid C. Souza Eduardo C. Xavier (IC/Unicamp)


Tratamento de Problemas NP-Difı́ceis: BackTracking26 de outubro de 2009 15 / 21
Sub-Set Sum (SuS)

0,1,73
x1=1 x1=0

5,2,68 0,2,68
x2=1 x2=0 x2=1 x2=0
15,3,58 5,3,58 10,3,58 0,3,58
x3=1 x3=0 x3=1 x3=0 x3=1 x3=0
27,4,46 15,4,46 17,4,46 5,4,46 10,4,46 12,4,46 0,4,46
x4=0 x4=1 x4=0 x4=0 x4=0 x4=1 x4=0
15,5,33 B 5,5,33 10,5,33 12,5,33 13,5,33 0,5,33
x5=1 x5=1 x5=0 x5=0
A 20,6,18 12,6,18 13,6,18
x6=1
C

Cid C. Souza Eduardo C. Xavier (IC/Unicamp)


Tratamento de Problemas NP-Difı́ceis: BackTracking26 de outubro de 2009 16 / 21
p-coloração de grafos (COR)

COR: dado um grafo não-orientado G com n vértices e representado


por sua matriz de adjacências A, encontrar todas as colorações de G
com p cores ou menos.
OBS: A versão de decisão é N P-Completo.
Representação das soluções: tuplas de tamanho n (fixo) onde
xi ∈ {0, 1, . . . , p} representa a cor do vértice i.
A cor zero significa que o vértice ainda não está colorido.
O algoritmo inicializará a tupla com zeros.
Função Limitante: recursão só é interrompida se não for possı́vel
alocar uma cor para o k-ésimo vértice.

Cid C. Souza Eduardo C. Xavier (IC/Unicamp)


Tratamento de Problemas NP-Difı́ceis: BackTracking26 de outubro de 2009 17 / 21
p-coloração de grafos (COR)

Domı́nio (x1 , . . . , xk−1 )


Para i = 1 até p faça pode[i] = 1;
Para j = 1 até k − 1 faça
Se (A[k, j] = 1 ) então
pode[xj ] ← 0; (* não pode ter cor igual a um vizinho *)
fim-para;
` ← 0; (* Constrói o domı́nio *)
Para i = 1 até p faça
Se (pode[i] = 1) então
` ← ` + 1; T [`] ← i;
fim-se;
fim-para;
Retornar (T , `).
fim.

Cid C. Souza Eduardo C. Xavier (IC/Unicamp)


Tratamento de Problemas NP-Difı́ceis: BackTracking26 de outubro de 2009 18 / 21
p-coloração de grafos (COR)

COR(k);
(T , `) ← Domı́nio(x1 , x2 , . . . , xk−1 );
Para i = 1 até ` faça
xk ← T [i];
Se k = n então (* todos vértices estão coloridos *)
IMPRIMA(x1 , . . . , xk )
se não COR(k + 1);
fim-para.

Cid C. Souza Eduardo C. Xavier (IC/Unicamp)


Tratamento de Problemas NP-Difı́ceis: BackTracking26 de outubro de 2009 19 / 21
p-coloração de grafos (COR)

B C

E D

Cid C. Souza Eduardo C. Xavier (IC/Unicamp)


Tratamento de Problemas NP-Difı́ceis: BackTracking26 de outubro de 2009 20 / 21
p-coloração de grafos (COR)

A1

B2

C3

D1 D2

E3 E1

F0 F1

Cid C. Souza Eduardo C. Xavier (IC/Unicamp)


Tratamento de Problemas NP-Difı́ceis: BackTracking26 de outubro de 2009 21 / 21

You might also like