Índice

     

Introducción Definición Funcionamiento Tipos de Soluciones Ejemplo Conclusión

2 3 4 5-6 7 8

2 . Si no hay más subtareas por recorrer la búsqueda finaliza. sin importar el orden de los elementos. ¿Por qué se le denomina algoritmo de vuelta atrás? Porque en el caso de no encontrar una solución en una subtarea se retrocede a la subtarea original y se prueba otra distinta (una nueva subtarea distinta a las probadas anteriormente).Introducción El backtracking (vuelta atrás) es un procedimiento o estrategia. Asimismo. simplemente se aplica una búsqueda sistemática (organizada) que más o menos viene a significar que hay que probar todo lo posible hasta encontrar la solución o encontrar que no existe solución al problema. Este procedimiento no posee estándares o reglas para la búsqueda de la solución. A través de este trabajo de investigación. estas subtareas suelen incluir más subtareas. usada para encontrar soluciones a problemas que tienen una solución completa. se separa la búsqueda en varias búsquedas parciales o subtareas. Para conseguir este propósito. por lo que el tratamiento general de estos algoritmos es de naturaleza recursiva. veremos una definición completa del Backtracking y una explicación ampliamente entendible complementada con los tipos de soluciones y algunos ejemplos.

El NIST (Instituto Nacional de Estándares y Tecnología) lo define en su Diccionario de Algoritmos y Estructuras de Datos de la siguiente manera: “Encontrar una solución intentándolo con una de varias opciones. subramas o simplemente hijo . Si la elección es incorrecta.  Los algoritmos de Vuelta Atrás generan un árbol con un recorrido en profundidad (Espacio de búsqueda) – Cada nivel representa una parte de la solución o soluciones – Cada nodo intermedio es una solución parcial – La solución (decisiones) es el recorrido desde la raíz hasta la solución 3 . El término fue dado a conocer por el matemático D. Su representación es la descomposición de tareas o extenderse en subtareas. el cómputo retrocede o vuelve a comenzar desde el punto de decisión anterior y lo intenta con otra opción”.Su uso lo hace de tipo recursivo.H. Lehmer en la década de los cincuenta.Definición Es una de las técnicas de tipo algoritmo que consiste en la solución de problemas mediante posibles soluciones que se pueden plantear en un espacio de búsqueda ante llamado subtareas.

mientras que las más complejas (que requieren más tiempo) deberían reservarse para situaciones en las que el árbol que se crea sea muy grande. Si solo buscábamos una solución al problema.Funcionamiento El método de Backtracking es uno de los más utilizados ya que es aplicable a una resolución de un gran número de problemas. En este caso. Evidentemente el análisis de estas restricciones permite ahorrar tiempo. de manera que aquellas restricciones que vayan a detectar pocos nodos fracaso no serán interesantes. La primera es que tenga éxito si. en este caso nos encontramos en lo que llamamos nodos fracaso. el algoritmo finaliza de inmediato. si existe uno o más caminos aún no explorados. Este método provee una forma sistemática de crear todas las posibles soluciones siempre y cuando aquellas soluciones sean aptas para resolverse en etapas. el recorrido del árbol continúa por ellos. en cambio si lo que buscábamos eran todas las soluciones o la mejor solución. Por otra parte se debe tener cuidado a la hora de decidir el tipo de condiciones (restricciones) que comprobamos en cada nodo a fin de detectar nodos fracaso. el recorrido no tendrá éxito si en alguna etapa la solución construida hasta el momento no se puede completar. Sin embargo esta evaluación requiere a su vez tiempo extra. al delimitar el tamaño del árbol a explorar. procediendo de esta manera. Por otra parte. el algoritmo seguirá analizando el árbol en búsqueda de soluciones alternativas. 4 . aunque siempre asegurándonos de que el árbol “ podado” siga conteniendo todas las soluciones. En este retroceso. Para explorar el conjunto de posibles soluciones es necesario recorrer este árbol formando soluciones parciales a medida que se avanza en el recorrido. se llega a una solución. En este recorrido pueden suceder dos cosas. se podría decir que las restricciones sencillas son siempre adecuadas. No obstante. De manera básica la Vuelta Atrás se parece a un recorrido dentro de un árbol el cual cada nodo representa una parte de la solución y está creado por etapas que se supone que ya están efectuadas. el algoritmo vuelve atrás (y de ahí su nombre) descartando los elementos que se hubieran añadido en cada etapa a partir de ese nodo. La eficiencia de este algoritmo proviene de considerar el menor conjunto de nodos que consigan llegar a ser soluciones.

