SlideShare uma empresa Scribd logo
1 de 40
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
Características do Backtracking

   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
Animação Árvore de Backtracking



                                  6
Backtracking (animação)

                           Sem saída
               ?
                       Sem saída
                                        Sem saída

                       ?
Começo   ?    ?                       Sem saída
                                 Sem saída
                   ?
                               Êxito!


                                                    7
Exemplo de Busca em Profundidade
               LABIRINTO




                                   8
Exemplo de Busca em Profundidade
                         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

                                                              9
Aplicações cotidianas




                        10
GPS ( global position system )




Busca Exaustiva VS
Backtracking



                                  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.




BASTANTE ATENÇÃO

                              14
Demonstração
                                        Linha por Linha




1   2                               1        2       3
X   X                               X        X       X




                    1           3   4
    1   2   3   4   X           X   X
    X   X   X   X




                    1   2   3   4        1       2
                    X   X   X   X                         15
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
A árvore é composta de nós

Notação:
  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.

                               20
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
                                            Nó pai




      Nó pai

               Nós filhos                  Nós filhos


                                                           21
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 - Algoritmo
int 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 - Algoritmo
criafilosofo(mac,j)
{
   if (j<5)
   {
      prato[j]=mac;
      printf("Filosofo %d ",j);
      printf(": %in",prato[j]);
      j++;
      criafilosofo(mac,j);
   }
}

                                       25
