Sobes.tech
Middle

Co je to memoizace?

sobes.tech AI

Odpověď od AI

Memoizace je technika optimalizace používaná v programování ke zrychlení vykonávání funkcí ukládáním výsledků jejich volání s určitými vstupními parametry do cache.

Při následném volání funkce se stejnými argumenty, které byly použity dříve, funkce neprovádí výpočet znovu, ale vrací uloženou (zapamatovanou) hodnotu z cache.

To je obzvláště efektivní pro funkce, které jsou náročné na zdroje a mají deterministické chování (funkce, které vždy vrací stejný výsledek pro stejné vstupní údaje).

Výhody:

  • Zrychlení náročných funkcí.
  • Snížení zátěže procesoru tím, že se vyhýbá opakovaným výpočtům.

Nevýhody:

  • Zvýšení spotřeby paměti pro uložení cache.
  • Může být neefektivní pro funkce, které jsou často volány s různými argumenty nebo mění své chování.

Příklad v JavaScriptu:

function fibonacci(n) { // Funkční definice Fibonacciho čísel
  if (n <= 1) {
    return n;
  }
  return fibonacci(n - 1) + fibonacci(n - 2); // Rekurzivní volání
}

// Memoizovaná verze funkce fibonacci
function memoizedFibonacci(n, cache = {}) {
  if (n in cache) { // Kontrola, jestli je výsledek v cache
    return cache[n];
  }

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

  // Výpočet a uložení výsledku do cache
  cache[n] = memoizedFibonacci(n - 1, cache) + memoizedFibonacci(n - 2, cache);
  return cache[n];
}

// Porovnání rychlosti:
console.time('Bez memoizace');
fibonacci(40);
console.timeEnd('Bez memoizace'); // Výrazně delší čas

console.time('S memoizací');
memoizedFibonacci(40);
console.timeEnd('S memoizací'); // Výrazně kratší čas

V tomto příkladu, bez memoizace, funkce fibonacci opakovaně počítá stejné hodnoty. Memoizovaná verze memoizedFibonacci ukládá vypočtené hodnoty do objektu cache, což výrazně urychluje následné volání se stejnými argumenty.