Čo je memoizácia?
sobes.tech AI
Odpoveď od AI
Memoizácia je technika optimalizácie používaná v programovaní na zrýchlenie vykonávania funkcií ukladaním výsledkov ich volaní s určitými vstupnými parametrami do cache.
Pri ďalšom volaní funkcie s rovnakými argumentmi ako predtým, funkcia neprepočítava výsledok znova, ale vráti uloženú (zapamätanú) hodnotu z cache.
Toto je obzvlášť efektívne pre funkcie, ktoré sú náročné na zdroje a majú deterministické správanie (funkcie, ktoré vždy vracajú rovnaký výsledok pre rovnaké vstupné údaje).
Výhody:
- Zrýchľuje vykonávanie náročných funkcií.
- Znižuje záťaž procesora tým, že sa vyhýba opakovaným výpočtom.
Nevýhody:
- Zvyšuje spotrebu pamäti na uloženie cache.
- Môže byť neefektívne pre funkcie, ktoré sú často volané s rôznymi argumentmi alebo menia svoje správanie.
Príklad v JavaScripte:
function fibonacci(n) { // Funkčné definovanie Fibonacciho čísel
if (n <= 1) {
return n;
}
return fibonacci(n - 1) + fibonacci(n - 2); // Rekurzívne volanie
}
// Memoizovaná verzia funkcie fibonacci
function memoizedFibonacci(n, cache = {}) {
if (n in cache) { // Kontrola, či je výsledok v cache
return cache[n];
}
if (n <= 1) {
return n;
}
// Výpočet a uloženie výsledku do cache
cache[n] = memoizedFibonacci(n - 1, cache) + memoizedFibonacci(n - 2, cache);
return cache[n];
}
// Porovnanie rýchlosti:
console.time('Bez memoizácie');
fibonacci(40);
console.timeEnd('Bez memoizácie'); // Výrazne dlhší čas
console.time('S memoizáciou');
memoizedFibonacci(40);
console.timeEnd('S memoizáciou'); // Výrazne kratší čas
V tomto príklade, bez memoizácie, funkcia fibonacci opakovane prepočítava rovnaké hodnoty. Memoizovaná verzia memoizedFibonacci ukladá vypočítané hodnoty do objektu cache, čo výrazne zrýchľuje ďalšie volania s rovnakými argumentmi.