Backtracking
-
Upload
saymon-oliveira -
Category
Technology
-
view
4.453 -
download
4
description
Transcript of Backtracking
![Page 1: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/1.jpg)
Backtracking
![Page 2: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/2.jpg)
Técnicas de Algoritmos
Técnicas de algoritmos apresentadas :
Algoritmos de Força Bruta Algoritmos de Pesquisa Exaustiva Algoritmos Dividir e Conquistar Algoritmos Gulosos Algoritmos de Backtracking (retrocesso)
2
![Page 3: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/3.jpg)
Tópicos sobre Backtracking
Conhecer a técnica.
Apresentar a técnica através de objetos ou dedução que são aplicáveis no cotidiano.
Desenvolver e explicar um algoritmo baseado em BACKTRACKING.
3
![Page 4: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/4.jpg)
Conceito sobre a técnica de Backtracking
Significado:
Volta de rastreamento.
É um algoritmo baseado em estrutura de dados, tem como meta resolver o problema no menor intervalo de tempo, não levando em consideração o esforço para alcançar a solução.
Usa recursividade.
4
![Page 5: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/5.jpg)
Executa podas quando não é possível encontrar uma solução pelo caminho escolhido.
Faz a busca em profundidade. O número de escolhas cresce pelo menos
exponencialmente com o tamanho da instância. Passos em direção à solução final são tentados e
registrados. Algoritmos tentativa e erro.
5
Características do Backtracking
![Page 6: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/6.jpg)
Animação Árvore de Backtracking
6
![Page 7: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/7.jpg)
Backtracking (animação)
7
?
?Sem saída
Sem saída
??
Sem saída
Sem saída
?
Êxito!
Sem saída
Começo
![Page 8: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/8.jpg)
Exemplo de Busca em Profundidade
8
LABIRINTO
![Page 9: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/9.jpg)
Exemplo de Busca em Profundidade
9
LABIRINTO
Dado um labirinto, encontrar um caminho do início ao fim.Em cada cruzamento, você tem que decidir entre três ou menos escolhas:
Siga em frente Vá para a esquerda Vá para a direita
Cada escolha leva a um outro conjunto de opções.Uma ou mais sequências de escolhas podem levar a uma solução.
Vídeo demonstrativo
![Page 10: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/10.jpg)
Aplicações cotidianas
10
![Page 11: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/11.jpg)
Busca Exaustiva VS Backtracking
GPS ( global position system )
11
![Page 12: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/12.jpg)
Resolver um enigma – resta 1
Modo de preenchimento.
Modo de remoção.
Objetivo.
Dificuldade.
12
![Page 13: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/13.jpg)
Problema das N rainhas
13
![Page 14: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/14.jpg)
Problema das 4 Rainhas
Formulação do problema.
Restrições.
Modo de caminho.
14
BASTANTE ATENÇÃO
![Page 15: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/15.jpg)
15
1X
2X
1X
2X
3X
4X
1X
3X
4X
1X
2X
3X
4X
1X
2X
3X
1X
2X
Linha por LinhaDemonstração
COMPLETO
![Page 16: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/16.jpg)
Algoritmo solução
Algoritmo que nos mostra as possíveis soluções envolvendo um tabuleiro 8x8, consequentemente com 8 rainhas a serem distribuídas.
Clique para abrir o algoritmo
16
![Page 17: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/17.jpg)
Problematização
Suponha que você tem que fazer uma série de decisões, entre várias opções, onde você não tem informações suficientes para saber o que escolher e que cada decisão leva a um novo conjunto de escolhas, sendo que alguma sequência de escolhas (possivelmente mais de uma) pode ser uma solução para seu problema, o BACKTRACKING é uma maneira metódica de experimentar várias sequências de decisões, até encontrar uma que "funciona”.
17
![Page 18: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/18.jpg)
Problematização
Abordagem mais comum é decompor o processo em um número finito de tarefas parciais.
A construção de uma solução é obtida através de tentativas (ou pesquisas) da árvore de sub-tarefas.
18
![Page 19: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/19.jpg)
Simulação no Google Maps
19
![Page 20: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/20.jpg)
Exemplificando
20
Notação:
A árvore é composta de nós
Primeiro é o nó raiz
Nós internos
Nós folhas
Backtracking pode ser pensado como a procura de uma árvore para um nó de “objetivo" de uma folha.
![Page 21: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/21.jpg)
Exemplificando
Cada nó não-folha em uma árvore é um pai de um ou mais outros nós (seus filhos)Cada nó na árvore, diferente da raiz, tem exatamente um dos pais
21
Nó pai
Nós filhos
Nó pai
Nós filhos
![Page 22: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/22.jpg)
Problema dos Filósofos
Tem-se 5 filósofos sentados ao redor de uma mesa. Cada filósofo tem um prato e um garfo para comer. A comida que será servida é um macarrão muito
escorregadio que deve ser comido com dois talheres. Cada filósofo só pode comer o macarrão usando o seu
garfo e o garfo de um dos dois filósofos sentados ao seu lado.
Dois filósofos não podem usar o mesmo garfo juntos. Enquanto alguns filósofos comem os outros pensam,
aguardando a hora de comer.
22
![Page 23: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/23.jpg)
Problema dos Filósofos
23
![Page 24: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/24.jpg)
Problema dos Filósofos - Algoritmoint main ()
{
int j=0, prox=0;
printf ("Digite por qual filosofo começar: ");
scanf("%d", &fil);
printf ("Digite a quantidade de macarrão: ");
scanf("%d", &mac);
criafilosofo(mac,j);
filosofo (prato, fil, prox);
printf("%d",soma);
}
24
![Page 25: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/25.jpg)
Problema dos Filósofos - Algoritmocriafilosofo(mac,j)
{
if (j<5)
{
prato[j]=mac;
printf("Filosofo %d ",j);
printf(": %i\n",prato[j]);
j++;
criafilosofo(mac,j);
}
}
25
![Page 26: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/26.jpg)
Problema dos Filósofos - Algoritmochamaproxfil(int proximo)
{
if (proximo==5)
proximo=0;
else
proximo=proximo++;
return proximo;
}
26
![Page 27: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/27.jpg)
Problema dos Filósofos - Algoritmofilosofo (int prato[], int i, int prox)
{
aux=chamaproxfil(prox);
soma=(prato[0]+prato[1]+prato[2]+prato[3]+prato[4]);
if ((i==aux)||((i+1)==aux)||((i-1)==aux)||((i==4)&&(aux==0))|| ((i==0)&&(aux==4)))
{
filosofo(prato,i,aux);
}
27
![Page 28: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/28.jpg)
Problema dos Filósofos - Algoritmoelse if(soma==0)
{
printf("Filosofo 1: %d\n", prato[0]);
printf("Filosofo 2: %d\n", prato[1]);
printf("Filosofo 3: %d\n", prato[2]);
printf("Filosofo 4: %d\n", prato[3]);
printf("Filosofo 5: %d\n", prato[4]);
printf("\n");
}
28
![Page 29: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/29.jpg)
Problema dos Filósofos - Algoritmoelse if (soma==1)
{
for(k=0;k<=4;k++)
{
if (prato[k]==1)
{
prato[k]=(prato[k]-1);
filosofo(prato,i,aux);
}
}
}
29
![Page 30: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/30.jpg)
Problema dos Filósofos - Algoritmoelse if((prato[aux]==0) ||(prato[i]==0))
{
filosofo(prato,i,aux);
} else
{
prato[i]=prato[i]-1;
prato[aux]=prato[aux]-1;
i=i+1;
if(i==5)
i=0;
30
![Page 31: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/31.jpg)
Problema dos Filósofos - Algoritmo printf("Filosofo 1: %d\n", prato[0]);
printf("Filosofo 2: %d\n", prato[1]);
printf("Filosofo 3: %d\n", prato[2]);
printf("Filosofo 4: %d\n", prato[3]);
printf("Filosofo 5: %d\n", prato[4]);
printf("\n");
filosofo(prato, i, aux);//chamada recursiva à função filosofo
}
}
31
![Page 32: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/32.jpg)
Problema dos Filósofos - Algoritmo
Conhecer o algoritmo implementado.
Clique aqui para abrir
32
![Page 33: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/33.jpg)
Começando a interação
33
![Page 34: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/34.jpg)
Mãos a obra
Acessem de qualquer máquina o link abaixo
Avaliativo
http://goo.gl/CFauR
34
![Page 35: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/35.jpg)
Mãos a obra
No site procurem a aba AVALIAÇÃO
E clique no link para começar a avaliação
( feito individualmente )
35
![Page 36: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/36.jpg)
Implementando
De acordo com as explicações implemente o algoritmo do
“Problema da Soma dos Conjuntos”.
36
![Page 37: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/37.jpg)
Exercício Algoritmo
Suponha que você emitiu cheques em maio nos valores de p(1), ..., p(n) ao longo do mês de setembro último. No fim do mês, o banco informa que um total T foi descontado de sua conta. Quais cheques foram descontados? Por exemplo, se p = {61, 62, 63, 64} e T = 125 então só há duas possibilidades: ou foram descontados os cheques 1 e 4 ou foram descontados os cheques 2 e 3. esse é o “problema da soma de subconjuntos ”. Desenvolva um algoritmo para resolver este problema empregando a estratégia backtracking.
37
![Page 38: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/38.jpg)
Finalizando
38
![Page 39: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/39.jpg)
Considerações finais
39
![Page 40: Backtracking](https://reader035.fdocuments.net/reader035/viewer/2022062419/557cfc3bd8b42a98158b4d79/html5/thumbnails/40.jpg)
40
Obrigado pela atenção!!
Danilo Fraga CostaReginaldo Faria da SilvaDouglas Vinícius Souza da MataSaymon Cristian Alves Oliveira