Backtracking

También podría gustarte

Está en la página 1de 42

Estratgias generales de anlisis y

diseo de algortmos
comp-420

Friday, August 30, 13

Ayudantes

Hugo Eduardo Dueas heduenas@cimat.mx (ordinaria)

Alberto Jos Ramirez Valadez alberto@cimat.mx (ordinaria)

Mandar tareas (programas)

dropbox

comentarios en el codigo

Hugo taras impares

Beto taras pares

Programa que no compile vale cero

Friday, August 30, 13

Bsqueda exhaustiva (fuerza bruta)

Probar todas las soluciones candidatas posibles hasta encontrar la solucin al


problema.

Limite: ineficiencia

en general el nmero de candidatos a solucin que se necesitan procesar crecen


exponencialmente al tamao del problema.

generacin de candidatos a solucin,

procesamiento y verificacin de candidatos a solucin.

Ej. Magic Square Fill

Friday, August 30, 13

Bsqueda exhaustiva (fuerza bruta)

Probar todas las soluciones candidatas posibles hasta encontrar la solucin al


problema.

Limite: ineficiencia

en general el nmero de candidatos a solucin que se necesitan procesar crecen


exponencialmente al tamao del problema.

generacin de candidatos a solucin,

procesamiento y verificacin de candidatos a solucin.

Ej. Magic Square Fill

Friday, August 30, 13

Backtracking

Friday, August 30, 13

Backtracking

Es un Algoritmo general para encontrar todas, o alguna solucin a un problema


computacional.

Friday, August 30, 13

Backtracking

Es un Algoritmo general para encontrar todas, o alguna solucin a un problema


computacional.

Incrementalmente genera soluciones candidatas, y abandona una solucion parcial C


tan pronto como se da cuenta de que C n podr completar una solucin valida.

Friday, August 30, 13

Backtracking

Friday, August 30, 13

Backtracking

Da un mtodo conveniente para generar candidatos a solucin y evitar generar


candidatos innecesarios.

Friday, August 30, 13

Backtracking

Da un mtodo conveniente para generar candidatos a solucin y evitar generar


candidatos innecesarios.

Construir soluciones un componente cada vez y evaluar las soluciones parcialmente


construidas como sigue:

Friday, August 30, 13

Backtracking

Da un mtodo conveniente para generar candidatos a solucin y evitar generar


candidatos innecesarios.

Construir soluciones un componente cada vez y evaluar las soluciones parcialmente


construidas como sigue:

si puede desarrollarse ms sin violar las restricciones del problema, expandir


tomando la primera opcin legtima posible.

Friday, August 30, 13

Backtracking

Da un mtodo conveniente para generar candidatos a solucin y evitar generar


candidatos innecesarios.

Construir soluciones un componente cada vez y evaluar las soluciones parcialmente


construidas como sigue:

si puede desarrollarse ms sin violar las restricciones del problema, expandir


tomando la primera opcin legtima posible.

si no hay opcin legtima para el siguiente componente no se necesita seguir


expandiendo y regresamos al primer nodo posible.

Friday, August 30, 13

Backtracking

Da un mtodo conveniente para generar candidatos a solucin y evitar generar


candidatos innecesarios.

Construir soluciones un componente cada vez y evaluar las soluciones parcialmente


construidas como sigue:

si puede desarrollarse ms sin violar las restricciones del problema, expandir


tomando la primera opcin legtima posible.

si no hay opcin legtima para el siguiente componente no se necesita seguir


expandiendo y regresamos al primer nodo posible.

Friday, August 30, 13

en el peor caso puede ser como bsqueda exhaustiva pero casi nunca pasa esto.

Backtracking

Da un mtodo conveniente para generar candidatos a solucin y evitar generar


candidatos innecesarios.

Construir soluciones un componente cada vez y evaluar las soluciones parcialmente


construidas como sigue:

si puede desarrollarse ms sin violar las restricciones del problema, expandir


tomando la primera opcin legtima posible.

si no hay opcin legtima para el siguiente componente no se necesita seguir


expandiendo y regresamos al primer nodo posible.

en el peor caso puede ser como bsqueda exhaustiva pero casi nunca pasa esto.

Se puede pensar como un rbol de decisiones.

Friday, August 30, 13

Backtracking (vuelta atrs)

Friday, August 30, 13

