backtracking - decom.ufop.br · o problema das oito rainhas • colocar oito rainhas num tabuleiro...

72
Backtracking Túlio Toffolo – www.toffolo.com.br Marco Antônio Carvalho [email protected] BCC402 – Aula 10 Algoritmos e Programação Avançada

Upload: others

Post on 05-Jun-2020

10 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

Backtracking Túlio Toffolo – www.toffolo.com.br Marco Antônio Carvalho – [email protected]

BCC402 – Aula 10

Algoritmos e Programação Avançada

Page 2: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

Backtracking

•  Backtracking é um refinamento do algoritmo de busca por força bruta (ou enumeração exaustiva), no qual boa parte das soluções podem ser eliminadas sem serem explicitamente examinadas.

•  Se aplica em:

•  Problemas cuja solução pode ser definida a partir de uma seqüência de decisões.

•  Problemas que podem ser modelados por uma árvore que representa todas as possíveis seqüências de decisão.

2

Page 3: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

Backtracking

•  Se existir mais de uma decisão disponível para cada uma das n decisões, a busca exaustiva será exponencial.

•  A eficiência da estratégia depende da possibilidade de limitar a busca, ou seja, podar a árvore eliminando os ramos que não levam à solução desejada.

•  Para tanto é necessário definir um espaço de solução para o problema:

•  Que inclua a solução ótima

•  Que possa ser pesquisada de forma organizada (tipicamente como uma árvore).

3

Page 4: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

Backtracking

•  Técnica em procedimentos de busca que corresponde ao retorno de uma exploração.

•  Ex: Busca-em-Profundidade (já visto)

•  Quando chegamos a um nó v pela primeira vez, cada aresta incidente a v é explorada e então o controle volta (backtracks) ao nó a partir do qual v foi alcançado.

4

Page 5: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

Busca em Profundidade

•  Ordem de visita dos nós da árvore de busca:

•  a, b, e, (b), f, g, (f), h, (f), i, (f), (b), (a), c, (a), d

•  (parênteses indicam caminho em backtracking)

5

a

b c d

e f

g h i

1

2

3 4

5 6 7

8 9

Page 6: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

BACKTRACKING

EXEMPLO

Page 7: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

Exemplo

•  Problema:

•  Encontrar todos os números binários de 3 bits em que a soma de 1’s seja maior ou igual a 2.

•  A única forma de resolver é checar todas as possíveis combinações?

•  Estas possibilidades serão chamadas doravantes de espaço de busca.

7

Page 8: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

Exemplo

8

0 0 _

0 0 0 0 0 1

0 1 _

0 1 0 0 1 1

1 _ _ 0 _ _

1 0 _

1 0 0 1 0 1

1 1 _

1 1 0 1 1 1

_ _ _

Como reduzir o espaço de busca?

Page 9: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

APLICAÇÃO DE BACKTRACKING PROBLEMA DA MOCHILA

Page 10: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

Problema da Mochila

•  Deve-se preencher uma mochila com diversos itens com pesos e valores (benefícios) diferentes.

•  O objetivo é que se preencher a mochila com o maior valor (benefício) possível, sem ultrapassar a capacidade (peso máximo).

10

Page 11: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

Problema da Mochila

•  Entrada:

•  capacidade da mochila, K

•  n itens com pesos pi e valores vi

•  O objetivo é obter um conjunto S de itens tais que:

•  A soma dos pesos dos itens em S seja menor ou igual a K

•  A soma dos valores dos itens em S seja a maior possível

11

Page 12: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

Guloso não funciona

•  Qual item escolher primeiro?

•  Maior densidade?

•  Maior valor?

•  Menor peso?

12

Page 13: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

Solução de Força Bruta

•  Gerar todas as possiveis combinações

•  Com n itens, existem 2n soluções

•  Checar se cada solução satisfaz limite peso

•  Salvar a condição que melhor representa a solução

•  Pode ser representada como uma árvore

13

Page 14: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

Solução Força Bruta – Mochila de 10kg

A

B

C

D

E E

D

E E

C

D

E E

D

E E

B

C

D

E E

D

E E

C

D

E E

D

E E

Com Sem

Peso = 15.12 Valor = $315

Peso = 8.98 Valor = $235

Peso = 9.98 Valor = $225

A 2 $40

B 3,1 $50

C 1,98 $100

D 5 $95

E 3 $30

Page 15: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

