Sobes.tech
Middle

Ce este memorarea?

sobes.tech AI

Răspuns de la AI

Memorarea este o tehnică de optimizare utilizată în programare pentru a accelera executarea funcțiilor prin stocarea rezultatelor apelurilor lor cu anumți parametri de intrare.

La următorul apel al funcției cu aceiași argumente ca anterior, funcția nu recalculază rezultatul, ci returnează valoarea salvată (memorată) din cache.

Aceasta este deosebit de eficientă pentru funcții care consumă multe resurse și au un comportament determinist (funcții care întotdeauna returnează același rezultat pentru aceleași date de intrare).

Avantaje:

  • Accelerarea funcțiilor care consumă multe resurse.
  • Reducerea încărcării procesorului prin evitarea recalculărilor.

Dezavantaje:

  • Creșterea consumului de memorie pentru stocarea cache-ului.
  • Poate fi ineficient pentru funcții care sunt apelate frecvent cu argumente diferite sau care își schimbă comportamentul.

Exemplu în JavaScript:

function fibonacci(n) { // Definirea funcțională a numerelor Fibonacci
  if (n <= 1) {
    return n;
  }
  return fibonacci(n - 1) + fibonacci(n - 2); // Apel recursiv
}

// Versiunea memorată a funcției fibonacci
function memoizedFibonacci(n, cache = {}) {
  if (n in cache) { // Verificăm dacă rezultatul este în cache
    return cache[n];
  }

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

  // Calculăm și stocăm rezultatul în cache
  cache[n] = memoizedFibonacci(n - 1, cache) + memoizedFibonacci(n - 2, cache);
  return cache[n];
}

// Compararea vitezei de execuție:
console.time('Fără memorare');
fibonacci(40);
console.timeEnd('Fără memorare'); // Timp mult mai lung

console.time('Cu memorare');
memoizedFibonacci(40);
console.timeEnd('Cu memorare'); // Timp mult mai scurt

În acest exemplu, fără memorare, funcția fibonacci recalculă valorile aceleași de mai multe ori. Versiunea memorată memoizedFibonacci salvează valorile calculate în obiectul cache, accelerând semnificativ apelurile ulterioare cu aceiași argumente.