Backtracking (vuelta atrs)

Friday, August 30, 13

Un algoritmo de backtracking intenta construir una solucin a un


problema computacional de manera incremental.

Backtracking (vuelta atrs)

Friday, August 30, 13

Un algoritmo de backtracking intenta construir una solucin a un


problema computacional de manera incremental.

Cuando el algoritmo necesita decidir entre dos opciones para el


siguiente componente de la solucin, trata ambas recursivamente.

Backtracking (vuelta atrs)

Friday, August 30, 13

Un algoritmo de backtracking intenta construir una solucin a un


problema computacional de manera incremental.

Cuando el algoritmo necesita decidir entre dos opciones para el


siguiente componente de la solucin, trata ambas recursivamente.

El trmino backtrack fue acuado por el matemtico estadounidense


D.H. Lehmer en los aos 1950s.

Problema de las n-reinas

Friday, August 30, 13

Problema de las n-reinas

Friday, August 30, 13

Problema prototipo que se resuelve por backtracking.

Problema de las n-reinas

Friday, August 30, 13

Problema prototipo que se resuelve por backtracking.

Propuesto por el entusiasta del ajedrez Max Bezzel en 1848 para


un tablero estndar de 8x8.

Problema de las n-reinas

Friday, August 30, 13

Problema prototipo que se resuelve por backtracking.

Propuesto por el entusiasta del ajedrez Max Bezzel en 1848 para


un tablero estndar de 8x8.

Resuelto y generalizado a tableros ms grandes por Franz Nauck en


1950.

Problema de las n-reinas

Friday, August 30, 13

Problema prototipo que se resuelve por backtracking.

Propuesto por el entusiasta del ajedrez Max Bezzel en 1848 para


un tablero estndar de 8x8.

Resuelto y generalizado a tableros ms grandes por Franz Nauck en


1950.

Poner a n reinas en un tablero de nxn de tal forma que ningn par


de reinas se puedan atacar.

Problema de las n-reinas

Friday, August 30, 13

Problema prototipo que se resuelve por backtracking.

Propuesto por el entusiasta del ajedrez Max Bezzel en 1848 para


un tablero estndar de 8x8.

Resuelto y generalizado a tableros ms grandes por Franz Nauck en


1950.

Poner a n reinas en un tablero de nxn de tal forma que ningn par


de reinas se puedan atacar.
ningn par de reinas pueden estar en la misma columna, rengln
o diagonal.

Problema de las n-reinas

Friday, August 30, 13

Problema prototipo que se resuelve por backtracking.

Propuesto por el entusiasta del ajedrez Max Bezzel en 1848 para


un tablero estndar de 8x8.

Resuelto y generalizado a tableros ms grandes por Franz Nauck en


1950.

Poner a n reinas en un tablero de nxn de tal forma que ningn par


de reinas se puedan atacar.
ningn par de reinas pueden estar en la misma columna, rengln
o diagonal.

En cualquier solucin al problema de las n-reinas habr solamente 1


reina en cada columna del tablero.

Problema de las n-reinas

Friday, August 30, 13

Problema de las n-reinas

Las soluciones posibles se representan usando un arreglo


Q[1,...,n] donde Q[i] indica la casilla en el rengln i que
contiene a la reina o 0 si no se ha colocado reina en el
rengln i.

Friday, August 30, 13

Problema de las n-reinas

Las soluciones posibles se representan usando un arreglo


Q[1,...,n] donde Q[i] indica la casilla en el rengln i que
contiene a la reina o 0 si no se ha colocado reina en el
rengln i.

[4,7,3,8,2,5,1,6]

Friday, August 30, 13

Problema de las n-reinas

Las soluciones posibles se representan usando un arreglo


Q[1,...,n] donde Q[i] indica la casilla en el rengln i que
contiene a la reina o 0 si no se ha colocado reina en el
rengln i.

Para resolver el problema se colocan las reinas rengln por


rengln empezando de arriba.

[4,7,3,8,2,5,1,6]

Friday, August 30, 13

Problema de las n-reinas

Las soluciones posibles se representan usando un arreglo


Q[1,...,n] donde Q[i] indica la casilla en el rengln i que
contiene a la reina o 0 si no se ha colocado reina en el
rengln i.

Para resolver el problema se colocan las reinas rengln por