Backtracking

•  Se alcançamos um ponto em que a solução não é mais viável, não precisamos continuar exporando a solução.

•  Podemos “voltar atrás” (backtrack) a partir deste ponto.

•  No exemplo backtracking se torna bastante útil:

•  Na medida em que o número de itens cresce.

•  Na medida em que a capacidade da mochila diminui.

15

Page 16: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

Backtracking < 10kg

A

B

C

D

E E

D

E E

C

D

E E

D

E E

B

C

D

E E

D

E E

C

D

E E

D

E E

Com Sem

A 2 $40

B 3,1 $50

C 1,98 $100

D 5 $95

E 3 $30

16

Page 17: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

Backtracking

•  Pode-se voltar atrás também quando se sabe que a melhor solução da subárvore é pior do que a melhor solução já encontrada.

•  Fundamento utilizado por muitos algoritmos

•  Exemplo típico: Branch and Bound

17

Page 18: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

Backtracking com cortes por qualidade

A

B

C

D

E E

D

E E

C

D

E E

D

B

C

D

E E

D

Com Sem

A 2 $40

B 3,1 $50

C 1,98 $100

D 5 $95

E 3 $30

C

18

Page 19: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

def backtrack(v): # v é o nó sendo pesquisado if (promissor(v)): if (existe_solucao(v)): armazena solucao(v) else: for filho in v: backtrack(filho)}

Backtracking - Solução genérica

19

Page 20: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

APLICAÇÃO DE BACKTRACKING PROBLEMA DAS OITO RAINHAS

Page 21: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

O Problema das Oito Rainhas

•  Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra.

•  Em outras palavras: escolher oito posições no tabuleiro de forma que não haja duas delas compartilhando a mesma linha, coluna ou diagonal.

21

Page 22: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

Algoritmo: Problema das Oito Rainhas

•  Enquanto não houver oito rainhas no tabuleiro faça:

•  Se na próxima linha existir uma coluna que não está sob ataque de uma rainha já no tabuleiro, coloque uma rainha nesta posição

•  Caso contrário volte à linha anterior (backtrack)

•  Mova a rainha o mínimo necessário para a direita de forma que ela não fique sob ataque

22

Page 23: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

O Problema das Oito Rainhas

23

Q

Page 24: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

O Problema das Oito Rainhas

24

Q Q

Page 25: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

O Problema das Oito Rainhas

25

Q Q

Q

Page 26: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

O Problema das Oito Rainhas

26

Q Q

Q Q

Page 27: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

O Problema das Oito Rainhas

27

Q Q

Q Q

Q

Page 28: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

O Problema das Oito Rainhas

28

Q Q

Q Q

Q

Page 29: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

O Problema das Oito Rainhas

29

Q Q

Q Q

Q

Page 30: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

O Problema das Oito Rainhas

30

Q Q

Q Q

Q

Page 31: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

O Problema das Oito Rainhas

31

Q Q

Q Q

Page 32: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

O Problema das Oito Rainhas

32

Q Q

Q Q

Page 33: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

O Problema das Oito Rainhas

33

Q Q

Q Q

Q

Page 34: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

O Problema das Oito Rainhas

34

Q Q

Q Q

Q Q

Page 35: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

O Problema das Oito Rainhas

35

Q Q

Q Q

Q Q

Q

Page 36: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

O Problema das Oito Rainhas

36

Q Q

Q Q

Q Q

Q

Page 37: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

O Problema das Oito Rainhas

37

Q Q

Q Q

Q Q

Page 38: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

O Problema das Oito Rainhas

38

Q Q

Q Q

Q Q

Page 39: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

O Problema das Oito Rainhas

39

Q Q

Q Q

Q

Page 40: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

O Problema das Oito Rainhas

40

Q Q

Q Q

Q

Page 41: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

O Problema das Oito Rainhas

41

Q Q

Q Q

Q

Page 42: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

O Problema das Oito Rainhas

42

Q Q

Q Q

Q

Page 43: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

O Problema das Oito Rainhas

43

Q Q

Q Q

Q

Page 44: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

O Problema das Oito Rainhas

44

Q Q

Q Q

Page 45: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

O Problema das Oito Rainhas

45

Q Q

Q

Page 46: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

O Problema das Oito Rainhas

46

Q Q

Q Q

Page 47: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

O Problema das Oito Rainhas

47

Q Q

Q Q

