Sobes.tech
Middle

Cos'è la memorizzazione?

sobes.tech AI

Risposta dell'AI

La memorizzazione è una tecnica di ottimizzazione utilizzata in programmazione per accelerare l'esecuzione delle funzioni memorizzando i risultati delle loro chiamate con determinati parametri di input.

Quando si richiama successivamente la funzione con gli stessi argomenti usati in precedenza, la funzione non ricalcola il risultato, ma restituisce il valore memorizzato nella cache.

Questo è particolarmente efficace per funzioni che consumano molte risorse e hanno un comportamento deterministico (funzioni che restituiscono sempre lo stesso risultato per gli stessi dati di input).

Vantaggi:

  • Accelerazione delle funzioni che consumano molte risorse.
  • Riduzione del carico sulla CPU evitando calcoli ripetuti.

Svantaggi:

  • Aumento dell'uso della memoria per memorizzare la cache.
  • Potrebbe non essere efficiente per funzioni chiamate frequentemente con argomenti diversi o che cambiano comportamento.

Esempio in JavaScript:

function fibonacci(n) { // Definizione funzionale dei numeri di Fibonacci
  if (n <= 1) {
    return n;
  }
  return fibonacci(n - 1) + fibonacci(n - 2); // Chiamata ricorsiva
}

// Versione memorizzata della funzione fibonacci
function memoizedFibonacci(n, cache = {}) {
  if (n in cache) { // Verifica se il risultato è in cache
    return cache[n];
  }

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

  // Calcola e salva il risultato in cache
  cache[n] = memoizedFibonacci(n - 1, cache) + memoizedFibonacci(n - 2, cache);
  return cache[n];
}

// Confronto di velocità:
console.time('Senza memorizzazione');
fibonacci(40);
console.timeEnd('Senza memorizzazione'); // Tempo molto più lungo

console.time('Con memorizzazione');
memoizedFibonacci(40);
console.timeEnd('Con memorizzazione'); // Tempo molto più breve

In questo esempio, senza memorizzazione, la funzione fibonacci ricalcola più volte gli stessi valori. La versione memorizzata memoizedFibonacci salva i valori calcolati nell'oggetto cache, accelerando notevolmente le chiamate successive con gli stessi argomenti.