rengln empezando de arriba.

Una solucin parcial es un arreglo Q[1,...,n] cuyas primeras


r-1 entradas son positivas y cuyas ltimas n-r+1 entradas
son ceros, para un entero dado r.

Friday, August 30, 13

[4,7,3,8,2,5,1,6]

Problema de las n-reinas

Las soluciones posibles se representan usando un arreglo


Q[1,...,n] donde Q[i] indica la casilla en el rengln i que
contiene a la reina o 0 si no se ha colocado reina en el
rengln i.

Para resolver el problema se colocan las reinas rengln por


rengln empezando de arriba.

Una solucin parcial es un arreglo Q[1,...,n] cuyas primeras


r-1 entradas son positivas y cuyas ltimas n-r+1 entradas
son ceros, para un entero dado r.

El algoritmo recursivo enumera todas las soluciones al


problema de las n-reinas que sean consistentes con una
solucin parcial dada.

Friday, August 30, 13

[4,7,3,8,2,5,1,6]

Problema de las n-reinas

Las soluciones posibles se representan usando un arreglo


Q[1,...,n] donde Q[i] indica la casilla en el rengln i que
contiene a la reina o 0 si no se ha colocado reina en el
rengln i.

Para resolver el problema se colocan las reinas rengln por


rengln empezando de arriba.

Una solucin parcial es un arreglo Q[1,...,n] cuyas primeras


r-1 entradas son positivas y cuyas ltimas n-r+1 entradas
son ceros, para un entero dado r.

El algoritmo recursivo enumera todas las soluciones al


problema de las n-reinas que sean consistentes con una
solucin parcial dada.
r primer rengln r vaco.

Friday, August 30, 13

[4,7,3,8,2,5,1,6]

Problema de las n-reinas

Las soluciones posibles se representan usando un arreglo


Q[1,...,n] donde Q[i] indica la casilla en el rengln i que
contiene a la reina o 0 si no se ha colocado reina en el
rengln i.

Para resolver el problema se colocan las reinas rengln por


rengln empezando de arriba.

Una solucin parcial es un arreglo Q[1,...,n] cuyas primeras


r-1 entradas son positivas y cuyas ltimas n-r+1 entradas
son ceros, para un entero dado r.

El algoritmo recursivo enumera todas las soluciones al


problema de las n-reinas que sean consistentes con una
solucin parcial dada.
r primer rengln r vaco.

Friday, August 30, 13

para resolver el problema se llama al procedimiento


RECURSIVEQUEENS( Q[1,...,n],1 ).

[4,7,3,8,2,5,1,6]

Friday, August 30, 13

Friday, August 30, 13

Friday, August 30, 13

Suma de subconjuntos

Friday, August 30, 13

Suma de subconjuntos

Friday, August 30, 13

Dado un conjunto de X enteros positivos y un entero meta T, existe


un subconjunto de elementos en X que sumen T?

Suma de subconjuntos

Friday, August 30, 13

Dado un conjunto de X enteros positivos y un entero meta T, existe


un subconjunto de elementos en X que sumen T?

Notemos que puede haber ms de un subconjunto.

Suma de subconjuntos

Friday, August 30, 13

Dado un conjunto de X enteros positivos y un entero meta T, existe


un subconjunto de elementos en X que sumen T?

Notemos que puede haber ms de un subconjunto.

Por ejemplo:

Suma de subconjuntos

Dado un conjunto de X enteros positivos y un entero meta T, existe


un subconjunto de elementos en X que sumen T?

Notemos que puede haber ms de un subconjunto.

Por ejemplo:

Friday, August 30, 13

si X = {8,6,7,5,3,10,9} y T=15, es VERDADERO porque existen los


subconjuntos {8,7} o {7,5,3} o {6,9} o {5,10}.

Suma de subconjuntos

Dado un conjunto de X enteros positivos y un entero meta T, existe


un subconjunto de elementos en X que sumen T?

Notemos que puede haber ms de un subconjunto.

Por ejemplo:

Friday, August 30, 13

si X = {8,6,7,5,3,10,9} y T=15, es VERDADERO porque existen los


subconjuntos {8,7} o {7,5,3} o {6,9} o {5,10}.
si X = {11,6,5,1,7,13,12} y T = 15 la respuesta es FALSO.

También podría gustarte