0% acharam este documento útil (0 voto)
20 visualizações38 páginas

Algoritmo de Backtracking em Problemas Combinatórios

O documento discute vários problemas que podem ser resolvidos usando o algoritmo de backtracking, incluindo: 1) Gerar permutações de um conjunto usando backtracking. 2) O problema das N-rainhas, que envolve colocar N rainhas em um tabuleiro de xadrez sem que elas se ameacem. 3) O problema do circuito Hamiltoniano, que busca um circuito em um grafo que visita cada vértice exatamente uma vez. 4) O problema da soma do subconjunto, que busca subconjuntos de números cuja soma é igual a um valor

Enviado por

Tainah
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
20 visualizações38 páginas

Algoritmo de Backtracking em Problemas Combinatórios

O documento discute vários problemas que podem ser resolvidos usando o algoritmo de backtracking, incluindo: 1) Gerar permutações de um conjunto usando backtracking. 2) O problema das N-rainhas, que envolve colocar N rainhas em um tabuleiro de xadrez sem que elas se ameacem. 3) O problema do circuito Hamiltoniano, que busca um circuito em um grafo que visita cada vértice exatamente uma vez. 4) O problema da soma do subconjunto, que busca subconjuntos de números cuja soma é igual a um valor

Enviado por

Tainah
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Backtracking

Prof. Gustavo Soares

Backtracking

Prof. Gustavo Soares 1 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Roteiro

1. Introdução

2. Algoritmo de Backtracking

3. Gerando Permutações

5. Problema das N-Rainhas

4. Problema do Circuito Hamiltoniano

6. Problema da Soma do Subconjunto

Prof. Gustavo Soares 2 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Busca Combinatória

I Problemas de busca combinatória podem ser abordados por


busca exaustiva:
1. Listar o espaço de busca.
2. Examinar cada possibilidade.
3. Retornar as soluções que satisfazem o problema.

I Ineficiente quando o espaço de busca é grande.


I Como fazer melhor?

Prof. Gustavo Soares 2 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Por que Backtracking?

I Aborda problemas complexos de busca combinatória.


I Utilizada para encontrar conjuntos que satisfaçam algumas
restrições.
I Mais eficiente que busca exaustiva: só gera soluções
candidatas promissoras.

Prof. Gustavo Soares 3 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Formulação do Problema

Os problemas abordados por Backtracking possuem a seguinte


forma:

Problemas Abordados por Backtracking


Ache uma n-tupla (x1 , x2 , . . . , xn ), tal que cada coordenada xi é
um elemento de algum Si linearmente ordenado. A dupla pode ter
que satisfazer algumas restrições.

Prof. Gustavo Soares 4 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Ideia Geral

I As soluções são construı́das um componente por vez.


I Cada solução parcial é avaliada como promissora ou não
promissora.
I Se uma solução parcial é promissora, selecionamos o próximo
componente da solução.
I Senão, o algoritmo retrocede (backtrack) e substitui o último
componente da solução parcial por sua próxima opção.

Prof. Gustavo Soares 5 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Árvore de Estados
I Backtracking induz uma árvore do espaço de soluções:
I A raiz corresponde ao estado inicial (antes do inı́cio da busca
por uma solução).
I Um nó interno corresponde à uma solução parcial.
I Um nó folha corresponde a uma solução parcial não promissora
ou à solução final.
I A busca é feita em profundidade (DFS).

Prof. Gustavo Soares 6 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Roteiro

1. Introdução

2. Algoritmo de Backtracking

3. Gerando Permutações

5. Problema das N-Rainhas

4. Problema do Circuito Hamiltoniano

6. Problema da Soma do Subconjunto

Prof. Gustavo Soares 7 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Estrutura Geral do Algoritmo

1. Defina a representação da solução (normalmente um array).

2. Estabeleça os conjuntos S1 , . . . , Sn e a ordem em que seus


elementos são processados.

3. Estabeleça as condições que tornam uma solução parcial


válida.

4. Estabeleça um critério para identificar a solução final.

Prof. Gustavo Soares 7 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Estrutura Geral do Algoritmo

I O algoritmo induz uma árvore do espaço de estados.


I Cada nó representa enuplas parciais com os primeiros i
componentes da solução parcial.
I Para cada (x1 , x2 , . . . , xi ) válida, o algoritmo acha o próximo
elemento que é consistente com
I os valores de (x1 , x2 , . . . , xi );
I as restrições do problema;

I e o adiciona à (x1 , x2 , . . . , xi ) como seu (i + 1) componente.

Prof. Gustavo Soares 8 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Algoritmo de Backtracking

