LogRitmo navegador / ativofase / 03LR / fase 03 · ativa
phase 03 / strategies
strategy / search & prune

Backtracking.

Avançar, testar a restrição e desfazer cedo quando o caminho não pode funcionar.

próxima lente
visualização passo a passo

Esta escolha ainda pode fazer parte de uma solução válida?

stage / Backtracking
passo 01 / 05tentarprofundidade / 1
foco atual / escolher um ramoa faixa mostra o estado, não uma medição de tempo real
ação / progresso comparação / estado conflito / limite
telemetria / estratégia
passo01escolher um ramo
profundidade1estado observado
códigolinha 3JavaScript
estadopausadocontrole manual
/ o que está acontecendo

escolher um ramo
saiba quando voltar.

A busca começa com uma possibilidade. Ainda não sabemos se ela levará à resposta, então registramos o ponto de decisão.

→

princípio /
Explorar sistematicamente, abandonar estados inválidos e retornar ao ponto de decisão anterior.

limite que não pode ser omitido
A poda evita ramos inúteis, mas não transforma automaticamente um espaço exponencial em polinomial. O tamanho da busca continua sendo parte da resposta.

complexidade / mapa rápido
melhorO(d)
médioO(bᵈ)
piorO(bᵈ)

b é o número médio de escolhas por nível e d é a profundidade máxima da árvore de busca.

Como ler esta réguaEla não mede o tempo do seu aparelho: compara o crescimento quando aumentam os itens, os estados possíveis ou as decisões de uma estratégia.
operações
itens, estados ou decisõesO(n)O(n log n)O(n·C)O(bᵈ)
O(bᵈ) · Árvore de decisões

b é a quantidade média de escolhas por nível e d é a profundidade da busca. Cada nível pode abrir novos ramos para explorar.

A poda descarta ramos inválidos, mas o pior caso continua crescendo muito rápido quando há muitas escolhas e níveis.
comparação / duas técnicas

Compare o crescimento lado a lado

Escolha duas técnicas diferentes. As curvas usam a mesma escala visual para explicar como o custo tende a aumentar.

Comparações prontasaplique um par didático
itens, estados ou decisõesoperações

Use este par para contrastar uma escolha local eficiente com o custo de preencher e reutilizar estados em problemas de capacidade. Greedy Algorithm e Dynamic Programming usam parâmetros diferentes: O(n·C) depende da capacidade C, e O(bᵈ) depende da ramificação b e da profundidade d. A régua contrasta modelos de crescimento; só compare a inclinação sob hipóteses explícitas sobre como esses parâmetros aumentam.

/ por baixo do palco

Um retorno, um caminho.

O destaque acompanha a decisão atual. Leia o pseudocódigo antes de trocar de linguagem; a implementação é uma tradução, não um novo algoritmo.

01se solução completa: retornar sucesso
02para escolha possível:
03 aplicar escolha
04 se estado válido: continuar
05 desfazer escolha
06retornar falha
implementação / JavaScript
01function search(state) { // Explore valid choices and undo failed branches02  if (isComplete(state)) return state;03  for (const choice of choices(state)) {04    apply(state, choice);05    if (isValid(state)) {06      const result = search(state);07      if (result) return result;08    }09    undo(state, choice);10  }11  return null;12}
/ leitura técnica · explorar e retornar

Voltar não é apagar um erro:
é preservar o contrato do estado.

Backtracking faz uma busca em profundidade numa árvore implícita de soluções parciais. Em cada nó, escolhe uma decisão ainda livre, testa candidatos, avança apenas quando as restrições continuam consistentes e desfaz exatamente a alteração antes de tentar a próxima alternativa.

01 / escolher

Um nó registra uma solução parcial.

Os filhos representam valores candidatos para a próxima decisão: uma coluna para uma rainha, uma cor para um vértice ou um valor para uma célula. A ordem de exploração muda o trabalho observado, não o conjunto de soluções que uma busca completa pode alcançar.

02 / restringir

Avance somente por extensões consistentes.

Uma poda por inviabilidade interrompe um ramo quando uma restrição já foi violada. Ela é segura apenas se nenhuma continuação daquele estado puder reparar a violação; por isso, conflito local, domínios e condições da poda precisam ser explícitos.

03 / reverter

apply e undo formam uma unidade.

Ao retornar, marcas, contadores, domínios e escolhas devem voltar exatamente ao estado anterior. Um desfazer incompleto pode omitir soluções, aceitar candidatas inválidas ou criar uma poda que parece eficiente, mas não é correta.

invariante / leitura da bancada

Na visualização, uma tentativa cria um novo nível de decisão; uma rejeição representa uma poda; e “desfazer” retira a última escolha antes de explorar o irmão. A bancada mostra a ordem de busca, não um certificado automático de que toda poda é segura.

/ árvore implícita

Uma decisão abre ramos;
uma restrição fecha ramos cedo.

Sem poda, se cada uma de n decisões tiver no máximo b candidatos, a árvore pode crescer exponencialmente. O custo real depende da instância, do fator de ramificação efetivo, da profundidade e do custo para testar ou propagar cada restrição.

NÓAtribuição parcialGuarda escolhas feitas até a profundidade atual.
FRONTEIRACandidatos da próxima decisãoSão avaliados segundo uma ordem de exploração.
PODARetorno antecipado seguroElimina apenas ramos que não podem atingir o objetivo.
FOLHASolução ou falha completaUma solução viável pode ser emitida, contada ou usada para otimizar.
/ reduzir trabalho sem trocar a resposta

Heurística organiza;
poda justifica.

MRV escolhe primeiro a variável com menos valores possíveis; ordenar valores pode expor conflitos antes; forward checking atualiza domínios após cada decisão. Essas técnicas frequentemente reduzem ramos visitados, mas não substituem o argumento de que a poda não descarta uma solução viável.

RECURSOO QUE FAZGARANTIA
Viabilidadecorta uma atribuição que já viola restriçãonão perde solução válida se a violação for irreparável
Forward checkingdetecta domínio vazio antes de aprofundarantecipa a mesma falha de um ramo
MRV / ordemreorganiza a exploração dos candidatosreduz trabalho em muitas instâncias, sem promessa universal
Limite de qualidadecompara potencial com uma incumbentepertence à formulação de Branch and Bound
corretude / dois compromissos

Consistência local
e cobertura global.

A prova costuma manter dois fatos. Primeiro, a pilha representa sempre uma atribuição parcial consistente. Segundo, cada poda elimina somente extensões incapazes de satisfazer o objetivo. Se a busca termina em profundidade finita, explora os candidatos não podados e desfaz cada escolha corretamente, então encontra todas as soluções viáveis desejadas — ou certifica que nenhuma foi alcançada.

/ decisão de uso

Use para viabilidade,
enumeração e restrições.

Backtracking é apropriado para N-Queens, Sudoku, coloração de grafos, permutações e problemas de satisfação de restrições. Documente a decisão, a condição de consistência, o estado a desfazer e o que a poda prova. Para otimização, diferencie-o de Branch and Bound; para subproblemas repetidos, avalie Dynamic Programming; para uma escolha local segura demonstrável, considere Greedy.

voltar ao índicecontinuar: Greedy Algorithm