freeCodeCamp/guide/spanish/computer-science/dynamic-programming/index.md

51 lines
2.1 KiB
Markdown
Raw Normal View History

2018-10-12 19:37:13 +00:00
---
title: Dynamic Programming
localeTitle: Programación dinámica
---
## Programación dinámica
La Programación Dinámica (DP) es una técnica de programación para resolver problemas donde los cálculos de sus subproblemas se superponen: usted escribe su programa de manera que evite volver a calcular los problemas ya resueltos. Esta técnica, por lo general, se aplica junto con la memorización, que es una técnica de optimización en la que se almacenan en caché los resultados calculados anteriormente y se devuelve el resultado almacenado en caché cuando se necesita nuevamente el mismo cálculo.
Un ejemplo con la serie de Fibonacci que se define como:
`F(N) = F(N-1) + F(N-2)`
Este es el árbol para encontrar F (5):
![Árbol de la serie fibonacci](https://i.stack.imgur.com/59Rpw.png)
Para calcular F (5) tendrá que calcular muchas veces la misma F (i). Utilizando la recursividad:
```python
def fib(n)
{
if n <= 1:
return n
return fib(n-1) + fib(n-2);
}
```
Y a continuación se muestra la solución optimizada (utilizando DP).
Para F (5), esta solución generará las llamadas mostradas en la imagen de arriba, ejecutándose en O (2 ^ N).
Aquí hay una solución optimizada que utiliza DP y memoización:
```python
lookup = {1 : 1, 2 : 1} # Create a lookup-table (a map) inizialized with the first 2 Fibonacci's numbers
def fib(n)
{
if n in lookup: # If n is already computed
return n # Return the previous computed solution
else
lookup[n] = fib(n-1) + fib(n-2) # Else, do the recursion.
return lookup[n]
}
```
El almacenamiento en caché de las soluciones computadas en una tabla de búsqueda y la consulta antes de ir a la recursión permitirá que el programa tenga un tiempo de ejecución de O (N).
#### Más información:
[¿Qué es la programación dinámica en StackOverflow?](https://stackoverflow.com/questions/1065433/what-is-dynamic-programming) [Diferencia entre memoización y DP en StackOverflow](https://stackoverflow.com/questions/6184869/what-is-the-difference-between-memoization-and-dynamic-programming)