Sobes.tech
Middle

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.