Backtracking

Post on 14-Jun-2015

4.453 views 4 download

description

Técnica de complexidade de algoritmo BACKTRACKING, bem ilustrada e resumida.

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