Materias · 🏛️ Universidad y trabajo

Programación dinámica

Ejercicios resueltos de Programación dinámica paso a paso, con el error que más se comete en cada uno: Memoización, Problema de la mochila y más. Gratis y en español.

Preguntarle al tutor de Programación dinámica

Sin instalar nada. Puedes probar antes de crear cuenta.

Ejercicios resueltos de Programación dinámica

Resueltos paso a paso, como te los explicaría el tutor, y con el error que más se comete.

Memoización

La sucesión de Fibonacci se define como fib(n) = fib(n − 1) + fib(n − 2), con fib(0) = 0 y fib(1) = 1. Programada tal cual, ¿cuántas llamadas hace para calcular fib(6)? ¿Y con memoización?

Cómo se resuelve

  1. 1Escrita tal cual, la función se llama a sí misma dos veces y las dos ramas repiten trabajo: fib(4) se calcula dentro de fib(6) y otra vez, completo, dentro de fib(5).
  2. 2Para contar el árbol de llamadas se usa C(n) = 1 + C(n − 1) + C(n − 2), donde ese 1 es la llamada actual, con C(0) = C(1) = 1 porque son casos base y no llaman a nadie.
  3. 3C(2) = 1 + 1 + 1 = 3. C(3) = 1 + 3 + 1 = 5. C(4) = 1 + 5 + 3 = 9. C(5) = 1 + 9 + 5 = 15. C(6) = 1 + 15 + 9 = 25.
  4. 4De esas 25 llamadas, valores distintos solo hay 7: de fib(0) a fib(6). Todo lo demás es trabajo repetido, y crece de forma exponencial: fib(40) pasa de 300 millones de llamadas.
  5. 5La memoización guarda cada resultado en un diccionario apenas se calcula y, antes de calcular cualquier cosa, revisa si ya está guardado.
  6. 6Con eso cada valor se calcula una sola vez: 7 cálculos para fib(6) y 41 para fib(40). El costo baja de O(2ⁿ) a O(n).

Respuesta: Sin memoización son 25 llamadas para obtener fib(6) = 8. Con memoización se calculan solo los 7 valores distintos y el algoritmo pasa de exponencial a lineal.

El error de siempre: Creer que programación dinámica es «hacerlo con un bucle en vez de con recursión». Lo que la define es no repetir subproblemas, y eso se logra igual de arriba hacia abajo (recursión con memoización) que de abajo hacia arriba (llenando una tabla). El error práctico que más cuesta es crear el diccionario de memoria DENTRO de la función: así se vacía en cada llamada y no memoriza nada, aunque el código «se vea» bien. Tiene que vivir por fuera o pasarse como parámetro.

Problema de la mochila

Un vendedor va a una feria en Bogotá y solo puede cargar 10 kg. Tiene café (6 kg, $42.000 de ganancia), queso (5 kg, $32.000) y panela (5 kg, $28.000). No puede partir los productos. ¿Qué lleva para ganar lo máximo?

Cómo se resuelve

  1. 1Es una mochila 0/1: cada producto se lleva entero o no se lleva. Por eso hay que evaluar combinaciones y no basta con un criterio de «lo mejor primero».
  2. 2La recurrencia de la programación dinámica es M(i, c) = el mejor valor usando los primeros i productos con c kilos disponibles = el máximo entre M(i − 1, c), que es no llevar el producto i, y valorᵢ + M(i − 1, c − pesoᵢ), que es llevarlo si cabe.
  3. 3Con el café solo: con menos de 6 kg disponibles no cabe y el mejor valor es $0; con 6 kg o más el mejor valor es $42.000.
  4. 4Se agrega el queso (5 kg, $32.000). Con 5 kg disponibles el mejor pasa a ser $32.000, porque el café no cabe. Con 10 kg: no llevar el queso deja $42.000; llevarlo da 32.000 + M(solo café, 10 − 5 = 5 kg) = 32.000 + 0 = $32.000. Gana la opción de $42.000.
  5. 5Se agrega la panela (5 kg, $28.000). Con 10 kg: no llevarla deja los $42.000 del paso anterior; llevarla da 28.000 + M(café y queso, 10 − 5 = 5 kg), y en el paso anterior quedó anotado que con 5 kg lo mejor era el queso solo, $32.000.
  6. 6Llevarla da entonces 28.000 + 32.000 = $60.000, que supera los $42.000. El óptimo es queso + panela, 10 kg exactos.

Respuesta: Lleva queso y panela: 10 kg exactos y $60.000 de ganancia. Llevar el café deja la carga en 6 kg y solo $42.000.

El error de siempre: Aplicar el criterio ávido de «meter primero lo que más vale por kilo». El café rinde $7.000/kg, más que el queso ($6.400/kg) y la panela ($5.600/kg), así que el ávido lo mete de primero y después ya no cabe nada más: se queda en $42.000 y desperdicia 4 kg. Ese criterio solo es óptimo en la mochila fraccionaria, donde sí se puede llevar media libra de café. En la 0/1 hay que mirar la combinación completa, y para eso existe la tabla.

¿Y si tu ejercicio no es ninguno de estos?

No hace falta buscar el ejercicio exacto en internet. Trae el tuyo, o pide los que te falten.

Todo esto es gratis y sin instalar nada. Puedes probar antes de crear cuenta.

Lo que cubre

  • Memoización
  • Problema de la mochila

Preguntas que le puedes hacer

  • MemoizaciónExplícame «Memoización» con un ejemplo práctico y dime en qué suele equivocarse la gente.
  • Problema de la mochilaExplícame «Problema de la mochila» con un ejemplo práctico y dime en qué suele equivocarse la gente.

Cómo enseña este tutor

Es riguroso y completo: justifica cada paso y nombra el teorema, la norma o la buena práctica que está aplicando, para que puedas citarla en tu trabajo o en el parcial.

  • · Te muestra el camino completo, no solo el resultado.
  • · Si algo no te cuadra, te lo explica otra vez de otra manera.
  • · Con una foto de tu cuaderno te dice dónde está el error.
  • · Te arma quizzes de lo que acabas de ver para saber si de verdad quedó.

Otras materias de Universidad y trabajo