Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Programacion Dinamica
2009
Programaci
on Din
amica
Una desventaja de la tecnica de Divide & Conquer es que cuando se resuelven por separado
varios subproblemas puede suceder que surjan los mismos suproblemas en ramas separadas
y se calcule mas de una vez su solucion.
La idea de la tecnica de Programacion Dinamica es evitar resolver un subproblema mas
de una vez. Esto se logra manteniendo una tabla con las soluciones de subproblemas ya
encontradas.
En general, los algoritmos de programacion dinamica construyen la solucion del problema
original de manera bottom-up, primero resuelven los subproblemas de tama
no mnimo, y
usando los resultados construyen soluciones a problemas de tama
no progresivamente mayor.
1.1
C
alculo de N
umeros Combinatorios
El problema es calcular
n
k
=
n!
(0 k n)
k!(n k)!
Sabiendo que
1.1.1
n
k
n1
n1
+
0<k<n
k1
k
=
1
k =0k =n
1 procedure comb ( n , k )
2
i f k = 0 or k = n then
3
return 1;
4
else
5
r e t u r n comb ( n1, k1) + comb ( n1, k ) ;
6
end
7 end
n
k
n2
k2
n1
k1
n1
k
n2
n2
n2
k1
k1
k
| {z }
| {z }
subproblema repetido subproblema repetido
n
k
.
1
k =0k =n
1 + T (n 1, k 1) + T (n 1, k) 0 < k < n
n
n
Se puede probar que T (n, k) = 2
1=O
k
k
T (n, k) =
1.1.2
Programaci
on Din
amica
i
j
para i 0 . . . n, j
11
i f i < j or j > k then
12
sum := sum + 1 ;
13
i f sum <= n+1 then
14
i := sum1; j := 1 ;
15
else
16
i := n ; j := sumn ;
17
end
18
end
19
end
20
end
21
22
return c (n , k)
23 end
La condicion del if dentro del bucle se cumple cuando se llega al final de la diagonal
correspondiente a la sum, bien porque se llego a la diagonal de la tabla o bien porque se
alcanzo el valor de k.
Dentro del if, se incrementa la suma y se actualizan los ndices i y j. Hay dos casos, cuando
la diagonal correspondiente a sum comienza por arriba de n, y cuando comienza por debajo.
Sea T (n, k) la cantidad de actualizaciones de entradas de la tabla que realiza el algoritmo.
T (n, k) =
n
X
i = n(k + 1) k(
i=nk
k+1
) = O(nk)
2
La mejora
es significativa, para n = 20, k = 10, el algoritmo Divide & Conquer real20
iza
= 184756 llamadas recursivas, mientras que el algoritmo de Programacion
10
Dinamica realiza solo 165 actualizaciones a la tabla.
Referencias
[AHU83] Alfred V. Aho, J. E. Hopcroft, and Jeffrey D. Ullman. Data Structures and
Algorithms. Addison-Wesley, 1983.
[CSRL01] Thomas H. Cormen, Clifford Stein, Ronald L. Rivest, and Charles E. Leiserson.
Introduction to Algorithms. McGraw-Hill Higher Education, 2nd edition, 2001.
[Sed92]