Problema dos Filósofos - Algoritmo
chamaproxfil(int proximo)
{

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




                                         26
Problema dos Filósofos - 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 Filósofos - Algoritmo
else if(soma==0)
   {
      printf("Filosofo 1: %dn", prato[0]);
      printf("Filosofo 2: %dn", prato[1]);
      printf("Filosofo 3: %dn", prato[2]);
      printf("Filosofo 4: %dn", prato[3]);
      printf("Filosofo 5: %dn", prato[4]);
      printf("n");
   }




                                              28
Problema dos Filósofos - 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 Filósofos - 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 Filósofos - Algoritmo
        printf("Filosofo 1: %dn", prato[0]);
        printf("Filosofo 2: %dn", prato[1]);
        printf("Filosofo 3: %dn", prato[2]);
        printf("Filosofo 4: %dn", prato[3]);
        printf("Filosofo 5: %dn", 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
Obrigado pela atenção!!



   Danilo Fraga Costa
   Reginaldo Faria da Silva
   Douglas Vinícius Souza da
   Mata
   Saymon Cristian Alves Oliveira
                                    40

Mais conteúdo relacionado

Mais procurados

CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説AtCoder Inc.
 
AtCoder Beginner Contest 006 解説
AtCoder Beginner Contest 006 解説AtCoder Beginner Contest 006 解説
AtCoder Beginner Contest 006 解説AtCoder Inc.
 
競技プログラミングでの線型方程式系
競技プログラミングでの線型方程式系競技プログラミングでの線型方程式系
競技プログラミングでの線型方程式系tmaehara
 
09d transform & conquer spring2015
09d transform & conquer spring201509d transform & conquer spring2015
09d transform & conquer spring2015Hira Gul
 
AtCoder Regular Contest 046
AtCoder Regular Contest 046AtCoder Regular Contest 046
AtCoder Regular Contest 046AtCoder Inc.
 
AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説AtCoder Inc.
 
CODE FESTIVAL 予選B 解説
CODE FESTIVAL 予選B 解説CODE FESTIVAL 予選B 解説
CODE FESTIVAL 予選B 解説AtCoder Inc.
 
AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説AtCoder Inc.
 
幾何コンテスト2013
幾何コンテスト2013幾何コンテスト2013
幾何コンテスト2013Naoto Mizuno
 
Multi-Objective Evolutionary Algorithms
Multi-Objective Evolutionary AlgorithmsMulti-Objective Evolutionary Algorithms
Multi-Objective Evolutionary AlgorithmsSong Gao
 
AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説AtCoder Inc.
 
AtCoder Beginner Contest 018 解説
AtCoder Beginner Contest 018 解説AtCoder Beginner Contest 018 解説
AtCoder Beginner Contest 018 解説AtCoder Inc.
 
CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説AtCoder Inc.
 
Algoritmo clique maximo - Analise de Algoritmos
Algoritmo clique maximo  - Analise de AlgoritmosAlgoritmo clique maximo  - Analise de Algoritmos
Algoritmo clique maximo - Analise de AlgoritmosAdilmar Dantas
 
Advanced Algorithms: Transform and conquer
Advanced Algorithms: Transform and conquerAdvanced Algorithms: Transform and conquer
Advanced Algorithms: Transform and conquerAbdulrazak Zakieh
 

Mais procurados (20)

CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説
 
AtCoder Beginner Contest 006 解説
AtCoder Beginner Contest 006 解説AtCoder Beginner Contest 006 解説
AtCoder Beginner Contest 006 解説
 
競技プログラミングでの線型方程式系
競技プログラミングでの線型方程式系競技プログラミングでの線型方程式系
競技プログラミングでの線型方程式系
 
09d transform & conquer spring2015
09d transform & conquer spring201509d transform & conquer spring2015
09d transform & conquer spring2015
 
A greedy algorithms
A greedy algorithmsA greedy algorithms
A greedy algorithms
 
AtCoder Regular Contest 046
AtCoder Regular Contest 046AtCoder Regular Contest 046
AtCoder Regular Contest 046
 
Maximal Flow Problem
Maximal Flow ProblemMaximal Flow Problem
Maximal Flow Problem
 
AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説
 
CODE FESTIVAL 予選B 解説
CODE FESTIVAL 予選B 解説CODE FESTIVAL 予選B 解説
CODE FESTIVAL 予選B 解説
 
AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説
 
幾何コンテスト2013
幾何コンテスト2013幾何コンテスト2013
幾何コンテスト2013
 
Multi-Objective Evolutionary Algorithms
Multi-Objective Evolutionary AlgorithmsMulti-Objective Evolutionary Algorithms
Multi-Objective Evolutionary Algorithms
 
abc027
abc027abc027
abc027
 
AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説AtCoder Beginner Contest 007 解説
AtCoder Beginner Contest 007 解説
 
Greedy method
Greedy method Greedy method
Greedy method
 
AI_Session 20 Horn clause.pptx
AI_Session 20 Horn clause.pptxAI_Session 20 Horn clause.pptx
AI_Session 20 Horn clause.pptx
 
AtCoder Beginner Contest 018 解説
AtCoder Beginner Contest 018 解説AtCoder Beginner Contest 018 解説
AtCoder Beginner Contest 018 解説
 
CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説
 
Algoritmo clique maximo - Analise de Algoritmos
Algoritmo clique maximo  - Analise de AlgoritmosAlgoritmo clique maximo  - Analise de Algoritmos
Algoritmo clique maximo - Analise de Algoritmos
 
Advanced Algorithms: Transform and conquer
Advanced Algorithms: Transform and conquerAdvanced Algorithms: Transform and conquer
Advanced Algorithms: Transform and conquer
 

Destaque

Destaque (11)

Criptografias - WEP vs WPA
Criptografias - WEP vs WPACriptografias - WEP vs WPA
Criptografias - WEP vs WPA
 
Aula 7 - Ataque de Força Bruta
Aula 7 - Ataque de Força BrutaAula 7 - Ataque de Força Bruta
Aula 7 - Ataque de Força Bruta
 
ANÁLISE E OBSERVAÇÃO PRÉ JOGO DO SPFC SUB 20 - COPA SP 2016 - IMAGENS
ANÁLISE E OBSERVAÇÃO PRÉ JOGO DO SPFC SUB 20 - COPA SP 2016 - IMAGENSANÁLISE E OBSERVAÇÃO PRÉ JOGO DO SPFC SUB 20 - COPA SP 2016 - IMAGENS
ANÁLISE E OBSERVAÇÃO PRÉ JOGO DO SPFC SUB 20 - COPA SP 2016 - IMAGENS
 
Ia un01 busca_qualquer_caminho
Ia un01 busca_qualquer_caminhoIa un01 busca_qualquer_caminho
Ia un01 busca_qualquer_caminho
 
Backtracking
BacktrackingBacktracking
Backtracking
 
Programação Dinâmica
Programação DinâmicaProgramação Dinâmica
Programação Dinâmica
 
Backtracking - Gerar todos os subconjuntos
Backtracking - Gerar todos os subconjuntosBacktracking - Gerar todos os subconjuntos
Backtracking - Gerar todos os subconjuntos
 
Algoritmo Guloso
Algoritmo GulosoAlgoritmo Guloso
Algoritmo Guloso
 
Aula sobre teorias da informação e da comunicação
Aula sobre teorias da informação e da comunicaçãoAula sobre teorias da informação e da comunicação
Aula sobre teorias da informação e da comunicação
 
Escalas maiores e menores
Escalas maiores e menoresEscalas maiores e menores
Escalas maiores e menores
 
Algoritmo de backtracking
Algoritmo de backtrackingAlgoritmo de backtracking
Algoritmo de backtracking
 

Semelhante a Backtracking: técnica de algoritmos de retrocesso

Algoritmos e Programação_01
Algoritmos e Programação_01Algoritmos e Programação_01
Algoritmos e Programação_01Gabriel Demétrio
 
INFUZZY - FERRAMENTA PARA DESENVOLVIMENTO DE APLICAÇÕES DE SISTEMAS DIFUSOS
INFUZZY - FERRAMENTA PARA  DESENVOLVIMENTO DE APLICAÇÕES  DE SISTEMAS DIFUSOSINFUZZY - FERRAMENTA PARA  DESENVOLVIMENTO DE APLICAÇÕES  DE SISTEMAS DIFUSOS
INFUZZY - FERRAMENTA PARA DESENVOLVIMENTO DE APLICAÇÕES DE SISTEMAS DIFUSOSEderson Posselt
 
Aula 01 - Apresentação - Introdução a Lógica.pptx
Aula 01 - Apresentação - Introdução a Lógica.pptxAula 01 - Apresentação - Introdução a Lógica.pptx
Aula 01 - Apresentação - Introdução a Lógica.pptxMárcio Santos
 
Conceito de funçao e modularizaçao
Conceito de funçao e modularizaçaoConceito de funçao e modularizaçao
Conceito de funçao e modularizaçaossuserc6132d
 
Introduçao a Algoritmo...................
Introduçao a Algoritmo...................Introduçao a Algoritmo...................
Introduçao a Algoritmo...................Márcio Santos
 
Algoritmos e Estruturas de Dados, edição de 2013/2014
Algoritmos e Estruturas de Dados, edição de 2013/2014Algoritmos e Estruturas de Dados, edição de 2013/2014
Algoritmos e Estruturas de Dados, edição de 2013/2014Pedro Guerreiro
 
Manual winplot
Manual winplotManual winplot
Manual winplotFranbfk
 
Inteligencia artificial 2
Inteligencia artificial 2Inteligencia artificial 2
Inteligencia artificial 2Nauber Gois
 
Aprendizado de Máquina em Linguagem Natural
Aprendizado de Máquina em Linguagem NaturalAprendizado de Máquina em Linguagem Natural
Aprendizado de Máquina em Linguagem NaturalBeatriz Albiero
 
8a. aula -_estrutura_de_controle_de_repeticao_-_while_java
8a. aula -_estrutura_de_controle_de_repeticao_-_while_java8a. aula -_estrutura_de_controle_de_repeticao_-_while_java
8a. aula -_estrutura_de_controle_de_repeticao_-_while_javaMirlem Pereira
 

Semelhante a Backtracking: técnica de algoritmos de retrocesso (20)

Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Algoritmos e Programação_01
Algoritmos e Programação_01Algoritmos e Programação_01
Algoritmos e Programação_01
 
INFUZZY - FERRAMENTA PARA DESENVOLVIMENTO DE APLICAÇÕES DE SISTEMAS DIFUSOS
INFUZZY - FERRAMENTA PARA  DESENVOLVIMENTO DE APLICAÇÕES  DE SISTEMAS DIFUSOSINFUZZY - FERRAMENTA PARA  DESENVOLVIMENTO DE APLICAÇÕES  DE SISTEMAS DIFUSOS
INFUZZY - FERRAMENTA PARA DESENVOLVIMENTO DE APLICAÇÕES DE SISTEMAS DIFUSOS
 
Aula 01 - Apresentação - Introdução a Lógica.pptx
Aula 01 - Apresentação - Introdução a Lógica.pptxAula 01 - Apresentação - Introdução a Lógica.pptx
Aula 01 - Apresentação - Introdução a Lógica.pptx
 
Conceito de funçao e modularizaçao
Conceito de funçao e modularizaçaoConceito de funçao e modularizaçao
Conceito de funçao e modularizaçao
 
Algoritmos e Programação
Algoritmos e ProgramaçãoAlgoritmos e Programação
Algoritmos e Programação
 
Forb.cap1
Forb.cap1Forb.cap1
Forb.cap1
 
GCompris Linux Educaional 3.0
GCompris Linux Educaional 3.0GCompris Linux Educaional 3.0
GCompris Linux Educaional 3.0
 
Introduçao a Algoritmo...................
Introduçao a Algoritmo...................Introduçao a Algoritmo...................
Introduçao a Algoritmo...................
 
Algoritmos e Estruturas de Dados, edição de 2013/2014
Algoritmos e Estruturas de Dados, edição de 2013/2014Algoritmos e Estruturas de Dados, edição de 2013/2014
Algoritmos e Estruturas de Dados, edição de 2013/2014
 
GCompris - Linux Educacional 3.0
GCompris - Linux Educacional 3.0GCompris - Linux Educacional 3.0
GCompris - Linux Educacional 3.0
 
Manual winplot
Manual winplotManual winplot
Manual winplot
 
Aula1
Aula1Aula1
Aula1
 
Inteligencia artificial 2
Inteligencia artificial 2Inteligencia artificial 2
Inteligencia artificial 2
 
Usando o winplot
Usando o winplotUsando o winplot
Usando o winplot
 
Aprendizado de Máquina em Linguagem Natural
Aprendizado de Máquina em Linguagem NaturalAprendizado de Máquina em Linguagem Natural
Aprendizado de Máquina em Linguagem Natural
 
8a. aula -_estrutura_de_controle_de_repeticao_-_while_java
8a. aula -_estrutura_de_controle_de_repeticao_-_while_java8a. aula -_estrutura_de_controle_de_repeticao_-_while_java
8a. aula -_estrutura_de_controle_de_repeticao_-_while_java
 
scilab aula 05
scilab  aula 05scilab  aula 05
scilab aula 05
 
Curso freehand
Curso freehandCurso freehand
Curso freehand
 

Mais de Saymon Cristian Alves Oliveira (7)

Terceirização de TI
Terceirização de TITerceirização de TI
Terceirização de TI
 
Apostila Arduino - Núcleo de Estudos em Robótica SheepSet
Apostila Arduino - Núcleo de Estudos em Robótica SheepSetApostila Arduino - Núcleo de Estudos em Robótica SheepSet
Apostila Arduino - Núcleo de Estudos em Robótica SheepSet
 
Team Software Process (TSP)
Team Software Process (TSP)Team Software Process (TSP)
Team Software Process (TSP)
 
Inteligência Artificial - Busca com informação
Inteligência Artificial - Busca com informaçãoInteligência Artificial - Busca com informação
Inteligência Artificial - Busca com informação
 
Mais sobre ead
Mais sobre ead Mais sobre ead
Mais sobre ead
 
Softwares de autoria
Softwares de autoriaSoftwares de autoria
Softwares de autoria
 
Calculo de volume de um silo utilizando integral
Calculo de volume de um silo utilizando integralCalculo de volume de um silo utilizando integral
Calculo de volume de um silo utilizando integral
 

Backtracking: técnica de algoritmos de retrocesso

  • 2. 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
  • 3. 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
  • 4. 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
  • 5. Características do Backtracking  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
  • 6. Animação Árvore de Backtracking 6
  • 7. Backtracking (animação) Sem saída ? Sem saída Sem saída ? Começo ? ? Sem saída Sem saída ? Êxito! 7
  • 8. Exemplo de Busca em Profundidade LABIRINTO 8
  • 9. Exemplo de Busca em Profundidade 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 9
  • 11. GPS ( global position system ) Busca Exaustiva VS Backtracking 11
  • 12. Resolver um enigma – resta 1  Modo de preenchimento.  Modo de remoção.  Objetivo.  Dificuldade. 12
  • 13. Problema das N rainhas 13
  • 14. Problema das 4 Rainhas  Formulação do problema.  Restrições.  Modo de caminho. BASTANTE ATENÇÃO 14
  • 15. Demonstração Linha por Linha 1 2 1 2 3 X X X X X 1 3 4 1 2 3 4 X X X X X X X 1 2 3 4 1 2 X X X X 15
  • 16. 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
  • 17. 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
  • 18. 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
  • 20. Exemplificando A árvore é composta de nós Notação: 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. 20
  • 21. 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 Nó pai Nó pai Nós filhos Nós filhos 21
  • 22. 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
  • 24. Problema dos Filósofos - Algoritmo int 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
  • 25. Problema dos Filósofos - Algoritmo criafilosofo(mac,j) { if (j<5) { prato[j]=mac; printf("Filosofo %d ",j); printf(": %in",prato[j]); j++; criafilosofo(mac,j); } } 25
  • 26. Problema dos Filósofos - Algoritmo chamaproxfil(int proximo) { if (proximo==5) proximo=0; else proximo=proximo++; return proximo; } 26
  • 27. Problema dos Filósofos - 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
  • 28. Problema dos Filósofos - Algoritmo else if(soma==0) { printf("Filosofo 1: %dn", prato[0]); printf("Filosofo 2: %dn", prato[1]); printf("Filosofo 3: %dn", prato[2]); printf("Filosofo 4: %dn", prato[3]); printf("Filosofo 5: %dn", prato[4]); printf("n"); } 28
  • 29. Problema dos Filósofos - 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
  • 30. Problema dos Filósofos - 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
  • 31. Problema dos Filósofos - Algoritmo printf("Filosofo 1: %dn", prato[0]); printf("Filosofo 2: %dn", prato[1]); printf("Filosofo 3: %dn", prato[2]); printf("Filosofo 4: %dn", prato[3]); printf("Filosofo 5: %dn", prato[4]); printf("n"); filosofo(prato, i, aux);//chamada recursiva à função filosofo } } 31
  • 32. Problema dos Filósofos - Algoritmo  Conhecer o algoritmo implementado.  Clique aqui para abrir 32
  • 34. Mãos a obra  Acessem de qualquer máquina o link abaixo  Avaliativo  http://goo.gl/CFauR 34
  • 35. Mãos a obra  No site procurem a aba AVALIAÇÃO  E clique no link para começar a avaliação ( feito individualmente ) 35
  • 36. Implementando De acordo com as explicações implemente o algoritmo do “Problema da Soma dos Conjuntos”. 36
  • 37. 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
  • 40. Obrigado pela atenção!! Danilo Fraga Costa Reginaldo Faria da Silva Douglas Vinícius Souza da Mata Saymon Cristian Alves Oliveira 40