Esquema general de Backtracking Rosana Matuk Encontrar una solución intentándolo con una de varias opciones. Si la elección es incorrecta, el cómputo retrocede o vuelve a comenzar desde el punto de decisión anterior y lo intenta con otra opción. Definición de Backtracking Paul E. Black, Dictionary of Algorithms and Data Structures, U.S. National Institute of Standards and Technology El siguiente esquema sirve para resolver aquellos problemas en los que estamos buscando una solución, es decir, cuando encontremos la primera que cumpla todas las restricciones, finalizaremos, sin importarnos si en realidad existen algunas más o si se trata de la mejor de las posibles. Función Backtracking(i: Etapa)devuelve: Boolean if SolucionCompleta(i) then Exito ← V erdadero else Exito ← F also IniciarOpciones(i, o: Lista Opcion) repeat SeleccionarNuevaOpcion(o, n: Opcion) if Aceptable(n) then AvanzarUnPaso(i, n) Exito ← Backtracking(i) if Exito = false then DeshacerUltimoPaso(i, n); end end until (Exito = verdadero) o NoQuedanOpciones(o); end Retorna Exito end 1 1. IniciarOpciones(i: Etapa i, o: Lista Opcion) En base a las alternativas elegidas en la solución parcial i que nos llega como parámetro, introducimos en o el grupo de opciones posibles que podemos probar en la etapa actual. Si ninguno de estos valores condujese a una solución válida, la llamada a la función finalizarı́a y volverı́amos a una etapa anterior. 2. SeleccionarNuevaOpcion(o: Lista Opcion, n: Opción) De entre todas las alternativas posibles que tenemos en o, elegimos una. Aquı́ podemos realizar funciones de poda, que pueden ser muy beneficiosas en ciertos algoritmos, proporcionando opciones que tienen una alta probabilidad de convertirse en solución y evitando muchas pruebas innecesarias con valores que según nuestra estimación no nos conducirán al éxito. La opción elegida tiene que ser desechada o marcada como usada en el grupo de opciones o, para que no volvamos a probar con el mismo valor repetidas veces, es decir, el conjunto vaya reduciéndose hasta que no queden mas alternativas por probar. 3. Aceptable(n: Opción) Los problemas que resuelve este tipo de esquemas algorı́tmicos tienen como caracterı́stica que buscan un grupo de valores que cumplen entre sı́ una serie de restricciones. El cumplimiento de estas restricciones se comprueba en esta función. Si la opción no es aceptable no será necesario expandir por esa rama las posibilidades porque en ningún caso nos llevarán a una solución. De esa manera evitamos tener que explorar zonas del espacio de alternativas que sólo nos harán perder tiempo de búsqueda sin proporcionar ningún resultado. 4. NoQuedanOpciones(o: Lista Opcion) Indica si todavı́a existe en el grupo inicial que calculamos en cada función recursiva, alguna alternativa más que probar. Si no queda ninguna opción, hemos terminado de buscar en la etapa actual, y debemos ir hacia atrás a la anterior llamada recursiva para buscar nuevas alternativas por donde expandir el árbol de posibilidades. 2