Para iniciar um algoritmo de backtracking, o seguinte pseudo-código


pode ser chamado para i = 0 (X [1 . . 0] representa a enupla vazia).

Backtrack(X [1 . . i])
1 // Input: X [1 . . i] (i primeiros componentes da solução)
2 // Output: todas as enuplas representando as soluções do problema
3 if X [1 . . i] == solução
4 write X [1 . . i]
5 else for each x ∈ Ai+1 consistente com as restrições
6 X [i + 1] = x
7 Backtrack(X [1 . . i + 1])

Prof. Gustavo Soares 9 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Roteiro

1. Introdução

2. Algoritmo de Backtracking

3. Gerando Permutações

5. Problema das N-Rainhas

4. Problema do Circuito Hamiltoniano

6. Problema da Soma do Subconjunto

Prof. Gustavo Soares 10 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Gerando Permutações

Use Backtracking para gerar todas as permutações de {1, 2, 3}.

I Restrições: sj 6= sk para todo sj , sk ∈ S e todo j 6= k

Prof. Gustavo Soares 10 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Gerando Permutações

Use Backtracking para gerar todas as permutações de {1, 2, 3}.

I Restrições: sj 6= sk para todo sj , sk ∈ S e todo j 6= k

Prof. Gustavo Soares 10 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Gerando Permutações

1. Representação da solução: um array

X [1 . . n] satisfazendo X [i] 6= X [j] para todo i 6= j

2. Condições de continuação: qualquer solução parcial X [1 . . i]


deve satisfazer

X [i] 6= X [j] para todo j < i

3. Critério solução final: i == n.

Prof. Gustavo Soares 11 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Gerando Permutações

Perm(X [1 . . i], A)
// A == conjunto a ser permutado
1 if i == n
2 write X [1 . . n]
3 else for each a ∈ A
4 X [i + 1] = a
5 if valid(X [1 . . i + 1])
6 Perm(X [1 . . i + 1], A)

Valid(X [1 . . i])
1 for j = 1 to i − 1
2 if X [j] == X [i]
3 return false
4 return true

Prof. Gustavo Soares 12 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Roteiro

1. Introdução

2. Algoritmo de Backtracking

3. Gerando Permutações

5. Problema das N-Rainhas

4. Problema do Circuito Hamiltoniano

6. Problema da Soma do Subconjunto

Prof. Gustavo Soares 13 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Problema das N-Rainhas

Ache todas as possibilidades de colocar n rainhas num tabuleiro de


xadrez n × n tal que elas não possam se atacar:

I cada linha pode conter apenas uma rainha.


I cada coluna pode conter apenas uma rainha.
I cada diagonal pode conter apenas uma rainha.

Prof. Gustavo Soares 13 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Problema das Quatro Rainhas

I Quantos candidatos terı́amos por busca exaustiva para n = 4?

Prof. Gustavo Soares 14 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Problema das Quatro Rainhas

I Quantos candidatos terı́amos por busca exaustiva para n = 4?


I 16! = 37440 possı́veis formas de dispor 4 rainhas no tabuleiro.
12!

Prof. Gustavo Soares 14 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Problema das Quatro Rainhas

I Quantos candidatos terı́amos por busca exaustiva para n = 4?


I 16! = 37440 possı́veis formas de dispor 4 rainhas no tabuleiro.
12!

I Uma busca exaustiva mais eficiente, põe uma rainha em cada


linha e coluna portanto 4! = 24 possibilidades de dispor 4
rainhas no tabuleiro.

Prof. Gustavo Soares 14 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Preliminares

1. Representação da solução: um array

X [1 . . n] onde os indı́ces representam linhas e valores colunas

2. Condições de continuação: qualquer solução parcial X [1 . . i]


deve satisfazer
I rainhas devem estar em colunas diferentes.
I rainhas não podem estar na mesma diagonal.

3. Critério solução final: i == n.

Prof. Gustavo Soares 15 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Backtracking para n = 4

Prof. Gustavo Soares 16 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Algoritmo

N-Queens(X [1 . . i])
1 if i == n
2 write X [1 . . n]
3 else for j = 1 to n
4 X [i + 1] = j
5 if valid(X [1 . . i + 1])
6 N-Queens(X [1 . . i + 1])

Valid(X [1 . . i])
1 for j = 1 to i − 1
2 if (X [j] == X [i]) or (|X [i] − X [j]| == |i − j|)
3 return false
4 return true

Prof. Gustavo Soares 17 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Exercı́cio 2

Explique como a simetria do tabuleiro pode ser usada para achar a