sin importar la búsqueda de de otras secuencias que se podrían generar. } For (cada hijo sucesiones (nodo)) If(backtracking(hijo)) Return true. Return false. La variable hijo contiene una alternativa distinta en cada iteración Pone a cada alternativa llamando a la función (recursivamente. Return = true. } Condición de parada: donde al llegar a la solución retorna true para informar en retroceso que se ha obtenido la 1ª solución. separadamente si habrían muchas más soluciones. para que esa instancia siga probando con los nodos iguales. 5 .Tipos de Soluciones En su representación es posible encontrar una sola solución. si un nodo no tiene más alternativas o sucesores retornara false a la instancia anterior. Calcula las posibles alternativas. Bool backtracking (nodo){ If(es_solucion(nodo)) { Procesar_solucion (nodo).  La primera solución: En este primer concepto es donde el algoritmo se detiene y se devuelve al momento de encontrar a la primera solución. Si la condición If se cumple descartara todas las otras alternativas ya que irán en retroceso hasta llegar a la raíz principal.

} For(cada hijo de sucesores (nodo)) Backtracking(hijo). busca todas las soluciones posibles para convencer el problema planteado. Todas las soluciones En este concepto a diferencia de la primera solución. teniendo en cuenta que su gran diferencia en que a medida se obtenga las nuevas soluciones se va comparando con la mejor que se tenía hasta un punto específico. se eliminara la condición if que impedía probar con otras alternativas al conseguir la primera solución. se guarda en una estructura de datos y continúa el recorrido hasta que no queden más posibilidades por buscar. De ser la mejor que la anterior. Funtion backtracking (nodo){ If(es_solucion (nodo)){ Procesar_solucion(nodo). } La función es_la_mejor _solución se encarga de hacer la comparación entre la solución actual con la almacenada global. Return. la función anotar_mejor_solucion lo reemplazaría. Una vez que se encuentre una solución completa. semejante al concepto de todas las soluciones. Para este caso se necesita una estructura de datos de tipo global por referencia que almacene la mejor solución. Return. así podrá ser acceder cuando sea comparada Funtion backtracking (nodo){ If ( es_solucion (nodo)){ If(es_la _mejor_solucion (nodo)) Anotar_mejor_solucion(nodo). En este otro importante concepto procesa todo el espacio de búsqueda. } For (cada hijo de sucesores(nodo)) Backtracking(hijo). 6 . aquí se busca probar con todas las combinaciones de nodos posibles para poder hablar todas las soluciones.  La mejor solución A diferencia del esquema anterior.

4.1.….Ejemplo Problema N Reinas  El problema de las N-Reinas consiste en colocar n reinas en un tablero de ajedrez de tamaño n*n de forma la reinas no se amenacen según las normas del ajedrez.     7 .xn). dónde cada xi indica la columna donde la reina de la fila iésima es colocada. Este problema puede resolverse utilizando un esquema de backtracking. Por ejemplo.4. Las restricciones para este problema consisten en que dos reinas no pueden colocarse en la misma fila. Cualquier solución del problema estará formada por una n-tupla (x1.1.x2.3] y [3.2]. ni en la misma columna ni en la misma diagonal. el problema de las 4-Reinas tiene dos posibles soluciones: [2. Se busca encontrar una solución o todas las soluciones posibles.

8 . Este método se ha aplicado en conocidos problemas del área de inteligencia artificial que permiten extensiones muy sencillas. el problema del laberinto. por término medio. es fuertemente costoso (en cuanto a complejidades temporales se refiere) debido al tamaño que adoptan sus espacios de búsqueda.Conclusión El backtracking es un esquema algorítmico que nos ayuda en la resolución de una gran diversidad de tipos de problemas. pero. entre otros tantos problemas que se han aplicado con el backtracking. Algunos de estos problemas son el de las Torres de Hanoi. el del salto del caballo o el de la colocación de las ocho reinas en el tablero de ajedrez. Aplicándole una serie de mejoras podremos conseguir que dicho espacio disminuya para reducir en lo posible las altas complejidades que suelen tener.