diseño y análisis de algoritmos técnica de diseño backtracking i

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

Upload: benita-duran

Post on 23-Jan-2016

235 views

Category:

Documents


0 download

TRANSCRIPT

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

Diseño y análisis de algoritmos

Técnica de diseño Backtracking I

Page 2: Diseño y análisis de algoritmos Técnica de diseño Backtracking I

Temario

• Técnica de diseño Backtracking– Introducción– Aplicaciones

– Problema de las 8 reinas

Page 3: Diseño y análisis de algoritmos Técnica de diseño Backtracking I

Técnica de diseño BacktrackingIntroducció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

Page 4: Diseño y análisis de algoritmos Técnica de diseño Backtracking I

Técnica de diseño BacktrackingIntroducció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

),....,,( 21 nxxxix iC

ii tC ||

n

iitt

1

ix),....,,( 21 ixxx

Page 5: Diseño y análisis de algoritmos Técnica de diseño Backtracking I

Técnica de diseño BacktrackingIntroducció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

),....,,( 21 ii xxxP

ix

),....,,( 21 ixxx

),....,,( 21 ixxx

nii ttt ....21

),....,,( 21 ixxx

iC

ix

Page 6: Diseño y análisis de algoritmos Técnica de diseño Backtracking I

Técnica de diseño BacktrackingIntroducció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 = 4.426.165.368

• 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 8-tupla en la que es la columna en la que se coloca la reina que está en la fila i del tablero.

ix

8

64

),....,,( 821 xxx

Page 7: Diseño y análisis de algoritmos Técnica de diseño Backtracking I

Técnica de diseño BacktrackingIntroducción

• Ejemplo: El problema de las 8 reinas• Restricciones explícitas • Esto implica que el espacio de soluciones consta de 8-tuplas (16.777.216 8-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)

81},8,7,6,5,4,3,2,1{ iCi88

Page 8: Diseño y análisis de algoritmos Técnica de diseño Backtracking I

Técnica de diseño BacktrackingIntroducció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).

Page 9: Diseño y análisis de algoritmos Técnica de diseño Backtracking I

Técnica de diseño BacktrackingIntroducció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.

),...,( 1 ixx

),...,( 1 ixxG 1ix),...,( 11 ixx

),...,( 11 ixxA),...,( 11 ixx

1ix

),...,( 11 ixx

Page 10: Diseño y análisis de algoritmos Técnica de diseño Backtracking I

Procedimiento backtracking(k:entero, ent sal solucion: arreglo [1..n] de elmento)Variable nodo:elementoInicio 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-si Fin-paraFIN.

Técnica de diseño BacktrackingIntroducción

Algoritmo genérico

Page 11: Diseño y análisis de algoritmos Técnica de diseño Backtracking I

Técnica de diseño BacktrackingIntroducción

En el ejemplo de las 4 reinas

Page 12: Diseño y análisis de algoritmos Técnica de diseño Backtracking I

Técnica de diseño BacktrackingIntroducció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

Page 13: Diseño y análisis de algoritmos Técnica de diseño Backtracking I

Técnica de diseño BacktrackingIntroducció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

Page 14: Diseño y análisis de algoritmos Técnica de diseño Backtracking I

Técnica de diseño BacktrackingIntroducció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.

)(nO)2)(( nnpO )!)(( nnpO

||.....|||| 21 nCCC

Page 15: Diseño y análisis de algoritmos Técnica de diseño Backtracking I

Técnica de diseño BacktrackingIntroducció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:

ix

......1 321211 mmmmmmm

im

ix

im

Page 16: Diseño y análisis de algoritmos Técnica de diseño Backtracking I

función estimacion():enteroVariable 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 mFIN.

Técnica de diseño BacktrackingIntroducción

Función de estimación

Page 17: Diseño y análisis de algoritmos Técnica de diseño Backtracking I

Técnica de diseño BacktrackingEl 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

),...,( 1 nxx ix

ix

Page 18: Diseño y análisis de algoritmos Técnica de diseño Backtracking I

Técnica de diseño BacktrackingEl 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:

||||

)()(

)()(

ijji

jijiijji

jjiijjii

ffcc

ffccffcc

cfcfcfcf

|||| ijji ffcc

Page 19: Diseño y análisis de algoritmos Técnica de diseño Backtracking I

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:booleanoInicio 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 amenazaFIN.

Técnica de diseño BacktrackingEl problema de las ocho reinas

Función que revisa las restricciones

Page 20: Diseño y análisis de algoritmos Técnica de diseño Backtracking I

Procedimiento colocarReinas(ent k:entero, ent sal sol: arreglo [1..n] de entero){sol[1..k-1] están bien colocadas}Variable i:enteroInicio 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-si Fin-paraFIN.

Llamado...colocarReinas(1,sol)

Técnica de diseño BacktrackingEl problema de las ocho reinas

Solución recursiva

Page 21: Diseño y análisis de algoritmos Técnica de diseño Backtracking I

Procedimiento nReinas(ent n:entero)Variable k:entero, x: arreglo [1..n] de enteroInicio 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 x[k]:= x[k]+1 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 sino k:=k+1 {retroceso} Fin-si Fin-paraFIN.

Técnica de diseño BacktrackingEl problema de las ocho reinas

Solución iterativa

Page 22: Diseño y análisis de algoritmos Técnica de diseño Backtracking I

Técnica de diseño BacktrackingEl 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!=479.001.345• Número total del espacio de estados : 1.302.061.345• Número total de nodos explorados:856.189 que es un 0,065%• Se obtiene la primera solución a partir de visitar 262 nodos

7

0 0

629281)8(1j

j

i

i