La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Diseño y análisis de algoritmos

Presentaciones similares


Presentación del tema: "Diseño y análisis de algoritmos"— Transcripción de la presentación:

1 Diseño y análisis de algoritmos
Técnica de diseño Backtracking I

2 Temario Técnica de diseño Backtracking Introducción Aplicaciones
Problema de las 8 reinas

3 Técnica de diseño Backtracking
Introducción Problemas a considerar con esta técnica: Búsqueda de la mejor o del conjunto de todas las soluciones que satisfacen ciertas condiciones (restricciones) Cada solución es el resultado de un conjunto de decisiones Si se requiere la mejor solución, debe definirse la función objetivo a ser optimizada, en el caso de sólo requerir soluciones que satisfagan condiciones también debe definirse una función objetivo que debe ser satisfecha por cada selección. En algunos problemas de este tipo se conoce un criterio óptimo de selección en cada decisión:técnica greedy En otros problemas se cumple el principio de optimalidad de Bellman y se puede aplicar la técnica de programación dinámica. Existen otros problemas en los que no hay más remedio que buscar. Ejemplos: El problema de 8 reinas Coloreado de grafos Atravesar un laberinto Arboles de juego

4 Técnica de diseño Backtracking
Introducción Planteamiento del problema Se trata de hallar todas las soluciones que satisfagan un predicado P La solución debe poder expresarce como una tupla donde cada pertenece a un conjunto Si entonces hay t n-tuplas candidatas para satisfacr P Método de fuerza bruta: generar todas las t n-tuplas y examinarlas seleccionando las que satisfacen P Backtracking o búsqueda con retroceso: formar cada tupla de manera progresiva, elemento a elemento, comprobando para cada elemento añadido a la tupla que pueda conducir a una tupla completa satisfactoria

5 Técnica de diseño Backtracking
Introducción Planteamiento del problema Deben existir unas funciones objetivo parciales o predicados acotadores Estos predicados dicen si puede conducir a una solución La diferencia, entre el método de fuerza bruta y búsqueda con retroceso es: Si se comprueba que no puede conducir a ninguna solución , se evita formar y evaluar las tuplas que comienzan por Para saber si una n-tupla es solución, suele haber dos tipos de restricciones: Explícitas: describen si un de valores que puede tomar Todas las tuplas que satisfacen estas restricciones definen un espacio de soluciones posibles. Implícitas: describen las relaciones que deben cumplirse entre los . Qué soluciones posibles satisfacen el predicado objetivo P

6 Técnica de diseño Backtracking
Introducción Ejemplo: El problema de las 8 reinas El problema consiste en ubicar 8 reinas en un tablero de ajedrez , sin que se den jaque (dos reinas se dan jaque si comparten una fila, una columna o diagonal). Fuerza bruta = Puesto que no puede haber más de una reina por fila, se puede replantear el problema como: “colocar una reina en cada fila del tablero de forma que no se den jaque”. Puesto el problema de esta forma, para ver si dos reinas se dan jaque, sólo hay que chequear si comparten una diagonal o columna. Por lo tanto , toda solución del problema puede representarse con una tupla en la que es la columna en la que se coloca la reina que está en la fila i del tablero.

7 Técnica de diseño Backtracking
Introducción Ejemplo: El problema de las 8 reinas Restricciones explícitas Esto implica que el espacio de soluciones consta de tuplas ( tuplas) Restricciones implícitas: no puede ghaber dos reinas en la misma columna, ni en la misma diagonal Por lo que todas las soluciones son parte de las permutaciones de la 8-tupla (1,2,3,4,5,6,7,8), por lo que elspacio se reduce a 8! 8-tuplas (40.320)

8 Técnica de diseño Backtracking
Introducción Volviendo al planteamiento general Para facilitar la búsqueda, se adopta una organización en árbol del espacio de soluciones En el ejemplo, para el caso de las 4 reinas, en un tablero de 4x4, genera el siguiente árbol, donde el espacio de soluciones está definido por todos los caminos desde la raiz a cada hoja (hay 4! Hojas).