Page 48: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

O Problema das Oito Rainhas

48

início

(1,1)

(2,3)

(3,5)

(4,2)

(5,4) (5,8)

(4,7)

(5,2)

(6,4)

(7,6)

(5,4)

Page 49: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

APLICAÇÃO DE BACKTRACKING PROBLEMA DA 3-COLORAÇÃO

Page 50: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

Problema da 3-Coloração

•  Dado um grafo G(V, E), encontrar uma 3-coloração de G, ou seja, definir uma função cor V → {1, 2, 3} de forma que:

•  Se (u, v) é uma aresta em E, então cor(u) ≠ cor(v).

50

Page 51: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

para v ← 1 até n faça cor(v) ← 0;cor(1) ← 1;se (3-Colorir(1)) então imprima cor senão imprima “Impossível 3-colorir”

Algoritmo para Problema da 3-Coloração

51

Page 52: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

procedimento 3-Colorir(v): se v = n então retorne (suc) tome o vértice z ← v+1 se z não tem vizinhos w com cor(w) = 1 então cor (z) ← 1; se (3-Colorir (z)) então retorne (suc) se z não tem vizinhos w com cor(w) = 2 então cor (z) ← 2; se (3-Colorir (z)) então retorne (suc) se z não tem vizinhos w com cor(w) = 3 então cor (z) ← 3; se (3-Colorir (z)) então retorne (suc) cor (z) ← 0; retorne (fail); // backtrack feito pela recursão

Algoritmo para Problema da 3-Coloração

52

Page 53: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

Problema da 3-Coloração

53

1

2 3

4 5

6

7

?

Page 54: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

O Problema da 3-Coloração

54

1

2 3

4 5

6

7

Page 55: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

APLICAÇÃO DE BACKTRACKING BRANCH-AND-BOUND

Page 56: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

Branch-and-Bound

•  Uma outra técnica muito usada que está relacionada com Backtracking é a técnica chamada Branch-and-Bound.

•  Branch-and-Bound é uma técnica de exploração mais sofisticada, que procura explorar opções (branch), mas colocando um limite quantitativo (bound), com o objetivo de evitar buscas em espaços menos promissores.

56

Page 57: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

Branch-and-Bound

•  Exemplo:

•  Análise das possíveis seqüências de lances na implementação de um jogo, explorando os lances que parecem melhores, uma vez que o número total de possibilidades é muito grande.

•  Esta técnica é muito utilizada também na resolução de modelos de Programação Linear Inteira, podendo ser combinada com outras técnicas, gerando, por exemplo:

•  Branch-and-cut

•  Branch-and-price

•  Branch-and-lift

57

Page 58: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

APLICAÇÃO DE BACKTRACKING CAIXEIRO VIAJANTE

Page 59: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

Problema do Caixeiro Viajante

•  O problema do caixeiro viajante consiste em minimizar o custo de um caixeiro viajante que deseja percorrer n cidades, visitando cada cidade apenas uma vez, e retornar para casa.

59

w

z u

t

v

10 9

5 6

7

11

6

9

10 7

Page 60: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

Usando forca bruta:

Se calcularmos um bilhão de solucoes por

segundo para o problema do caixeriro

com 30 cidades demoraria 8 quadrilhoes

de anos para achar a melhor solucao.

Problema do Caixeiro Viajante

Page 61: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

Problema do Caixeiro Viajante

•  Construindo a árvore de soluções:

•  Um nó que não é folha representa todas as viagens que começam no caminho armazenado pelo nó.

•  Cada folha representa uma viagem ou caminho abandonado.

•  O algoritmo deve expandir cada nó promissor e parar quando todos os nós promissores tiverem sido expandidos.

•  Durante o procedimento devem ser abandonados todos os nós não promissores.

61

Page 62: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

Problema do Caixeiro Viajante

•  Nó promissor: o limite inferior do nó é menor do que o atual tamanho da viagem

•  Nó não promissor: o limite inferior do nó não é menor do que o atual tamanho da viagem

62

Page 63: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:
Page 64: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

A B C D E

A - 3 4 2 7

B 3 - 4 6 3

C 4 4 - 5 8

D 2 6 5 - 6

E 7 3 8 6 -

Limite Inferior para cada nó: Nenhum caminho pode custar mais que metade do total do custo dos

vertices incidentes de menor custo no nó

Caso A - Sem restricoes

