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.