Sobes.tech
Middle

Mi az a memoizáció?

sobes.tech MI

Válasz az MI-től

A memorizáció egy olyan optimalizációs technika, amelyet a programozásban használnak a függvények végrehajtásának felgyorsítására az eredmények cache-elésével bizonyos bemeneti paraméterek esetén.

Amikor később ugyanazzal a bemeneti argumentummal hívják meg a függvényt, a függvény nem számítja újra az eredményt, hanem visszaadja a cache-ben tárolt (memorizált) értéket.

Ez különösen hatékony erőforrás-igényes, determinisztikus viselkedésű függvények esetén (olyan függvények, amelyek mindig ugyanazt az eredményt adják ugyanazokra a bemeneti adatokra).

Előnyök:

  • Gyorsítja az erőforrás-igényes függvényeket.
  • Csökkenti a processzor terhelését az ismételt számítások elkerülésével.

Hátrányok:

  • Növeli a memóriahasználatot a cache tárolásához.
  • Nem lehet hatékony olyan függvények esetén, amelyeket gyakran hívnak meg különböző argumentumokkal vagy viselkedésük változik.

JavaScript példa:

function fibonacci(n) { // Fibonacci számok funkcionális meghatározása
  if (n <= 1) {
    return n;
  }
  return fibonacci(n - 1) + fibonacci(n - 2); // Rekurzív hívás
}

// A fibonacci függvény memoizált változata
function memoizedFibonacci(n, cache = {}) {
  if (n in cache) { // Ellenőrizzük, hogy az eredmény benne van-e a cache-ben
    return cache[n];
  }

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

  // Eredmény kiszámítása és cache-be mentése
  cache[n] = memoizedFibonacci(n - 1, cache) + memoizedFibonacci(n - 2, cache);
  return cache[n];
}

// Sebesség összehasonlítás:
console.time('Memória nélkül');
fibonacci(40);
console.timeEnd('Memória nélkül'); // Jelentősen hosszabb idő

console.time('Memóriával');
memoizedFibonacci(40);
console.timeEnd('Memóriával'); // Jelentősen rövidebb idő

Ebben a példában, memória nélkül, a fibonacci függvény többször újra számolja ugyanazokat az értékeket. A memoizált változat memoizedFibonacci az eredményeket a cache objektumban tárolja, így jelentősen felgyorsítva a későbbi hívásokat ugyanazzal a bemenettel.