Sobes.tech
Middle

Mis on memoiseerimine?

sobes.tech AI

Vastus AI-lt

Mäemoosimine — see on optimeerimistehnika, mida kasutatakse programmeerimises funktsioonide täitmise kiirendamiseks nende väljakutsete tulemuste vahemällu salvestamise teel teatud sisendparameetritega.

Järgmise väljakutse korral sama argumentidega funktsioon ei arvuta tulemust uuesti, vaid tagastab salvestatud (mälu järgi meelde jäetud) väärtuse.

See on eriti tõhus ressursimahukate funktsioonide puhul, millel on deterministiline käitumine (funktsioonid, mis alati tagastavad sama tulemuse sama sisendandmete korral).

Eelised:

  • kiirendab ressursimahukate funktsioonide täitmist;
  • vähendab protsessori koormust, vältides korduvaid arvutusi;

Puudused:

  • suurendab mälu kasutust vahemälu salvestamiseks;
  • võib olla ebaefektiivne funktsioonide jaoks, mida kutsutakse sageli erinevate argumentidega või mis muudavad oma käitumist.

JavaScripti näide:

function fibonacci(n) { // Fibonacci arvude funktsiooni määratlus
  if (n <= 1) {
    return n;
  }
  return fibonacci(n - 1) + fibonacci(n - 2); // Rekursiivne väljakutse
}

// Mäemoositud versioon
function memoizedFibonacci(n, cache = {}) {
  if (n in cache) { // Kontrollib, kas tulemus on vahemälus
    return cache[n];
  }

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

  // Arvutab ja salvestab vahemällu
  cache[n] = memoizedFibonacci(n - 1, cache) + memoizedFibonacci(n - 2, cache);
  return cache[n];
}

// Täitmise kiiruse võrdlus:
console.time('Ilma mäemoosita');
fibonacci(40);
console.timeEnd('Ilma mäemoosita'); // Märkimisväärselt aeglasem

console.time('Mäemoosimisega');
memoizedFibonacci(40);
console.timeEnd('Mäemoosimisega'); // Märkimisväärselt kiirem

Selles näites arvutab fibonacci funktsioon ilma mäemoosimiseta sama väärtusi mitu korda. Mäemoositud versioon memoizedFibonacci salvestab arvutatud väärtused cache objekti, mis märkimisväärselt kiirendab järgmisi väljakutseid sama argumentidega.