Sobes.tech
Middle

Č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.