a (a, d), (a, b) 5 b (a, b), (b, e) 6 c (c, b), (c, a) 8 d (d, a), (d, c) 7 e (e, b), (e, f) 9

ABCDE = (5 + 6 + 8 + 7 + 9) =

17.5

Page 65: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

A B C D E

A - 3 4 2 7

B 3 - 4 6 3

C 4 4 - 5 8

D 2 6 5 - 6

E 7 3 8 6 -

Limite Inferior para cada nó: Nenhum caminho pode custar mais que metade do total do custo dos

vertices incidentes de menor custo no nó

Caso B – Com ab

a (a, d), (a, b) 5 b (a, b), (b, e) 6 c (c, b), (c, a) 8 d (d, a), (d, c) 7 e (e, b), (e, f) 9

ABCDE = (5 + 6 + 8 + 7 + 9) =

17.5

Page 66: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

A B C D E

A - 3 4 2 7

B 3 - 4 6 3

C 4 4 - 5 8

D 2 6 5 - 6

E 7 3 8 6 -

Limite Inferior para cada nó: Nenhum caminho pode custar mais que metade do total do custo dos

vertices incidentes de menor custo no nó

Caso C - Calculo sem AB

a (a,d), (a,c) 6 b (b,c), (b,e) 7 c (c,b), (c,a) 8 d (d,a), (d,c) 7 e (e,b), (e,f) 9

ABCDE = (6 + 7 + 8 + 7 + 9) =

18.5

Page 67: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

A B C D E

A - 3 4 2 7

B 3 - 4 6 3

C 4 4 - 5 8

D 2 6 5 - 6

E 7 3 8 6 -

Limite Inferior para cada nó: Nenhum caminho pode custar mais que metade do total do custo dos

vertices incidentes de menor custo no nó

Caso D - com ab ac sem ad ae

a (a,b), (a,c) 7 B (a,b), (b,e) 6 c (c,b), (c,a) 8 d (d,b), (d,c) 11 e (e,b), (e,f) 9

ABCDE = (7 + 6 + 8 + 11 + 9)

= 20.5

Page 68: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

A B C D E

A - 3 4 2 7

B 3 - 4 6 3

C 4 4 - 5 8

D 2 6 5 - 6

E 7 3 8 6 -

Limite Inferior para cada nó: Nenhum caminho pode custar mais que metade do total do custo dos

vertices incidentes de menor custo no nó

Caso E - Com ab, Sem ac

a (a, d), (a, b) 5 b (a, b), (b, e) 6 c (c, b), (c,d) 9 d (d, a), (d, c) 7 e (e, b), (e, f) 9

ABCDE = (5 + 6 + 9 + 7 + 9) =

18

Page 69: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

A B C D E

A - 3 4 2 7

B 3 - 4 6 3

C 4 4 - 5 8

D 2 6 5 - 6

E 7 3 8 6 -

Limite Inferior para cada nó: Nenhum caminho pode custar mais que metade do total do custo dos

vertices incidentes de menor custo no nó

Caso F- Com ab, ad sem ac, ae

a (a, d), (a, b) 5 b (a, b), (b, e) 6 c (c, b), (c, d) 9 d (d, a), (d, c) 7 e (e, b), (e, f) 9

ABCDE = (5 + 6 + 8 + 7 + 9)

=18

Page 70: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

A B C D E

A - 3 4 2 7

B 3 - 4 6 3

C 4 4 - 5 8

D 2 6 5 - 6

E 7 3 8 6 -

Page 71: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

Algorithm TSP_Backtrack (A, , lengthSoFar , minCost)

1. n ← length[A] // numero de elementos em A2. if l = n3. then minCost ← lengthSoFar + distance[A[n], A[1]]4. else for i ← l+1 to n5. do Swap A[l+1], A[i]6. newLength ← lengthSoFar + distance[A[ l ], A[ l+ 1]]7. if newLength minCost // solução não promissora8. then skip9. else minCost ← min(minCost, TSP_Backtrack(A, l+1, newLength, minCost))10. Swap A[l+1], A[i] // desfaz a ação11. return minCost

Algoritmo: Caixeiro Viajante com Backtracking

Page 72: Backtracking - decom.ufop.br · O Problema das Oito Rainhas • Colocar oito rainhas num tabuleiro de xadrez, de forma que nenhuma delas seja atacada por outra. • Em outras palavras:

Perguntas?

72