SlideShare una empresa de Scribd logo
Esperanza Terán Jiménez
• es un esquema que genera TODAS las secuencias
posibles de decisiones.
• Vuelta Atrás, de forma sistemática y organizada, genera
y recorre un espacio que contiene todas las posibles
secuencias de decisiones.
• Este espacio se denomina el espacio de búsqueda del
problema. Una de las primeras implicaciones de esta
forma de resolver el problema es que, si el problema
tiene solución, Vuelta Atrás seguro que la encuentra.
• La siguiente figura muestra un posible espacio de
búsqueda asociado a un problema en el que
hay k decisiones que tomar (son las que definen la altura
del espacio), y en el que cada decisión tiene asociado un
dominio formado por j valores distintos, que son los que
determinan la anchura del espacio.
• Habitualmente el espacio de búsqueda es un
árbol, aunque puede ser un grafo, como en el caso de
los grafos de juego. Si en el árbol hay un gran número de
nodos repetidos y se dan otras condiciones
adicionales, es posible que el problema se pueda
resolver aplicando el esquema de Programación
Dinámica.
• La caracterización de los problemas que son solubles
aplicando este esquema no es muy distinta de otras Técnicas
de Análisis y Diseño y se utiliza la misma terminología como,
por ejemplo, decisión, restricción, solución, solución en curso,
etc. algunas de las características de estos problemas:
• Se trata generalmente de problemas de optimización, con o
sin restricciones.
• La solución es expresable en forma de secuencia de
decisiones.
• Existe una función denominada factible que permite averiguar
si en una secuencia de decisiones, la solución en curso
actual, viola o no las restricciones.
• Existe una función, denominada solución , que permite
determinar si una secuencia de decisiones factible es solución
al problema planteado.
• Al diseñar un algoritmo backtraking debemos considerar los
• siguientes elementos:
• Representación de la solución en una tupla (X1; : : : ; Xn)
• Una función objetivo para determinar si la tupla a analizar es
• una solución
• Unas restricciones a los candidatos para rellenar la tupla:
• Implícitas del problema. Valores que puede tomar cada valor
• Xi
• Explícitas o externas al problema. Por ejemplo, problema
• mochila, el peso no debe superar la capacidad de la mochila
• Una función de poda para eliminar partes del árbol de
• búsqueda
• Organización del problema en un árbol de búsqueda.
• Construir la solución al problema en distintas etapas.
• En cada paso se elige un candidato y se añade a la
solución, y se avanza en la solución parcial.
• Si no es posible continuar en la construcción hacia una
solución completa, se abandona ésta y la última
componente se cambia por otro valor.
• Si no quedan más valores por probar, se retrocede al
candidato anterior, se desecha, y se selecciona otro
candidato.
• Buscar una representación del tipo (X1; X2; : : : ; Xn) para las
• soluciones del problema
• Identificar las restricciones implícitas y explícitas del
• problema
• Establecer la organización del árbol que define los
• diferentes estados en los que se encuentra una (sub)solución
• Definir una función solución para determinar si una tupla es
• solución
• Definir una función de poda Bk(X1; X2; : : : ; Xk) para
• eliminar ramas del árbol que puedan derivar en soluciones
poco
• deseables o inadeciadas
• Aplicar la estructura genérica de un algoritmo backtracking
• solucion[i]2Si para i=1,2,...,n
(Algoritmo genérico backtracking)
funcion BACKTRACKING_REC ( k , solucion[n])
para j2Si
si ( PODA (k , j , solucion) == true ) hacer
sol[k]= j
si ( TEST_SOL (solucion) == true ) hacer
devolver solucion
si ( k < n )
BACKTRACKING_REC(k+1,solucion[n])
•
• procedimiento backtrack (x[1..n]) {
• k=1;
• while (k>0) {
• if ( queda algún x[k] no probado tal que
• X[k]∈T(x[1..k-1]) && Bk(x[1..k]) ) {
• if (x[1..k] es un camino hasta un nodo respuesta)
• print ( x[1..k] ); // Mostrar solución x[1..k]
• k = k+1;
• } else {
• k = k-1;
• }
• }
• }
• Llamada inicial: backtrack(x,1);
• procedimiento backtrack ( x[1..n], k)
• {
• foreach foreach (x[k]∈T(x[1..k T(x[1..k-1]) {
• if ( Bk(x[1..k]) ) {
• if (x[1..k] es un camino hasta un nodo respuesta)
• print ( x[1..k] ); // Mostrar solución x[1..k]
• backtrack (x, k+1);
• }
• }
• }
• El problema de las ocho reinas se puede plantear de
modo general como problema de las reinas. El problema
consistiría en colocar reinas en un tablero de ajedrez
de de tal manera que ninguna de las reinas quede
atacando a otra.
• Su análisis y solución es isomorfo al de las ocho reinas.
• Número de soluciones:
• El problema de las ocho reinas tiene 92 soluciones, de
las cuales 12 son esencialmente distintas, es decir las
92 soluciones existentes se pueden obtener a partir de
simetrías, rotaciones y traslaciones de las 12 soluciones
únicas, que se muestran a continuación:
Técnica del backtracking o vuelta atrás
Técnica del backtracking o vuelta atrás
Técnica del backtracking o vuelta atrás
Técnica del backtracking o vuelta atrás
Técnica del backtracking o vuelta atrás

Más contenido relacionado

La actualidad más candente

Algebra lineal, Sistemas de ecuaciones y sus métodos.
Algebra lineal, Sistemas de ecuaciones y sus métodos. Algebra lineal, Sistemas de ecuaciones y sus métodos.
Algebra lineal, Sistemas de ecuaciones y sus métodos. Andrés Figueroa
 
Memoria dinamica
Memoria dinamicaMemoria dinamica
Memoria dinamicagusolis93
 
Algoritmo congruencial aditivo
Algoritmo congruencial aditivoAlgoritmo congruencial aditivo
Algoritmo congruencial aditivoEwing Ma
 
Métodos y Funciones - Java - Algoritmia
Métodos y Funciones - Java - AlgoritmiaMétodos y Funciones - Java - Algoritmia
Métodos y Funciones - Java - AlgoritmiaDaniel Gómez
 
Recursividad, Ordenacion y Busqueda
Recursividad, Ordenacion y BusquedaRecursividad, Ordenacion y Busqueda
Recursividad, Ordenacion y BusquedaEuniceLeguiasGonzale
 
Ejercicios resueltos en el Laboratorio de estructuras struct registros
Ejercicios resueltos en el Laboratorio de estructuras struct registrosEjercicios resueltos en el Laboratorio de estructuras struct registros
Ejercicios resueltos en el Laboratorio de estructuras struct registrosrasave
 
Entrada/Salida de Sistemas Operativos
Entrada/Salida de Sistemas OperativosEntrada/Salida de Sistemas Operativos
Entrada/Salida de Sistemas OperativosKarina Rivra
 
Inferencia en Lógica de Primer Orden
Inferencia en Lógica de Primer OrdenInferencia en Lógica de Primer Orden
Inferencia en Lógica de Primer OrdenHéctor Estigarribia
 
Teoría De La Complejidad Algoritmica
Teoría De La Complejidad AlgoritmicaTeoría De La Complejidad Algoritmica
Teoría De La Complejidad AlgoritmicaRolf Pinto
 
Expresiones aritmetica
Expresiones aritmeticaExpresiones aritmetica
Expresiones aritmeticaCarlos Mauneul
 
Método de Búsqueda Hash
Método de Búsqueda HashMétodo de Búsqueda Hash
Método de Búsqueda HashBlanca Parra
 
Cuadro sinóptico estructuras de datos y su clasificación
Cuadro sinóptico   estructuras de datos y su clasificaciónCuadro sinóptico   estructuras de datos y su clasificación
Cuadro sinóptico estructuras de datos y su clasificaciónAlex Uhu Colli
 
Diferencia entre algoritmo de path finding y algoritmo de dijkstra
Diferencia entre algoritmo de path finding y algoritmo de dijkstraDiferencia entre algoritmo de path finding y algoritmo de dijkstra
Diferencia entre algoritmo de path finding y algoritmo de dijkstranacasma
 
Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Giancarlo Aguilar
 

La actualidad más candente (20)

Algebra lineal, Sistemas de ecuaciones y sus métodos.
Algebra lineal, Sistemas de ecuaciones y sus métodos. Algebra lineal, Sistemas de ecuaciones y sus métodos.
Algebra lineal, Sistemas de ecuaciones y sus métodos.
 
Memoria dinamica
Memoria dinamicaMemoria dinamica
Memoria dinamica
 
Algoritmo congruencial aditivo
Algoritmo congruencial aditivoAlgoritmo congruencial aditivo
Algoritmo congruencial aditivo
 
Prueba de corridas arriba y abajo de la media
Prueba de corridas arriba y abajo de la mediaPrueba de corridas arriba y abajo de la media
Prueba de corridas arriba y abajo de la media
 
Métodos y Funciones - Java - Algoritmia
Métodos y Funciones - Java - AlgoritmiaMétodos y Funciones - Java - Algoritmia
Métodos y Funciones - Java - Algoritmia
 
Recursividad, Ordenacion y Busqueda
Recursividad, Ordenacion y BusquedaRecursividad, Ordenacion y Busqueda
Recursividad, Ordenacion y Busqueda
 
Ejercicios resueltos en el Laboratorio de estructuras struct registros
Ejercicios resueltos en el Laboratorio de estructuras struct registrosEjercicios resueltos en el Laboratorio de estructuras struct registros
Ejercicios resueltos en el Laboratorio de estructuras struct registros
 
Búsqueda secuencial y binaria
Búsqueda secuencial y binariaBúsqueda secuencial y binaria
Búsqueda secuencial y binaria
 
Tutorial de JFLAP
Tutorial de JFLAPTutorial de JFLAP
Tutorial de JFLAP
 
Entrada/Salida de Sistemas Operativos
Entrada/Salida de Sistemas OperativosEntrada/Salida de Sistemas Operativos
Entrada/Salida de Sistemas Operativos
 
Transaccion
TransaccionTransaccion
Transaccion
 
Ordenamiento QuickSort
Ordenamiento QuickSortOrdenamiento QuickSort
Ordenamiento QuickSort
 
Inferencia en Lógica de Primer Orden
Inferencia en Lógica de Primer OrdenInferencia en Lógica de Primer Orden
Inferencia en Lógica de Primer Orden
 
Teoría De La Complejidad Algoritmica
Teoría De La Complejidad AlgoritmicaTeoría De La Complejidad Algoritmica
Teoría De La Complejidad Algoritmica
 
Expresiones aritmetica
Expresiones aritmeticaExpresiones aritmetica
Expresiones aritmetica
 
Método de Búsqueda Hash
Método de Búsqueda HashMétodo de Búsqueda Hash
Método de Búsqueda Hash
 
Cuadro sinóptico estructuras de datos y su clasificación
Cuadro sinóptico   estructuras de datos y su clasificaciónCuadro sinóptico   estructuras de datos y su clasificación
Cuadro sinóptico estructuras de datos y su clasificación
 
Tipos de problemas
Tipos de problemasTipos de problemas
Tipos de problemas
 
Diferencia entre algoritmo de path finding y algoritmo de dijkstra
Diferencia entre algoritmo de path finding y algoritmo de dijkstraDiferencia entre algoritmo de path finding y algoritmo de dijkstra
Diferencia entre algoritmo de path finding y algoritmo de dijkstra
 
Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.Componentes y Librerías - Tópicos avanzados de programación.
Componentes y Librerías - Tópicos avanzados de programación.
 

Destacado

Algoritmo de backtraking
Algoritmo de backtrakingAlgoritmo de backtraking
Algoritmo de backtrakingfeytho
 
Vuelta atrás (backtraking)
Vuelta atrás (backtraking)Vuelta atrás (backtraking)
Vuelta atrás (backtraking)edopaz
 
Algoritmo de Dijkstra
Algoritmo de DijkstraAlgoritmo de Dijkstra
Algoritmo de DijkstraPedro Miranda
 
Algoritmo de backtracking
Algoritmo de backtrackingAlgoritmo de backtracking
Algoritmo de backtrackingVictor Gonzalez
 

Destacado (6)

Algoritmo de backtraking
Algoritmo de backtrakingAlgoritmo de backtraking
Algoritmo de backtraking
 
Vuelta atrás (backtraking)
Vuelta atrás (backtraking)Vuelta atrás (backtraking)
Vuelta atrás (backtraking)
 
Algoritmo De Dijkstra
Algoritmo De DijkstraAlgoritmo De Dijkstra
Algoritmo De Dijkstra
 
Algoritmo de Dijkstra
Algoritmo de DijkstraAlgoritmo de Dijkstra
Algoritmo de Dijkstra
 
Algoritmo de Dijkstra
Algoritmo de DijkstraAlgoritmo de Dijkstra
Algoritmo de Dijkstra
 
Algoritmo de backtracking
Algoritmo de backtrackingAlgoritmo de backtracking
Algoritmo de backtracking
 

Similar a Técnica del backtracking o vuelta atrás

Similar a Técnica del backtracking o vuelta atrás (20)

Daniela mendozaestructuradedatosii
Daniela mendozaestructuradedatosiiDaniela mendozaestructuradedatosii
Daniela mendozaestructuradedatosii
 
Busqueda por backtracking
Busqueda por backtrackingBusqueda por backtracking
Busqueda por backtracking
 
Backtracking
BacktrackingBacktracking
Backtracking
 
Slideshare nelson rodriguez
Slideshare nelson rodriguezSlideshare nelson rodriguez
Slideshare nelson rodriguez
 
Rompecabezas Matemático para OPTIMIZAR el espacio en un marco
Rompecabezas Matemático para OPTIMIZAR el espacio en un marcoRompecabezas Matemático para OPTIMIZAR el espacio en un marco
Rompecabezas Matemático para OPTIMIZAR el espacio en un marco
 
Vuelta Atras
Vuelta AtrasVuelta Atras
Vuelta Atras
 
2. Recursividad
2. Recursividad2. Recursividad
2. Recursividad
 
Método de Vuelta Atrás (Backtracking)
Método de Vuelta Atrás (Backtracking)Método de Vuelta Atrás (Backtracking)
Método de Vuelta Atrás (Backtracking)
 
Backtracking
BacktrackingBacktracking
Backtracking
 
Recursividad
RecursividadRecursividad
Recursividad
 
Recursividad
RecursividadRecursividad
Recursividad
 
Back Tracking
Back TrackingBack Tracking
Back Tracking
 
Programación Dinámica
Programación DinámicaProgramación Dinámica
Programación Dinámica
 
Optimización de Sistemas y Funciones
Optimización de Sistemas y FuncionesOptimización de Sistemas y Funciones
Optimización de Sistemas y Funciones
 
Sistemas inteligentes
Sistemas inteligentesSistemas inteligentes
Sistemas inteligentes
 
228434413 presentacion-grasp-efren-garcia
228434413 presentacion-grasp-efren-garcia228434413 presentacion-grasp-efren-garcia
228434413 presentacion-grasp-efren-garcia
 
Metodos de kernel en machine learning by MC Luis Ricardo Peña Llamas
Metodos de kernel en machine learning by MC Luis Ricardo Peña LlamasMetodos de kernel en machine learning by MC Luis Ricardo Peña Llamas
Metodos de kernel en machine learning by MC Luis Ricardo Peña Llamas
 
Algoritmo divide y vencerás
Algoritmo divide y vencerásAlgoritmo divide y vencerás
Algoritmo divide y vencerás
 
Pro no num Prog dinamica
Pro no num Prog dinamicaPro no num Prog dinamica
Pro no num Prog dinamica
 
Optomizacion cd
Optomizacion cdOptomizacion cd
Optomizacion cd
 

Técnica del backtracking o vuelta atrás

  • 2. • es un esquema que genera TODAS las secuencias posibles de decisiones. • Vuelta Atrás, de forma sistemática y organizada, genera y recorre un espacio que contiene todas las posibles secuencias de decisiones. • Este espacio se denomina el espacio de búsqueda del problema. Una de las primeras implicaciones de esta forma de resolver el problema es que, si el problema tiene solución, Vuelta Atrás seguro que la encuentra.
  • 3. • La siguiente figura muestra un posible espacio de búsqueda asociado a un problema en el que hay k decisiones que tomar (son las que definen la altura del espacio), y en el que cada decisión tiene asociado un dominio formado por j valores distintos, que son los que determinan la anchura del espacio.
  • 4.
  • 5. • Habitualmente el espacio de búsqueda es un árbol, aunque puede ser un grafo, como en el caso de los grafos de juego. Si en el árbol hay un gran número de nodos repetidos y se dan otras condiciones adicionales, es posible que el problema se pueda resolver aplicando el esquema de Programación Dinámica.
  • 6. • La caracterización de los problemas que son solubles aplicando este esquema no es muy distinta de otras Técnicas de Análisis y Diseño y se utiliza la misma terminología como, por ejemplo, decisión, restricción, solución, solución en curso, etc. algunas de las características de estos problemas: • Se trata generalmente de problemas de optimización, con o sin restricciones. • La solución es expresable en forma de secuencia de decisiones. • Existe una función denominada factible que permite averiguar si en una secuencia de decisiones, la solución en curso actual, viola o no las restricciones. • Existe una función, denominada solución , que permite determinar si una secuencia de decisiones factible es solución al problema planteado.
  • 7. • Al diseñar un algoritmo backtraking debemos considerar los • siguientes elementos: • Representación de la solución en una tupla (X1; : : : ; Xn) • Una función objetivo para determinar si la tupla a analizar es • una solución • Unas restricciones a los candidatos para rellenar la tupla: • Implícitas del problema. Valores que puede tomar cada valor • Xi • Explícitas o externas al problema. Por ejemplo, problema • mochila, el peso no debe superar la capacidad de la mochila • Una función de poda para eliminar partes del árbol de • búsqueda • Organización del problema en un árbol de búsqueda.
  • 8. • Construir la solución al problema en distintas etapas. • En cada paso se elige un candidato y se añade a la solución, y se avanza en la solución parcial. • Si no es posible continuar en la construcción hacia una solución completa, se abandona ésta y la última componente se cambia por otro valor. • Si no quedan más valores por probar, se retrocede al candidato anterior, se desecha, y se selecciona otro candidato.
  • 9.
  • 10. • Buscar una representación del tipo (X1; X2; : : : ; Xn) para las • soluciones del problema • Identificar las restricciones implícitas y explícitas del • problema • Establecer la organización del árbol que define los • diferentes estados en los que se encuentra una (sub)solución • Definir una función solución para determinar si una tupla es • solución • Definir una función de poda Bk(X1; X2; : : : ; Xk) para • eliminar ramas del árbol que puedan derivar en soluciones poco • deseables o inadeciadas • Aplicar la estructura genérica de un algoritmo backtracking
  • 11. • solucion[i]2Si para i=1,2,...,n (Algoritmo genérico backtracking) funcion BACKTRACKING_REC ( k , solucion[n]) para j2Si si ( PODA (k , j , solucion) == true ) hacer sol[k]= j si ( TEST_SOL (solucion) == true ) hacer devolver solucion si ( k < n ) BACKTRACKING_REC(k+1,solucion[n])
  • 12.
  • 13. • procedimiento backtrack (x[1..n]) { • k=1; • while (k>0) { • if ( queda algún x[k] no probado tal que • X[k]∈T(x[1..k-1]) && Bk(x[1..k]) ) { • if (x[1..k] es un camino hasta un nodo respuesta) • print ( x[1..k] ); // Mostrar solución x[1..k] • k = k+1; • } else { • k = k-1; • } • } • }
  • 14. • Llamada inicial: backtrack(x,1); • procedimiento backtrack ( x[1..n], k) • { • foreach foreach (x[k]∈T(x[1..k T(x[1..k-1]) { • if ( Bk(x[1..k]) ) { • if (x[1..k] es un camino hasta un nodo respuesta) • print ( x[1..k] ); // Mostrar solución x[1..k] • backtrack (x, k+1); • } • } • }
  • 15. • El problema de las ocho reinas se puede plantear de modo general como problema de las reinas. El problema consistiría en colocar reinas en un tablero de ajedrez de de tal manera que ninguna de las reinas quede atacando a otra. • Su análisis y solución es isomorfo al de las ocho reinas. • Número de soluciones:
  • 16. • El problema de las ocho reinas tiene 92 soluciones, de las cuales 12 son esencialmente distintas, es decir las 92 soluciones existentes se pueden obtener a partir de simetrías, rotaciones y traslaciones de las 12 soluciones únicas, que se muestran a continuación: