Kas ir memoizācija?
sobes.tech AI
Atbilde no AI
Mēmoizācija — tā ir optimizācijas tehnika, kas tiek izmantota programmēšanā, lai paātrinātu funkciju izpildi, kešojot to izsaukumu rezultātus ar noteiktiem ievades parametriem.
Nākamreiz, izsaucot funkciju ar tiem pašiem argumentiem, tā neizskaita rezultātu no jauna, bet atgriež saglabāto (atmiņā iegaumēto) vērtību.
Tas ir īpaši efektīvi resursu intensīvām funkcijām ar deterministisku uzvedību (funkcijas, kas vienmēr atgriež to pašu rezultātu ar tiem pašiem ievades datiem).
Priekšrocības:
- paātrina resursu intensīvu funkciju izpildi;
- samazina procesora slodzi, izvairoties no atkārtotiem aprēķiniem;
Trūkumi:
- palielina atmiņas patēriņu kešatmiņai;
- var būt neefektīvi funkcijām, kuras bieži tiek izsauktas ar dažādiem argumentiem vai maina savu uzvedību.
JavaScript piemērs:
function fibonacci(n) { // Fibonacci skaitļu funkcijas definīcija
if (n <= 1) {
return n;
}
return fibonacci(n - 1) + fibonacci(n - 2); // Rekursīvs izsaukums
}
// Mēmoizēta funkcijas versija
function memoizedFibonacci(n, cache = {}) {
if (n in cache) { // Pārbauda, vai rezultāts ir kešatmiņā
return cache[n];
}
if (n <= 1) {
return n;
}
// Aprēķina un saglabā kešatmiņā
cache[n] = memoizedFibonacci(n - 1, cache) + memoizedFibonacci(n - 2, cache);
return cache[n];
}
// Izpildes ātruma salīdzinājums:
console.time('Bez mēmoizācijas');
fibonacci(40);
console.timeEnd('Bez mēmoizācijas'); // Krietni ilgāk
console.time('Ar mēmoizāciju');
memoizedFibonacci(40);
console.timeEnd('Ar mēmoizāciju'); // Krietni īsāks
Šajā piemērā, bez mēmoizācijas, funkcija fibonacci atkārtoti aprēķina vienas un tās pašas vērtības. Mēmoizētā versija memoizedFibonacci saglabā aprēķinātās vērtības cache objektā, ievērojami paātrinot nākamos izsaukumus ar tiem pašiem argumentiem.