Back Atila

download Back Atila

of 14

Transcript of Back Atila

TCNICA DE DISEO BACKTRACKINGPROBLEMA DEL CABALLO DE ATILA

Ing. Claudia Pereira Facultad de Ciencias Exactas Universidad Nacional del Centro de la Provincia de Buenos Aires

CARACTERSTICAS DEL PROBLEMA La solucin puede expresarse como una n-tupla (x1,x2,...xn)

donde los xi pertenecen a un cierto dominio. Funcin FACTIBLE: determina si una tupla cumple o no con las restricciones del problema. Funcin SOLUCIN: determina si una tupla factible es solucin al problema. Funcin OBJETIVO a optimizar o satisfacer.Backtracking: Introduccin

CARACTERSTICAS DEL PROBLEMARestricciones del problema: Explcitas: describen el dominio de los xi.

Implcitas: describen las relaciones que deben cumplirse entre los xi.Backtracking: Introduccin

TCNICA BACKTRACKING Forma cada tupla de manera progresiva.

Verifica si cada xi aadido a la tupla (x1,x2,..,xi) conduce a una solucin factible. Si FACTIBLE (x1,x2,..,xi) = Falso Corta la bsqueda Prueba con otro valor vlido de xi Si no existen valores vlidos retrocede Si FACTIBLE (x1,x2,..,xi) = Verdadero Repite el procedimiento para incorporar x i+1 a la tuplaBacktracking: Introduccin

ESPACIO DE SOLUCIONES(x1) (x2) (x3) ........... (x3 ,x1) .... (xn) (xn ,x1) (xn ,x1) .................. (xn ,x1 ,...x1)...(xn ,xn ,...xn)

hijos

(x1 ,x1) (x1 ,x2) ...(x1 ,xn)

niveles

..................

(x1 ,x1 ,...x1) (x1 ,x1 ,...x2)....

#niveles

Cantidad total de nodos:

#hijos

i

O (#hijos #niveles )Backtracking: Introduccin

i=0

Desventaja Costo computacional exponencial Solucin Poda por factibilidad

Funciones de PODA Poda por costo Ventaja Si existe solucin al problema entonces esta tcnica la encuentra.Backtracking: Introduccin

ESQUEMA GENERALBACK (estado e, solucion *sol) \\ e: nodo del rbol de soluciones { \\sol: solucin que retorna if ( HOJA (e)) CalcularSolucin (e, sol); else { int nrohijo = 1; estado siguiente; while ( HIJOS (nrohijo, e, siguiente ) ) { if ( !PODADO ( siguiente, sol) ) BACK ( siguiente, sol); ++nrohijo; } } }Backtracking: Introduccin

PROBLEMA: EL CABALLO DE ATILAEnunciado: Todos sabemos que por donde pisa el caballo de Atila jams vuelve a crecer el pasto. El caballo fue directamente hacia el jardn de n x n casillas. Empez su paseo por una casilla cualquiera y volvi a ella, es decir, hizo un recorrido cerrado. No visit dos veces una misma casilla, se movi de una casilla a otra vecina en forma horizontal o vertical, pero nunca en diagonal. Por donde pis el caballo, el pasto jams volvi a crecer. Luego de terminado el recorrido en algunas casillas todava haba pasto (seal de que en ellas no haba estado el caballo). Escriba un algoritmo que deduzca el recorrido completo que hizo el caballo.

CARACTERIZACIN DEL PROBLEMA Solucin (pos1, pos2, pos3,......posn) posi es una casilla del jardn de m x m casillas Restricciones:

Explcitas: posi {pos1, pos2, pos3,......posmxm} Implcitas: en la tupla solucin, No hay dos posiciones iguales pos1 es una casilla del borde del jardn posi y posi+1 son casillas son adyacentes pos1 y posn son casillas adyacentes deben estar todas las casillas pisadas Ejemplo: el caballo de Atila

Espacio de soluciones

Estado inicial

Movimientos del caballo........................

Estados factibles No puede seguir avanzando

Estado solucinEjemplo: el caballo de Atila

Espacio de soluciones: recorrido

SolucinEjemplo: el caballo de Atila

Algoritmo para todas las solucionesvoid Atila (estado e, int nroPisada) { e.marcar(nroPisada); if ( ! e.HayMovimientos() ) { if(( nroPisada== e.cantPisadas() ) && (e.vecinaOrigen())) imprimirSolucion(e); } else { estado sgte; int nrohijo=1; while ( hijos(nrohijo, e, sgte)) { if ( sgte.esFactible() ) Atila( sgte, nroPisada+1); nrohijo++;} } }Ejemplo: el caballo de Atila

Complejidad temporalDepende de la cantidad de estados generados

O (#hijos #niveles )

T (casillasPisadas) O( 3Atila

#casillasPisadas

)

Ejemplo: el caballo de Atila

BIBLIOGRAFA Computer Algorithms C++; Horowitz, Sahni, Rajasekaran. Algorithms in C; Sedgewick Apuntes de ctedra.