Vous êtes sur la page 1sur 40

Backtracking

Tcnicas de Algoritmos
Tcnicas de algoritmos apresentadas :

Algoritmos de Fora Bruta


Algoritmos de Pesquisa Exaustiva
Algoritmos Dividir e Conquistar
Algoritmos Gulosos
Algoritmos de Backtracking (retrocesso)

Tpicos sobre Backtracking

Conhecer a tcnica.

Apresentar a tcnica atravs de objetos


ou deduo que so aplicveis no
cotidiano.

Desenvolver e explicar um algoritmo


baseado em BACKTRACKING.
3

Conceito sobre a tcnica de


Backtracking

Significado:
Volta de rastreamento.

um algoritmo baseado em estrutura de dados, tem


como meta resolver o problema no menor intervalo de
tempo, no levando em considerao o esforo para
alcanar a soluo.

Usa recursividade.

Caractersticas do Backtracking

Executa podas quando no possvel encontrar uma


soluo pelo caminho escolhido.
Faz a busca em profundidade.
O nmero de escolhas cresce pelo menos
exponencialmente com o tamanho da instncia.
Passos em direo soluo final so tentados e
registrados.
Algoritmos tentativa e erro.

Animao rvore de Backtracking

Backtracking (animao)
Sem sada
?
Sem sada
Comeo

Sem sada

Sem sada
Sem sada
?
xito!

Exemplo de Busca em Profundidade


LABIRINTO

Exemplo de Busca em Profundidade


LABIRINTO
Dadoumlabirinto,encontrarumcaminhodoincioaofim.
Em cadacruzamento,voc tem que decidirentretrs ou
menosescolhas:
Sigaemfrente
Vparaaesquerda
Vparaadireita
Cada escolhaleva a um outroconjunto de opes.
Umaoumaissequnciasdeescolhaspodemlevaraumasoluo.

Vdeodemonstrativo
9

Aplicaes cotidianas

10

GPS ( global position system )

BuscaExaustivaVSBacktracking

11

Resolver um enigma resta 1

Modo de preenchimento.

Modo de remoo.

Objetivo.

Dificuldade.

12

Problema das N rainhas

13

Problema das 4 Rainhas

Formulao do problema.

Restries.

Modo de caminho.

BASTANTEATENO
14

Demonstrao
LinhaporLinha

1
X

2
X

1
X

2
X

1
X

2
X

3
X

4
X

1
X

1
X

3
X

2
X

3
X

4
X

3
X

4
X

15
COMPLETO

Algoritmo soluo

Algoritmo que nos mostra as possveis solues


envolvendo um tabuleiro 8x8, consequentemente com 8
rainhas a serem distribudas.

Clique para abrir o algoritmo

16

Problematizao

Suponha que voc tem que fazer uma srie de


decises, entre vrias opes, onde voc no
tem informaes suficientes para saber o que
escolher e que cada deciso leva a um novo
conjunto de escolhas, sendo que alguma
sequncia de escolhas (possivelmente mais de
uma) pode ser uma soluo para seu problema, o
BACKTRACKING uma maneira metdica de
experimentar vrias sequncias de decises, at
encontrar uma que "funciona.

17

Problematizao

Abordagem mais comum decompor o processo


em um nmero finito de tarefas parciais.

A construo de uma soluo obtida atravs de


tentativas (ou pesquisas) da rvore de sub-tarefas.

18

Simulao no Google Maps

19

Exemplificando
A rvore composta de ns
Notao:
Primeiro o n raiz
Ns internos
Ns folhas
Backtrackingpode
ser
pensadocomo a procurade
uma rvorepara um n
deobjetivo"deumafolha.
20

Exemplificando

Cada n no-folha em uma rvore um pai de um ou


mais outros
ns (seus
filhos)
Cada n na rvore, diferente da raiz, tem exatamente um
dos pais
N pai

N pai
Ns filhos

Ns filhos
21

Problema dos Filsofos

Tem-se 5 filsofos sentados ao redor de uma mesa.


Cada filsofo tem um prato e um garfo para comer.
A comida que ser servida um macarro muito
escorregadio que deve ser comido com dois talheres.
Cada filsofo s pode comer o macarro usando o seu
garfo e o garfo de um dos dois filsofos sentados ao seu
lado.
Dois filsofos no podem usar o mesmo garfo juntos.
Enquanto alguns filsofos comem os outros pensam,
aguardando a hora de comer.
22

Problema dos Filsofos

23

Problema dos Filsofos - Algoritmo


int main ()
{
int j=0, prox=0;
printf ("Digite por qual filosofo comear: ");
scanf("%d", &fil);
printf ("Digite a quantidade de macarro: ");
scanf("%d", &mac);
criafilosofo(mac,j);
filosofo (prato, fil, prox);
printf("%d",soma);
}
24

Problema dos Filsofos - Algoritmo


criafilosofo(mac,j)
{
if (j<5)
{
prato[j]=mac;
printf("Filosofo %d ",j);
printf(": %i\n",prato[j]);
j++;
criafilosofo(mac,j);
}
}

25

Problema dos Filsofos - Algoritmo


chamaproxfil(int proximo)
{
if (proximo==5)
proximo=0;
else
proximo=proximo++;
return proximo;
}

26

Problema dos Filsofos - Algoritmo


filosofo (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 Filsofos - Algoritmo


else 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 Filsofos - Algoritmo


else 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 Filsofos - Algoritmo


else 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 Filsofos - 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 funo filosofo


}
}
31

Problema dos Filsofos - Algoritmo

Conhecer o algoritmo implementado.

Clique aqui para abrir

32

Comeando a interao

33

Mos a obra

Acessem de qualquer mquina o link


abaixo

Avaliativo

http://goo.gl/CFauR
34

Mos a obra

No site procurem a aba AVALIAO

E clique no link para comear a avaliao


( feito individualmente )

35

Implementando

De acordo com as explicaes implemente o


algoritmo do
Problema da Soma dos Conjuntos.

36

Exerccio Algoritmo
Suponha que voc emitiu cheques em maio nos valores
de p(1), ..., p(n) ao longo do ms de setembro ltimo.
No fim do ms, 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 ento 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 estratgia backtracking.
37

Finalizando

38

Consideraes finais

39

Obrigado pela ateno!!

DaniloFragaCosta
ReginaldoFariadaSilva
DouglasVinciusSouzadaMata
SaymonCristianAlvesOliveira
40

Vous aimerez peut-être aussi