Pular para conteúdo

Backtracking

Backtracking explora uma árvore de decisões e abandona uma solução parcial assim que ela não pode levar a uma solução válida.

search(state):
    if state is a complete solution: report it
    for each candidate decision:
        if decision is consistent with state:
            apply decision
            search(state)
            undo decision

Estrutura da correção

  • Toda folha relatada satisfaz as restrições (correção).
  • Toda solução válida corresponde a algum ramo que nunca é podado incorretamente (completude).
  • A árvore de busca finita e o progresso em cada chamada recursiva implicam a terminação.

Problema das n rainhas

Posicione uma rainha por linha. Registre as colunas e diagonais ocupadas para rejeitar um posicionamento inválido em tempo constante. A poda reduz substancialmente o trabalho, mas a busca permanece exponencial no pior caso. A complexidade do backtracking é descrita melhor pelo fator de ramificação e pela profundidade máxima, com limites mais justos quando o problema os permite.

Decisões de engenharia

Escolha primeiro a variável mais restrita, ordene candidatos promissores antes dos demais e atualize incrementalmente o estado das restrições. Essas heurísticas alteram o trabalho explorado, não o conjunto de soluções válidas.

Exercícios

  1. Gere todos os subconjuntos e explique por que o tamanho da saída é Θ(2ⁿ).
  2. Resolva uma pequena instância de coloração de grafos com poda.
  3. Diferencie backtracking de programação dinâmica.