Académique Documents
Professionnel Documents
Culture Documents
ALGORITMOS
Escuela Superior de Cmputo
Contenido
Introduccin
Programacin dinmica
Enfoques de la programacin dinmica
Principio de optimalidad
Diseo
de
un
algoritmo
de
programacin
dinmica
Ejemplos
Fibonacci
Clculo del coeficiente binomial
y Coeficientes Binomiales
Introduccin
La tcnica divide y vencers seala que es posible dividir
Si
de clculos.
La
base de la programacin
razonamiento inductivo:
dinmica
es
el
Programacin dinmica
La programacin dinmica es un mtodo para reducir
mtodos descendentes.
Empezar con el problema original y descomponerlo en
pasos sucesivos en problemas de menor tamao.
La programacin dinmica por el contrario, es un
mtodo ascendente:
Resolver primero los problemas pequeos (guardando
las soluciones) y despus combinarlas para resolver
problemas ms grandes.
La programacin dinmica hace uso de:
Subproblemas superpuestos
Subestructuras ptimas
Memoizacion
el problema en subproblemas ms
pequeos.
2. Resolver estos problemas de manera ptima
usando este proceso de tres pasos recursivamente.
3. Usar estas soluciones ptimas para construir una
solucin ptima al problema original.
Los
todo
Haskell,
pueden
usar
la
memoizacion
automticamente sobre funciones con un conjunto
concreto de argumentos, para acelerar su proceso de
evaluacin. Esto slo es posible en funciones que no
tengan efectos secundarios.
Principio de optimalidad
Cuando hablamos de optimizar nos referimos a buscar
de optimalidad.
3.
4.
Fibonacci
( )
4.
5.
fib(5)
fib(4) + fib(3)
(fib(3) + fib(2)) + (fib(2) + fib(1))
((fib(2) + fib(1)) + (fib(1) + fib(0))) + ((fib(1) + fib(0)) + fib(1))
(((fib(1) + fib(0)) + fib(1)) + (fib(1) + fib(0))) + ((fib(1) + fib(0)) + fib(1))
()
int fibonacci(int n)
{
if (n<2)
return n;
if(tabla[n-1] == -1)
tabla[n-1] = fibonacci(n-1);
if(tabla[n-2] == -1)
tabla[n-2] = fibonacci(n-2);
tabla[n] = tabla[n-1] + tabla[n-2];
return tabla[n];
}
()
A,C
A,D
A,E
A,F
B,C
B,D
B,E
B,F
C,D
C,E
C,F
D,E
D,F
E,F
(6,2) = 15
Los nmeros C(n,k) se conocen como coeficientes
= 0 =
1
1
+
0 < <
1
se repiten?
funcion C(n,k)
{
Si k = 0 o k = n entonces
devolver 1
sino si 0 < k< n
devolver C(n-1,k-1) + C(n-1,k)
sino
devolver 0
}
complejidad exponencial
por la repeticin de los
clculos que realiza. No obstante, es posible disear un
algoritmo con un tiempo de ejecucin de orden O(nk)
basado en la idea del Tringulo de Pascal. Para ello es
necesario la creacin de una tabla bidimensional en la
que ir almacenando los valores intermedios que se
utilizan posteriormente.
implementacin.
*Enviar con su rbrica correspondiente.