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.