Download - C6 - Programacion dinamica

Transcript
  • Universidad Andres Bello

    Facultad de Ingeniera

    Ingeniera en Computacion e Informatica

    Diseno de Algoritmos

    Laboratorio VIProfesor: Carlos Contreras Bolton Fecha: 23 de mayo de 2015Ayudantes: Felipe Reyes Tamara Saez

    La solucion de problemas mediante la programacion dinamica se basa en el llamado principio deoptimo que versa como sigue:

    En una secuencia de decisiones optima toda subsecuencia ha de ser tambien optima

    Para que un problema pueda ser abordado por esta tecnica se deben presentar dos condiciones:

    La solucion debe ser alcanzada mediante una secuencia de decisiones.

    La secuencia debe cumplir el principio de optimo.

    En forma general, se deben seguir los siguiente pasos

    1. Plantear la solucion como una sucesion de decisiones y la verificacion de que cumple el principio deoptimo.

    2. Definicion recursiva de la solucion.

    3. Calculo de la solucion optima mediante una tabla de soluciones parciales.

    4. Construccion de la solucion optima en base a la tabla de soluciones optimas.

    En base a la estructura presentada, resuelva los siguiente ejercicios.

    Ejercicio 1: Calculo del n-esimo termino de FibonacciLa sucesion de Fibonacci se define como sigue

    fib(n) =

    1 si n = 0fib(n 1) + fib(n 2) si n > 1

    Para este problema podemos disenar un algoritmo que resuelva el problema mediante la construccionde una tabla que permite ir almacenando los calculos realizados en un arreglo para poder reutilizarlos.Una optimizacion al uso de un arreglo para almacenar los resultados previos es simplemente guardandolos dos ultimos elementos como dice la definicion, vale decir, se almacenaran los dos elementos anterioresfn1 y fn2. Luego, el algoritmo sera como sigue:

  • Diseno de Algoritmos Laboratorio VI

    Algorithm 1 Fibonacci

    Require: n: el termino a calcular.1: if n 1 then2: return n3: else4: x 05: y 16: for i 2 hasta n do7: f x + y8: x y9: y f

    10: end for11: return f12: end if

    Implemente esta version del algoritmo de obtencion de la sucesion de Fibonacci.

    Ejercicio 2: Funcion de AckermannLa funcion de Ackermann es una funcion recursiva que toma dos numeros naturales como argumentos ydevuelve un unico numero natural. Como norma general se define como sigue:

    A(m,n) =

    n + 1 si m = 0A(m 1, 1) si m > 0 y n = 0A(m 1, A(m,n 1)) si m > 0 y n > 0

    Desarrolle un algoritmo mediante programacion dinamica que resuelva la funcion Ackerman, luegoimplementela.

    OBSERVACIONES

    La tarea debe ser realizada en C++.

    Debe enviar un correo electronico con el codigo fuente y el informe realizado.

    El trabajo debe ser desarrollado en grupos de no mas de 2 personas.

    El informe debe contener:

    1. Portada.

    2. Introduccion.

    3. Descripcion de la problematica

    4. Descripcion del algoritmo.

    5. Calculo de la complejidad de los algoritmos (detallado)

    6. Conclusiones.

    El informe debe ser desarrollado en LATEX.

    Carlos Contreras Bolton 2