Sobes.tech
Middle

Wat is memoisatie?

sobes.tech AI

Antwoord van AI

Memoisatie is een optimalisatietechniek die in programmeren wordt gebruikt om de uitvoering van functies te versnellen door de resultaten van hun aanroepen met bepaalde invoerparameters op te slaan in een cache.

Bij een volgende oproep van de functie met dezelfde argumenten als eerder, berekent de functie het resultaat niet opnieuw, maar geeft de opgeslagen (geheugende) waarde uit de cache terug.

Dit is vooral effectief voor resource-intensieve functies met een deterministisch gedrag (functies die altijd hetzelfde resultaat teruggeven voor dezelfde invoergegevens).

Voordelen:

  • Versnelling van resource-intensieve functies.
  • Vermindering van de belasting van de processor door herhaalde berekeningen te vermijden.

Nadelen:

  • Toename van het geheugenverbruik voor het opslaan van de cache.
  • Kan niet efficiënt zijn voor functies die vaak worden aangeroepen met verschillende argumenten of die van gedrag veranderen.

Voorbeeld in JavaScript:

function fibonacci(n) { // Functionele definitie van Fibonacci-getallen
  if (n <= 1) {
    return n;
  }
  return fibonacci(n - 1) + fibonacci(n - 2); // Recursieve oproep
}

// Gememoiseerde versie van de fibonacci-functie
function memoizedFibonacci(n, cache = {}) {
  if (n in cache) { // Controleren of het resultaat in de cache staat
    return cache[n];
  }

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

  // Resultaat berekenen en opslaan in de cache
  cache[n] = memoizedFibonacci(n - 1, cache) + memoizedFibonacci(n - 2, cache);
  return cache[n];
}

// Snelheid vergelijken:
console.time('Zonder memoisatie');
fibonacci(40);
console.timeEnd('Zonder memoisatie'); // Veel langer

console.time('Met memoisatie');
memoizedFibonacci(40);
console.timeEnd('Met memoisatie'); // Veel korter

In dit voorbeeld berekent de fibonacci-functie zonder memoisatie meerdere keren dezelfde waarden. De gememoiseerde versie memoizedFibonacci slaat de berekende waarden op in het cache-object, waardoor de volgende aanroepen met dezelfde argumenten aanzienlijk worden versneld.