Sie sind auf Seite 1von 8

AO DEL CENTENARIO DE MACHU PICCHU PARA EL MUNDO

Universidad Cientfica del Per

TRABAJO GRUPAL DE INVESTIGACIN E INVESTIGACIN

TEMA

Backtracking

ASIGNATURA Avanzado.

Algoritmo y Estructura de Datos

DOCENTE

Ing. Hernn Medina Jimnez.

INTEGRANTES

: Arbildo Flores, Jimmy Paolo Panduro Prez Herbert Bar Gonzales Jair Fritz Del guila Teagua Richard

FACULTAD

Ciencias e Ingeniera

CARRERA

Ingeniera de Sistemas de Informacin.

SAN JUAN PER 2011

INTRODUCCION
En su forma bsica, la idea de backtracking se asemeja a un recorrido en profundidad dentro de un grafo dirigido. El grafo en cuestin suele ser un rbol, o por lo menos no contiene ciclos. Sea cual sea su estructura, existe slo implcitamente. El objetivo del recorrido es encontrar soluciones para algn problema. Esto se consigue construyendo soluciones parciales a medida que progresa el recorrido; estas soluciones parciales limitan las regiones en las que se puede encontrar una solucin completa. El recorrido tiene xito si, procediendo de esta forma, se puede definir por completo una solucin. En este caso el algoritmo puede bien detenerse (si lo nico que se necesita es una solucin del problema) o bien seguir buscando soluciones alternativas (si deseamos examinarlas todas). Por otra parte, el recorrido no tiene xito si en alguna etapa la solucin parcial construida hasta el momento no se puede completar. En tal caso, el recorrido vuelve atrs exactamente igual que en un recorrido en profundidad, eliminando sobre la marcha los elementos que se hubieran aadido en cada fase. Cuando vuelve a un nodo que tiene uno o ms vecinos sin explorar, prosigue el recorrido de una solucin. El backtracking est muy relacionado con la bsqueda combinatoria. De manera ms exacta podemos indicar que los problemas a considerar son los siguientes: 1. Problemas de Decisin: Bsqueda de las soluciones que satisfacen ciertas restricciones. 2. Problemas de Optimizacin: Bsqueda de la mejor solucin en base a una funcin objetivo. De forma general, el mtodo del backtracking, concebido como tal, genera todas las secuencias de forma sistemtica y organizada, de manera que prueba todas las posibles combinaciones de un problema hasta que encuentra la correcta. En general, la forma de actuar consiste en elegir una alternativa del conjunto de opciones en cada etapa del proceso de resolucin, y si esta eleccin no funciona (no nos lleva a ninguna solucin), la bsqueda vuelve al punto donde se realiz esa eleccin, e intenta con otro valor. Cuando se han agotado todos los posibles valores en ese punto, la

bsqueda vuelve a la anterior fase en la que se hizo otra eleccin entre valores. Si no hay ms puntos de eleccin, la bsqueda finaliza. Para implementar algoritmos con Backtracking, se usan Pilas Dinmicas y llamadas a funciones recursivas.

I.

DEFINICIN.
El Backtracking es una tcnica de programacin de la que se puede partir de la definicin de Recursividad con la diferencia que, en el backtracking, al existir varios caminos diferentes a elegir, una vez llegado al final y no cumplirse la condicin establecida, volvemos atrs para seguir buscando caminos diferentes o alternativos y posiblemente correctos.

Algoritmo de Backtracking proc Backtracking (X[1 . . . i ]: TSolucin, ok: B) variables L: ListaComponentes inicio si EsSolucin (X) entonces ok CIERTO en otro caso ok FALSO L=Candidatos (X) mientras ok ^ Vaca (L) hacer X[i + 1] Cabeza (L); L Resto (L) Backtracking (X, ok) finmientras finsi fin

Podemos visualizar el funcionamiento de una tcnica de backtracking como la exploracin en profundidad de un grafo. Cada vrtice del grafo es un posible estado de la solucin del problema. Cada arco del grafo representa la transicin entre dos estados de la solucin (i.e., la toma de una decisin).

Tpicamente el tamao de este grafo ser inmenso, por lo que no existir de manera explcita. En cada momento slo tenemos en una estructura los nodos que van desde el estado inicial al estado actual. Si cada secuencia de decisiones distinta da lugar a un estado diferente, el grafo es un rbol (el rbol de estados).

II.

APLICACIONES DEL MTODO ALGORTMICO.


La tcnica de Backtracking es usada en muchos mbitos de la programacin, por ejemplo, para el clculo de expresiones regulares o para tareas de reconocimiento de texto y de sintaxis de lenguajes regulares. Es usado incluso en la implementacin de algunos lenguajes de programacin y da soporte a muchos algoritmos en inteligencia artificial.

III.

ESQUEMA GENERAL.
A continuacin vamos a mostrar un esquema general para este tipo de algoritmos, comentando posteriormente cada una de sus partes y funciones a las que llama. Como ya hemos adelantado con anterioridad, se trata de una funcin recursiva, que por lo general tiene una forma como la que sigue. Adems hemos de sealar que este esquema sirve para resolver aquellos problemas en los que estamos buscando una solucin, es decir, cuando encontremos la primera que cumpla todas las restricciones, finalizaremos, sin importarnos si en realidad existen algunas ms o si se trata de la mejor de las posibles. Estos otros casos son muy similares y se derivan de este esquema sin ninguna complicacin.

Funcin Backtracking (Etapai) devuelve: boolean Inicio xito = falso; IniciarOpciones (i, GrupoOpciones o); Repetir SeleccionarnuevaOpcion(o, Opcion n); Si (Aceptable(n)) entonces AnotarOpcion (i, n); Si SolucionCompleta (i) entonces xito = verdadero; Sino xito = Backtracking(i+1); Si xito = false entonces

