Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1
Método general
La programación dinámica se suele utilizar en
problemas de optimización, donde una solución está
formada por una serie de decisiones.
Igual que la técnica divide y vencerás, resuelve el
problema original combinando las soluciones para
subproblemas más pequeños.
Sin embargo, la programación dinámica no utiliza
recursividad, sino que almacena los resultados de los
subproblemas en una tabla, calculando primero las
soluciones para los problemas pequeños.
Con esto se pretende evitar la repetición de cálculos
para problemas más pequeños.
2
Método general
Ejemplo. Cálculo de los números de
Fibonacci.
Con método recursivo
Fibonacci (n: integer)
Si n<2 Devolver 1
Sino Devolver Fibonacci (n-1) + Fibonacci (n-2)
Problema: Muchos cálculos están repetidos, tiempo de
ejec. exponencial.
Solución: Calcular los valores de menor a mayor
empezando por 0, e ir guardando los resultados en una
tabla.
Con programación dinámica.
Fibonacci (n: integer)
T[0] = 0; T[1] = 1
para i = 2,3, ...,n
T[i] = T[i-1] + T[i-2]
Devolver T[n]
Se utiliza la misma fórmula 3 que en la versión anterior, pero de
forma más inteligente. El tiempo de ejecución es Θ(n).
Método general
6
Análisis de tiempos de
ejecución
El tiempo de ejecución depende de las
características concretas del problema a resolver.
Casos base:
Si (i<0) o (m<0) entonces no hay solución: Mochila (i, m)
= -∞
En otro caso, si (i=0) ó (m=0) la solución es no incluir
ningún objeto: Mochila (i, m) = 0
15
Problema de la mochila 0/1
Se puede tener una tabla auxiliar de 0/1 para almacenar
las decisiones parciales y recomponer la solución, o
A partir de la tabla V obtener la solución (x1, x2, ..., xn):
partir de la posición V[n, M] y analizar las decisiones que
se tomaron para cada objeto i.
Si (V[i, j] = V[i-1, j]) entonces la solución no usa el objeto i,
xi= 0.
Si (V[i, j] = V[i-1, j-wi] + vi) entonces sí se usa el objeto i, xi=
1.
Si (V[i, j] = V[i-1, j-wi] + vi) y (V[i, j] = V[i-1, j]) entonces
podemos usar el objeto i o no (existe más de una solución
óptima).
Acabar cuando lleguemos a un i=0 ó j=0.
17
Multiplicación encadenada de matrices
Ejemplo. Sean las matrices A, B, C y D, de dimensiones: A=
13x5, B= 5x89, C= 89x3 y D= 3x34. Podemos multiplicarlas de
5 formas:
((AB)C)D Requiere 10.582 = 13·5·89 +
13·89·3 + 13·3·34
(AB)(CD) “ 54.201
(A(BC))D “ 2.856 = 5·89·3 + 13·5·3
+ 13·3·34
A((BC)D) “ 4.055
A(B(CD)) “ 26.418
T(n) = Σ T(i)·T(n-i)
i=1..n-1
22