9 Técnica de diseño Backtracking
Introducción Esquema algorítmico general Sea un camino desde la raiz hasta un nodo del árbol de espacio de estados. Sea el conjunto de los valores posibles de tales que es un camino hasta el nodo de un árbol. Suponiendo que exista algún predicado acotador A tal que es falso si el camino no puede extenderese para alcanzar un nuevo nodo respuesta , por ende una solución. Por lo tanto , los candidatos para son los valores de G tales que satisfacen A. Suponer finalmente , que existe un predicado R que determina si un camino termina en un nodo respuesta, es decir es ya una solución.

10 Técnica de diseño Backtracking
Introducción Algoritmo genérico Procedimiento backtracking(k:entero, ent sal solucion: arreglo [1..n] de elmento) Variable nodo:elemento Inicio Para todo nodo en G(solucion,1,k-1) Solucion[k]:=nodo Si A(solución,1,k) entonces Si R(solución,1,k) entonces guardar (solución,1,k) Fin-si backtracking (k+1,solucion) Fin-para FIN.

11 Técnica de diseño Backtracking
Introducción En el ejemplo de las 4 reinas

12 Técnica de diseño Backtracking
Introducción De nuevo, en general Notar que el árbol no se construye explícitamente., sino que implícitamente, mediante las llamadas recursivas del algoritmo de búsqueda. El algoritmo no hace llamadas recursivas cuando: k = n +1, o cuando ningún nodo generado por G satisface A. Backtracking = búsqueda primero en profundidad y con predicados acotadores. El algoritmo anterior halla todas las soluciones y además estas pueden ser de longitud variable. Variantes Limitar el número de soluciones a una sola, añadiendo un parámetro boolano de salida que indique si se ha encontrado una solución. Forzar a que sólo los nodos hoja puedan significar solución (realizando la recursión sólo si no se ha encontrado un nodo solución): si R(solucion,1,k) entonces guardar (solucion,1,k) sino backtracking( k+1,solucion) fin-si

13 Técnica de diseño Backtracking
Introducción Variantes Resolver problemas de optimización: además de la solución actual en construcción hay que almacenar la mejor solución encontrada hasta el momento. Se mejora la eficiencia de la búsqueda si los predicados acotadores permiten eliminar los nodos, de los que se sabe, no pueden llevar a una solución mejor que la ahora disponible. (poda, métodos de ramificación y acotamiento) Eficiencia Depende de: El tiempo necesario para generar un elemento solucion[k] El número de elementos solución que satisfacen las restricciones explícitas G El tiempo de ejecución de los predicados acotadores A, y El número de elementos solución[k] que satisfacen los predicados A

14 Técnica de diseño Backtracking
Introducción Eficiencia Mejoras Si se consigue que los predicados acotadores reduzcan mucho el número de nodos generados. Existe un compromiso pues un predicado acotador fuerte precisa de más tiempo de evaluación. En el mejor caso, si se reduce a un solo nodo generado, el tiempo es nodos a generar en total. En peor caso o con p(n) un polinomio Si es posible, reordenar las selecciones de forma que Así cbe esperar que se explorarán menos caminos.

15 Técnica de diseño Backtracking
Introducción Estimación a priori del número de nodos generados Idea: generar un camino aleatorio en el árbol de espacio de estados. Sea el nodo del camino aleatorio en el nivel i y sea el número de hijos de que satisfacen el predicado acotador A. El siguiente nodo del camino aleatorio se consigue aleatoriamente de esos hijos La generación termina en un nodo de respuesta (solución) o en un nodo por el que no se puede seguir. (ninguno de sus hijos satisfacen los predicados acotadores) Si los predicados acotadores son estáticos (no cambian en toda la búsqueda; esto no es lo habitual; lo habitual es que se hagan cada vez más restrictivos) y más aún si los nodos de un mismo nivel tienen todos igual grado, entonces El número estimado de nodos que se generará con el algoritmo de búsqueda con retroceso es:

