Backtracking
-
Upload
saymon-oliveira -
Category
Technology
-
view
4.453 -
download
4
description
Transcript of Backtracking
Backtracking
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
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
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
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
Animação Árvore de Backtracking
6
Backtracking (animação)
7
?
?Sem saída
Sem saída
??
Sem saída
Sem saída
?
Êxito!
Sem saída
Começo
Exemplo de Busca em Profundidade
8
LABIRINTO
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
Aplicações cotidianas
10
Busca Exaustiva VS Backtracking
GPS ( global position system )
11
Resolver um enigma – resta 1
Modo de preenchimento.
Modo de remoção.
Objetivo.
Dificuldade.
12
Problema das N rainhas
13
Problema das 4 Rainhas
Formulação do problema.
Restrições.
Modo de caminho.
14
BASTANTE ATENÇÃO
15
1X
2X
1X
2X
3X
4X
1X
3X
4X
1X
2X
3X
4X
1X
2X
3X
1X
2X
Linha por LinhaDemonstração
COMPLETO
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
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
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
Simulação no Google Maps
19
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.
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
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
Problema dos Filósofos
23
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
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
Problema dos Filósofos - Algoritmochamaproxfil(int proximo)
{
if (proximo==5)
proximo=0;
else
proximo=proximo++;
return proximo;
}
26
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
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
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
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
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
Problema dos Filósofos - Algoritmo
Conhecer o algoritmo implementado.
Clique aqui para abrir
32
Começando a interação
33
Mãos a obra
Acessem de qualquer máquina o link abaixo
Avaliativo
http://goo.gl/CFauR
34
Mãos a obra
No site procurem a aba AVALIAÇÃO
E clique no link para começar a avaliação
( feito individualmente )
35
Implementando
De acordo com as explicações implemente o algoritmo do
“Problema da Soma dos Conjuntos”.
36
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
Finalizando
38
Considerações finais
39
40
Obrigado pela atenção!!
Danilo Fraga CostaReginaldo Faria da SilvaDouglas Vinícius Souza da MataSaymon Cristian Alves Oliveira