Backtracking es un método de diseño de algoritmos recursivos. Está formado por dos partes:
- En un punto de ramificación (donde se debe tomar una decisión), comienza un ciclo que prueba secuencialmente todas las posibilidades para la decisión.
- El algoritmo se llama de forma recursiva en el subproblema que queda después de tomar esa decisión.
Por ejemplo, si estabas tratando de resolver un laberinto y llegaste a un cuadrado con tres salidas diferentes, podrías
- Elija la salida izquierda, luego llame a su algoritmo de resolución de laberinto de forma recursiva.
- Si eso no llegó a la salida del laberinto, intente seguir recto y llame al algoritmo de resolución del laberinto de forma recursiva.
- Si eso no llegó a la salida del laberinto, intente ir a la derecha y llame al algoritmo de resolución del laberinto de forma recursiva.
- Si ninguno de esos funciona, devuelva el fracaso y permita que algunas decisiones previamente tomadas se vuelvan atrás.
(Esto se conoce como una búsqueda de profundidad primero).
- ¿Cuáles son los diferentes usos de la estructura de datos Trie?
- ¿Qué tipo de clasificación es esta?
- Sea X la solución del costo O (n ^ k) para un problema Q en NP-c. ¿Implicaría que existe una solución de costo O (n ^ k) para todos los problemas Q 'en NP-c?
- ¿Cuáles son las aplicaciones en tiempo real del árbol binario enhebrado?
- ¿Cómo convertirse en un experto en ciencia de datos (aprendizaje automático) que tiene una idea básica de la programación C / C ++? ¿Cuáles son algunos cursos o libros disponibles gratis o baratos?
Otro buen ejemplo es la solución propuesta por Google Code Jam para “Cerrar coincidencia”, sobre la cual puede leer aquí:
Panel de control – Ronda 1B 2016 – Google Code Jam