16 Técnica de diseño Backtracking
Introducción Función de estimación función estimacion():entero Variable nodo:elemento sol:arreglo [1..n] de elemento k,m,r,card:entero; Inicio k:=1;m:=0;r:=1; repetir card:=0; para todo nodo en G(sol,1,k-1) hacer Sol[k]:=nodo Si A(sol,1,k) entonces card:=card+1 Fin-si Fin-para si card <> 0 entonces r:=r*card m:=m+r sol[k]:=elecAleat(G(sol,1,k-1)) k:=k+1 hasta que R(sol,1,k-1) OR (card=0) devuelve m FIN.

17 Técnica de diseño Backtracking
El problema de las ocho reinas Considerar el problema más general de colocar n reinas en un tablero de nxn , sin que se den jaque Cada solución se representa por una n-tupla , en la que es la columna de la i-ésima fila, en la que se coloca la i-ésima reina. El espacio de búsqueda se reduce a n! elementos, teniendo en cuenta que todas ellas han de ser permutaciones de (1,2,...n), es decir todas las han de ser distintas Además no deben compartir la diagonal. Representación de la información Debe permitir interpretar fácilmente la solución: x:arreglo [1..n] de entero {x[i]=columna i-ésima de la reina en la i ésima fila} Evaluación del predicado acotador: Se utilizará una función auxiliar buenSitio, que devuelve verdadero si la k-ésima se puede colocar en la columna x[k], es decir, si está en distinta columna y diagonales que las k-1 reinas anteriores Dos reinas están en la misma diagonal si tienen el mismo valor de fila+columna

18 Técnica de diseño Backtracking
El problema de las ocho reinas Evaluación del predicado acotador: Dos reinas están en la misma diagonal si tienen el mismo valor de fila-columna. Por lo que se debe satisfacer:

19 Técnica de diseño Backtracking
El problema de las ocho reinas Función que revisa las restricciones funcion buenSitio(k:entero, ent x: arreglo [1..n] de entero):booleano {devuelve verdad si y solo si se puede colocar una reina en la fila k y la columna x[k], Habiendo sido colocadas ya las k-1 reinas anteriores} Variable i:entero;amenaza:booleano Inicio i:=1;amenaza:=falso mientras i<k and not amenaza haga Si x[i]=x[k] or abs(x[i]-x[k])=i-k entonces amenaza:=verdad sino i:=i+1 Fin-si Fin-mientras devuelve not amenaza FIN.

20 Técnica de diseño Backtracking
El problema de las ocho reinas Solución recursiva Procedimiento colocarReinas(ent k:entero, ent sal sol: arreglo [1..n] de entero) {sol[1..k-1] están bien colocadas} Variable i:entero Inicio Para i:=1 hasta n hacer sol[k]:=i Si buenSitio(k,sol) entonces Si k=n entonces escribir (sol) sino colocarReinas(k+1,sol) Fin-si Fin-para FIN. Llamado ... colocarReinas(1,sol)

21 Técnica de diseño Backtracking
El problema de las ocho reinas Solución iterativa Procedimiento nReinas(ent n:entero) Variable k:entero, x: arreglo [1..n] de entero Inicio k:=1;x[1]:=0; mientras que k> 0 hacer {maneja retrocesos} x[k]:= x[k]+1 mientras que x[k]<=n and not buenSitio Fin-mientras Si x[k]<=n entonces {se ha encontrado un buen sitio} Si k=n entonces {es una solución completa?} escribir (x) sino k:=k+1 x[k]:=0 {ir a la siguiente fila} Fin-si k:=k+1 {retroceso} Fin-para FIN.

22 Técnica de diseño Backtracking
El problema de las ocho reinas Estimación del costo computacional Se realizaron cinco evaluaciones de la función estimación con un resultado promedio de 1625 Para n=8, el número total de nodos del espacio de estados es Por lo que únicamente se recorrería un 2.34% del número total de nodos (si la estimación es acertada) En este caso la estimación es algo optimista pues se puede comprobar que el número de nodos explorados es de 2057 y por lo tanto se recorre un 2,97% Número de soluciones para n=8 : 92 Par n mayores la mejora se hace más considerable. para n=12 Número de permutaciones 12!= Número total del espacio de estados : Número total de nodos explorados: que es un 0,065% Se obtiene la primera solución a partir de visitar 262 nodos


Descargar ppt "Diseño y análisis de algoritmos"

Presentaciones similares


Anuncios Google