introducción a la programación - ?· 2 introducción a la programación en la programación...

Download Introducción a la Programación - ?· 2 Introducción a la Programación En la Programación Dinámica…

Post on 20-Sep-2018

213 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

  • Introduccin a la Programacin

    Tema 15. Algoritmos de Vuelta Atrs

    1. Introduccin: Algoritmos de Vuelta Atrs y Programacin Dinmica ................................ 1

    2. Algoritmos de Vuelta Atrs .................................................................................................. 3

    2.1 Concepto de Estado ...................................................................................................... 4

    2.2 Diseo, correccin y complejidad ................................................................................. 6

    3. Detalles de implementacin ................................................................................................ 7

    3.1 Algoritmo Genrico de Vuelta Atrs ............................................................................. 7

    4. Detalles de implementacin del problema ......................................................................... 9

    4.1 Problema de las Reinas ................................................................................................. 9

    5. Algunos problemas resueltos ............................................................................................. 12

    5.1 Problema de la Mochila .............................................................................................. 13

    5.2 Problema del Cambio de Monedas ............................................................................. 14

    5.3 Problema de Asignacin .............................................................................................. 15

    5.4 Tareas y Procesadores ................................................................................................. 16

    6. Problemas Propuestos ........................................................................................................ 18

    6.1 Problema de Aeropuertos ........................................................................................... 18

    6.2 Problema del Laberinto ............................................................................................... 18

    6.3 Problema de estaciones de bomberos ........................................................................ 19

    1. Introduccin: Algoritmos de Vuelta Atrs y Programacin Dinmica

    Los algoritmos de Vuelta Atrs, que vamos a ver en este captulo, pueden verse

    implementaciones eficientes de casos particulares de Programacin Dinmica. Cada variante

    de la Programacin Dinmica da lugar a una variante de los algoritmos de vuelta atrs como

    veremos en adelante.

    En el captulo anterior hemos visto la Programacin Dinmica como una tcnica que

    generaliza a la conocida como Divide y Vencers (con o sin memoria). Vimos diversas variantes

    de la programacin dinmica: con y sin memoria, aleatoria, con filtro, bsqueda de todas las

    soluciones, bsqueda slo de una.

  • 2 Introduccin a la Programacin

    En la Programacin Dinmica a cada problema, dentro del contexto del conjunto de problemas

    considerado poda identificarse por un conjunto de valores para las propiedades individuales

    consideradas. Asociado a cada problema aparecen un conjunto de alternativas, que

    depende del problema. Tal como vimos el esquema de la Programacin Dinmica es de la

    forma:

    ( ) {

    ( ( ( ) (

    ) ( )))

    Todos los problemas

    son problemas del conjunto de problemas considerado.

    Cada subproblema debe ser de un tamao menor que el problema original. Esta relacin de

    tamao nos permite definir una relacin de orden total entre los problemas del conjunto. En el

    sentido de que si el tamao de es menor que el tamao de . Con esta definicin

    previa se debe cumplir que para cada uno de los subproblemas.

    El conjunto de problemas ms las relaciones entre problemas y subproblemas definen

    implcitamente, como vimos, un grafo dirigido. Cada problema se asocia a un vrtice y hay un

    camino entre los problemas y si hay una alternativa y un entero que represente

    un posible subproblema. Cada camino entre los vrtices la representamos de la forma

    .

    En el caso particular de Reduccin, es decir cuando el nmero de subproblemas para una

    alternativa dada es igual a uno ( ) el esquema para este caso particular es:

    ( ) {

    ( ( ( )))

    En este caso el problema se reduce al problema (dnde podemos eliminar el subndice al

    solo haber un subproblema) despus de tomar la alternativa . De nuevo, como en el

    caso general, el conjunto de problemas ms las relaciones (ahora est omitido el nmero

    del subproblema porque siempre hay 1) definen un grafo dirigido implcito. Cada vrtice es un

    problema del conjunto de problemas y existe una arista de arista de a si para

    algn . Ahora en el grafo (a diferencia de en el caso general de la Programacin

    Dinmica) todos los vrtices estn asociados a problemas y las aristas etiquetadas con

    alternativas. Las hojas de este grafo son casos base o problemas que no tienen solucin. Como

    vimos, resolver un problema, desde esta perspectiva, es encontrar un camino, si existe, desde

    el vrtice que representa el problema hasta una hoja que sea un caso base. Encontrar todas las

    soluciones al problema es encontrar todos los caminos desde el vrtice que representa el

    problema que acaban en casos base. Conocidas todas las soluciones la mejor, con respecto a

    una propiedad dada de la solucin, es aquella que tiene mayor (o menor) valor de esa

    propiedad entre todas las soluciones encontradas.

    Los caminos en el grafo sern secuencias de alternativas que representaremos por

    . Partiendo de un problema dado y siguiendo la secuencia de alternativas

    alcanzaremos un problema que representaremos por . Desde la perspectiva

  • 3 15. Algoritmos de Vuelta Atrs

    anterior una solucin para el problema puede representarse como una secuencia de

    alternativas con y un caso base. Alternativamente una secuencia

    de alternativas (un camino en el grafo) puede acabar en un problema que no tenga solucin.

    En la Programacin Dinmica los casos base se tratan explcitamente. Por lo tanto en esa

    tcnica no es necesario definir el conjunto de alternativas para esos problemas. En algunos

    casos es ms sencillo permitir tambin reducciones de los casos base con solucin a un nuevo

    problema que llamaremos problema final. Siguiendo esta posibilidad completamos el conjunto

    de problemas con un problema ficticio adicional que denominaremos el problema final y

    representaremos por . Este problema final tendr un tratamiento especial. Con este

    problema final tenemos una forma alternativa de caracterizar las soluciones de un problema.

    Ahora las hojas del grafo son el problema y problemas que no tienen solucin. Las soluciones

    vienen definidas por caminos desde el problema original hasta el problema final . La solucin

    al problema original la podemos representar por . Donde es la

    alternativa que hemos tomado en el caso base para alcanzar el problema fina. Podemos estar

    seguros que la secuencia de alternativas que conducen al estado final define una solucin. Las

    que conducen a un problema sin alternativas pero no final no es una solucin.

    2. Algoritmos de Vuelta Atrs

    Los algoritmos de Vuelta Atrs (y sus variantes) son algoritmos especialmente diseados para

    resolver de forma eficiente Problemas de Programacin Dinmica en el caso particular de

    Reduccin y sin Memoria. Son, por lo tanto, adecuados para resolver problemas que se pueden

    concebir en trminos de grafos abstractos (grafos implcitos como en los ejemplos de arriba)

    cuyos vrtices representan problemas y cuyas aristas representan relaciones de reduccin de

    un problema a otro de tamao ms pequeo cuando escogemos una de las alternativas

    posibles. Los algoritmos de Vuelta Atrs son, en su versin inglesa, son los algoritmos de

    Backtracking.

    Los algoritmos de Vuelta Atrs hacen una exploracin en profundidad del grafo. Comienzan

    por un vrtice, que representa el problema, y van explorando en profundidad el grafo

    anotando la secuencia de alternativas que se han tomado. Se llaman de Vuelta Atrs porque,

    siguiendo el esquema de exploracin en profundidad, cuando llegan a un vrtice hoja (con

    solucin o sin ella) vuelven hacia atrs, al vrtice padre, para seguir buscando la primera u otra

    solucin. Cada solucin la podemos caracterizar por la secuencia de alternativas desde el

    vrtice que representa el problema hasta el problema final.

    Los algoritmos de Vuelta Atrs tienen distintas variantes que reproducen las mismas ideas que

    vimos en la Programacin Dinmica, y que estudiaremos con ms detalle abajo:

    Bsico: Es el esquema de partida. Es adecuado para buscar todas las soluciones, o solo

    una de ellas. En este ltimo caso el algoritmo para cuando encuentra la primera

  • 4 Introduccin a la Programacin

    solucin. Esta variante es adecuada, tambin, para problemas que buscan una solucin

    solamente o la existencia o no de solucin.

    Ramifica y Poda: El algoritmo filtra (poda) el conjunto de alternativas disponible

    usando informacin de las decisiones tomadas y cotas del valor esperado. Es la versin

    correspondiente de las mismas ideas vistas en la Programacin Dinmica con Filtro. Es

Recommended

View more >