Materia: #técnicas_y_diseños_de_algoritmos
Tags: Algoritmo
Backtracking
Este algoritmo se podría pensar como una "corrección" al de fuerza bruta. Consiste en la misma base: recorrer sistemáticamente todas las posibles configuraciones del espacio de soluciones. Pero cuando, en base a una solución parcial, podamos deducir que ya es incorrecta, la eliminamos y saltamos a la siguiente. Es una forma de ahorrarse casos de búsqueda. Cuando ya podes deducir que vas por mal camino, lo abandonas.
Habitualmente, se utiliza un vector
En cada paso se extienden las soluciones parciales
Se puede pensar en este vector como un árbol, donde cada vértice representa una solución parcial. Un vértice
Una forma de escribir el comportamiento de Backtracking en pseudocodigo seria la siguiente:
backtracking(a, k):
if (a es solución) do:
solución = a;
encontro = True;
else:
for (a' en Sucesores(a, k)) do:
backtracking(a', k + 1);
if (encontro) do:
return;
end if;
end for;
end if;
return;