segunda solução do problema das 4-rainhas. Abaixo encontra-se a
primeira solução mostrada no slide anterior.

Prof. Gustavo Soares 18 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Roteiro

1. Introdução

2. Algoritmo de Backtracking

3. Gerando Permutações

5. Problema das N-Rainhas

4. Problema do Circuito Hamiltoniano

6. Problema da Soma do Subconjunto

Prof. Gustavo Soares 19 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Definição do Problema

Circuito Hamiltoniano
Um circuito hamiltoniano em um grafo não direcionado G = (V , E )
é um ciclo simples que passa por todos vértices uma única vez.

I Entrada: grafo G com n vértices.


I Saı́da: ciclo Hamiltoniano.

Prof. Gustavo Soares 19 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Restrições

I Solução será uma tupla de n+1 elementos


Si = {x1 , x2 , x3 , x4 , x5 , x6 }
I Restrições:

Prof. Gustavo Soares 20 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Restrições

I Solução será uma tupla de n+1 elementos


Si = {x1 , x2 , x3 , x4 , x5 , x6 }
I Restrições:
I xi 6= xj para todo xi , xj ∈ S e todo i 6= j com 1 < i, j ≤ n + 1
I xi = xn+1
I (xk , xk−1 ) ∈ E para todo 1 ≤ k ≤ n + 1 (cada novo
componente deve ter uma aresta com o componente anterior).

Prof. Gustavo Soares 20 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Circuito Hamiltoniano

Ham(X [1 . . i], V , E , s)
// Input: vertice V , aresta E e origem s ∈ V
1 if i == n + 1
2 write X [1 . . n]
3 else for each v ∈ V
4 X [i + 1] = v
5 if valid(X [1 . . i + 1], E )
6 Ham(X [1 . . i + 1], V , E , s)

Valid(X [1 . . i])
1 for j = 2 to i − 1
2 if (X [j] = = X [i]) or ((X [1] and X [n + 1]) 6= s)
3 return false
4 if (X [i], X [i − 1]) ∈ E
5 return true
6 else return false

Prof. Gustavo Soares 21 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Exercı́cio 1

Desenhe a árvore de busca do backtracking para o grafo abaixo até


encontrar a primeira solução.

Prof. Gustavo Soares 22 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Roteiro

1. Introdução

2. Algoritmo de Backtracking

3. Gerando Permutações

5. Problema das N-Rainhas

4. Problema do Circuito Hamiltoniano

6. Problema da Soma do Subconjunto

Prof. Gustavo Soares 23 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Problema da Soma do Subconjunto

Definição
Achar o subconjunto de um dado conjunto B = {b1 , . . . , bn } de n
inteiros positivos cujo a soma de seus elementos é igual a um dado
inteiro positivo d.

Por exemplo, para B = {1, 2, 5, 6, 8} e d = 9, há duas soluções:

{1, 2, 6} e {1, 8}

É conveniente ordenar os elementos do conjunto em ordem crescente

b1 ≤ b2 ≤ . . . bn

Prof. Gustavo Soares 23 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Problema da Soma do Subconjunto

I O espaço de estados é representado por uma árvore binária onde:


I a raiz marca o inı́cio (nenhum elemento escolhido);
I nós a direita e esquerda representam inclusão e exclusão de
elementos resp.
I Caminhos da raiz até o i-ésimo nı́vel indicam os elementos
escolhidos.
I As somas parciais s 0 são armazenadas nos nós.
I O algoritmo retrocede quando:

s 0 + si+1 > d soma muito grande


X n
s0 + sj < d soma muito pequena
j=i+1

Prof. Gustavo Soares 24 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Backtracking para uma instância do problema


Abaixo a árvore de busca para B = {3, 5, 6, 7} e d = 15.

Prof. Gustavo Soares 25 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Exercı́cio 3

Dê um algoritmo em pseudo-código para resolver o problema da


soma do subconjunto.

Prof. Gustavo Soares 26 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Considerações Finais

I Adequado a problemas complexos de busca combinatória.


I No pior caso pode ter que gerar todos os candidatos (igual
força bruta).
I A melhora depende da capacidade de poda de soluções não
promissoras.
I Muito difı́cil de analisar assintoticamente (depende do
tamanho da árvore de estados).

Prof. Gustavo Soares 27 / 28 UFCG CEEI


Introdução Algoritmo Permutações N-Rainhas Circuito Hamiltoniano Soma do Subconjunto

Referências

Anany Levitin. Introduction to the Design and Analysis of


Algorithms. Segunda Edição. Pearson International Edition,
2007.

Prof. Gustavo Soares 28 / 28 UFCG CEEI

Você também pode gostar