O documento resume o algoritmo de backtracking. Explica que backtracking é um método de força bruta que evita examinar todas as soluções possíveis, permitindo eliminar múltiplas soluções sem examiná-las. Apresenta dois exemplos de problemas resolvidos com backtracking: o problema da mochila e a cotação de livros.
1. Backtracking
Bruno Marquete da Silva
Cássio Augusto da Silva Freitas
Geovane Pazine Filho
Igor Vinicius dos Santos Silva
Inael Rodrigues de Oliveira Neto
Jackeline Neves de Almeida
Vinícius Gonçalves Braga
2. Agenda
● O que é Backtracking?
● Descrição do método
● Exemplo: Problema da mochila
● Exemplo 2: Cotação de livro
3. O que é Backtracking?
● Tipo de algoritmo por força bruta;
● Múltiplas soluções podem ser eliminadas sem serem
examinadas;
● É um método para iterar todas as possíveis
configurações (permutação dos elementos);
● Pode ser personalizado;
● Solução é um vetor a = (a1, a2, ... a-n) sendo cada
elemento a-i selecionado de um conjunto Si
● Exemplos comuns: criação de permutações e
subconjuntos
4. O que é Backtracking?
● Pode ser aplicado somente para problema que admite:
○ o conceito de "partial candidate solution";
○ um teste relativamente rápido se ele pode ser
completado com uma solução válida;
● Pode eliminar um grande número de candidatos com
um único teste
5. O que é Backtracking
● Assegura o acerto por enumerar todas as possibilidades
sem nunca visitar o mesmo estado;
● Eficiente;
● A recursividade promove a elegância e a fácil
implementação desse algoritmo, porque o vetor de novos
candidatos, c, é alocado com um procedimento recursivo;
● As principais aplicações do backtracking são da criação de
todos os subconjuntos de um conjunto S e na criação de
todas as suas permutações
6. Descrição do método
● Como o backtracking faz busca por profundidade, podemos ilustrar o
método que o mesmo exerce de força bruta utilizando o seguinte exemplo:
○ Quando caminhamos pela arvore e encontramos um nó v pela
primeira vez, cada aresta incidente a v é expolorada na tentativa de
identificar uma solução possível, partindo da esquerda para a direita,
caso não encontre, o controle volta (backtracks) ao nó de partida do
qual v foi alcançado. Com isso temos a seguinte situação:
7. Descrição do Método
● a, b, e, (b), f, g, (f), h, (f), i, (f), (b), (a), c, (a), d.
○ Onde os parênteses indicam os caminhos em backtracking
8. Exemplo: Problema da mochila
● Deve-se preencher uma
mochila com diversos itens
com pesos e valores
(benefícios) diferentes.
● O objetivo é que se
preencher a mochila com o
maior valor (benefício)
possível, sem ultrapassar a
capacidade (peso máximo).
9. Exemplo: Problema da mochila
● Entrada:
○ capacidade da mochila, K
○ n itens com pesos pi e valores vi
● O objetivo é obter um conjunto S de itens tais que:
○ A soma dos pesos dos itens em S seja menor ou igual a K
○ A soma dos valores dos itens em S seja a maior possível
10. Exemplo: Problema da mochila
Força bruta
● Gerar todas as possiveis combinações
n
○ Com n itens, existem 2 soluções
○ Checar se cada solução satisfaz limite peso
○ Salvar a condição que melhor representa a solução
● Pode ser representada como uma árvore
12. Exemplo: Problema da mochila
Backtracking
● Se alcançamos um ponto em que a solução não é mais
viável, não precisamos continuar exporando a solução.
○ Podemos “voltar atrás” (backtrack) a partir deste
ponto.
● No exemplo backtracking se torna bastante útil:
○ Na medida em que o número de itens cresce.
○ Na medida em que a capacidade da mochila
diminui.
14. Exemplo: Problema da mochila
Backtracking
● Pode-se voltar atrás também quando se sabe que a
melhor solução da subárvore é pior do que a melhor
solução já encontrada.
● Fundamento utilizado por muitos algoritmos
● Exemplo típico: Branch and Bound