Sobes.tech
Middle

Memoizatsiya nima?

sobes.tech AI

AIdan javob

Memoizatsiya - bu dasturlashda funksiyalarni bajarish tezligini oshirish uchun ishlatiladigan optimallashtirish texnikasi bo'lib, u ma'lum kirish parametrlariga asoslangan holda chaqiruv natijalarini keshga oladi.

Keyingi safar funksiyani avvalgi argumentlar bilan chaqirganda, funksiya natijasini qayta hisoblamaydi, balki saqlangan (eslab qolingan) qiymatni cache-dan qaytaradi.

Bu ayniqsa resurslarni ko'p sarflaydigan va deterministik xulq-atvorga ega funksiyalar uchun samarali (masalan, har doim bir xil natijani qaytaradigan funksiyalar).

Afzalliklar:

  • Resurslarni ko'p sarflaydigan funksiyalarni tezlashtirish.
  • Takroriy hisoblashlarni oldini olish orqali protsessor yukini kamaytirish.

Kamchiliklar:

  • Cache saqlash uchun xotira iste'molini oshiradi.
  • Ko'pincha turli argumentlar bilan chaqiriladigan yoki xulq-atvorini o'zgartiradigan funksiyalar uchun samarali bo'lmasligi mumkin.

JavaScript misoli:

function fibonacci(n) { // Fibonacci sonlarini funksional tarzda aniqlash
  if (n <= 1) {
    return n;
  }
  return fibonacci(n - 1) + fibonacci(n - 2); // Rekursiv chaqiruv
}

// Fibonacci funksiyasining memoizatsiyalangan versiyasi
function memoizedFibonacci(n, cache = {}) {
  if (n in cache) { // Natija cacheda borligini tekshirish
    return cache[n];
  }

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

  // Natijani hisoblab, cachega yozish
  cache[n] = memoizedFibonacci(n - 1, cache) + memoizedFibonacci(n - 2, cache);
  return cache[n];
}

// Ishlash tezligini taqqoslash:
console.time('Memoizatsiya qilinmagan');
fibonacci(40);
console.timeEnd('Memoizatsiya qilinmagan'); // Ancha uzoqroq vaqt

console.time('Memoizatsiya bilan');
memoizedFibonacci(40);
console.timeEnd('Memoizatsiya bilan'); // Ancha qisqa vaqt

Ushbu misolda, memoizatsiya qilinmagan holda, fibonacci funksiyasi bir xil qiymatlarni ko'p marta hisoblaydi. Memoizatsiyalangan memoizedFibonacci qiymatlarni cache obyekti ichida saqlaydi, bu esa keyingi chaqiruvlarni sezilarli darajada tezlashtiradi.