Sobes.tech
Middle

¿Qué es la memorización?

sobes.tech AI

Respuesta de la IA

La memorización es una técnica de optimización utilizada en programación para acelerar la ejecución de funciones mediante el almacenamiento en caché de los resultados de sus llamadas con ciertos parámetros de entrada.

Al llamar a la función posteriormente con los mismos argumentos que se usaron anteriormente, la función no vuelve a calcular el resultado, sino que devuelve el valor almacenado en caché.

Esto es especialmente efectivo para funciones que consumen muchos recursos y tienen un comportamiento determinista (funciones que siempre devuelven el mismo resultado para los mismos datos de entrada).

Ventajas:

  • Aceleración de funciones que consumen muchos recursos.
  • Reducción de la carga en el procesador al evitar cálculos repetidos.

Desventajas:

  • Aumento del uso de memoria para almacenar la caché.
  • Puede no ser eficiente para funciones que se llaman con frecuencia con argumentos diferentes o que cambian su comportamiento.

Ejemplo en JavaScript:

function fibonacci(n) { // Definición funcional de los números de Fibonacci
  if (n <= 1) {
    return n;
  }
  return fibonacci(n - 1) + fibonacci(n - 2); // Llamada recursiva
}

// Versión memorizada de la función fibonacci
function memoizedFibonacci(n, cache = {}) {
  if (n in cache) { // Verifica si el resultado ya está en la caché
    return cache[n];
  }

  if (n <= 1) {
    return n;
  }

  // Calcula y guarda el resultado en la caché
  cache[n] = memoizedFibonacci(n - 1, cache) + memoizedFibonacci(n - 2, cache);
  return cache[n];
}

// Comparación de velocidad de ejecución:
console.time('Sin memorización');
fibonacci(40);
console.timeEnd('Sin memorización'); // Tiempo mucho mayor

console.time('Con memorización');
memoizedFibonacci(40);
console.timeEnd('Con memorización'); // Tiempo mucho menor

En este ejemplo, sin memorización, la función fibonacci recalcula los mismos valores varias veces. La versión memorizada memoizedFibonacci guarda los valores calculados en el objeto cache, acelerando significativamente las llamadas posteriores con los mismos argumentos.