Cuando queremos encontrar la mejor solucin, eliminaremos esta instruccin. Y en su lugar compararemos la solucin obtenida con una de referencia, para ver si tenemos que actualizar la mejor solucin obtenida hasta el momento

Fin si; Fin si; Hasta (xito = verdadero) o (NoQuedanOpciones(o)); Retorna xito; Fin;

cancelamosAnotacion (i, n); Fin si;

Si queremos todas las soluciones la instruccin cambiaria por NoQuedanOpciones(o) para conseguir as todas las soluciones posibles. Tambin habra que hacer esto para la mejor solucin.

Seguidamente, explicaremos brevemente cada una de las funciones que intervienen en el cuerpo del algoritmo principal: 1. Iniciar Opciones(Etapa i, Grupo Opciones o); En base a las alternativas elegidas en la solucin parcial i que nos llega como parmetro, introducimos en O el grupo de opciones posibles que podemos probar en la etapa actual. Si ninguno de estos valores condujese a una solucin vlida, la llamada a la funcin finalizara y volveramos a una etapa posterior. 2. Seleccionar Nueva Opcin (Grupo Opciones o, Opcin n); De entre todas las alternativas posibles que tenemos en O, elegimos una. Aqu podemos realizar funciones de Poda, que pueden se r muy beneficiosas en ciertos algoritmos, proporcionando opciones que tienen una alta probabilidad de convertirse en solucin y evitando muchas pruebas innecesarias con valores que segn nuestra estimacin no nos conducirn al xito. Hay que sealar que, de alguna forma esta opcin elegida tiene que ser desechada o marcada como usada en el grupo de opciones O, para que no volvamos a probar con el mismo valor repetidas veces, es decir, el conjunto vaya reducindose hasta que no queden ms alternativas por probar. 3. Aceptable(Opcin n); Los problemas que resuelve este tipo de esquemas algortmicos tienen como caracterstica que buscan un grupo de valores que cumplen entre si una serie de restricciones. Pues bien, el cumplimiento de estas restricciones se comprueba en esta funcin. Si la opcin no es aceptable no ser necesario expandir por esa rama las posibilidades porque en ningn caso nos llevarn a una solucin. De esa manera evitamos tener que explorar zonas del espacio de alternativas que slo nos harn perder tiempo de bsqueda sin proporcionar ningn resultado.

Esta funcin es por tanto de vital importancia, porque tiene funciones de poda que pueden convertir el algoritmo en mucho ms eficiente. Para construirla, se suele llevar a cabo un anlisis exhaustivo del problema a tratar, para identificar esas situaciones de la solucin parcial en la que no debemos expandir ms porque nunca llegaremos a una solucin. Hay tambin que considerar que si el coste computacional es elevado, esta funcin puede incluso empeorar el tiempo de ejecucin pues esta funcin que se ejecutar muchas veces, y si el coste computacional de la misma es elevado y los casos que evita son pocos debemos optar por otra ms sencilla y menos difcil de calcular.

4. Anotar Opcin(Etapa i, Opcin n); Esta funcin anota la opcin n elegida en las funciones anteriores dentro de la solucin parcial que llevamos construida hasta la etapa i. Esta opcin fue elegida en Seleccionar Nueva Accin y comprobada como vlida en Aceptable, de manera que tenemos asegurado que es una alternativa que an no hemos probado, y que no incumple ninguna de las reglas de poda que hayamos introducido en nuestro programa. 5. Cancelamos Anotacin(Etapa i, Opcin n); Realiza la accin contraria. Debido a que esa opcin n que habamos anotado no ha llevado a una solucin, o estamos buscando soluciones alternativas, la eliminamos de la solucin parcial en la etapa i, para que podamos probar con otra si es que existe.

6. No Quedan Opciones(o); Indica si todava existe en el grupo inicial que calculamos en cada funcin recursiva, alguna alternativa ms que probar. Si no queda ninguna opcin, inevitablemente hemos terminado de buscar en la etapa actual, y debemos ir hacia atrs a la anterior llamada recursiva para buscar nuevas alternativas por donde expandir el rbol de posibilidades.

En definitiva, el algoritmo realiza una bsqueda en profundidad en el rbol de soluciones del problema.

IV.

VENTAJAS Y DESVENTAJAS. Ventajas Si existe una solucin, la calcula. Es un esquema sencillo de implementar. Adaptable a las caractersticas especficas de cada problema. Desventajas Coste exponencial O(ji) o factorial en la mayora de los casos. Si el Espacio de Bsqueda es infinito, la solucin, aunque exista, no se encontrar nunca. Por trmino medio consume mucha memoria al tener que almacenar las llamadas recursivas.

V.

EJEMPLO: Problema N-Reinas. El problema de las N-Reinas consiste en colocar n reinas en un tablero de ajedrez de tamao n*n de forma la reinas no se amenacen segn las normas del ajedrez. Se busca encontrar una solucin o todas las soluciones posibles. Este problema puede resolverse utilizando un esquema de backtracking. Cualquier solucin del problema estar formada por una n-tupla (x1,x2,,xn), dnde cada xi indica la columna donde la reina de la fila i-sima es colocada. Las restricciones para este problema consisten en que dos reinas no pueden colocarse en la misma fila, ni en la misma columna ni en la misma diagonal.

Por ejemplo, el problema de las 4-Reinas tiene dos posibles soluciones: [2,4,1,3] y [3,1,4,2].

Das könnte Ihnen auch gefallen