Sobes.tech
Middle

Ի՞նչ է մեմոիզացիան։

sobes.tech AI

Պատասխան AI-ից

Մեմոիզացիան՝ դա օպտիմալացման տեխնիկա է, որը օգտագործվում է ծրագրավորման մեջ՝ գործառույթների կատարման արագացման համար՝ արդյունքների պահպանումով նրանց կանչելու ժամանակ որոշակի մուտքային պարամետրերով:

Հաջորդ անգամ, երբ ֆունկցիան կանչվում է նույն արգումենտներով, ինչ նախորդ անգամ, ֆունկցիան չի հաշվարկում արդյունքը նորից, այլ վերադարձնում է պահած (հիշեցված) արժեքը պահոցից:

Սա հատկապես արդյունավետ է ռեսուրսային ծանր ֆունկցիաների համար, որոնք ունեն որոշակի դետերմինիստիկ վարքագիծ (ֆունկցիաները, որոնք միշտ նույն արդյունքը են վերադարձնում նույն մուտքային տվյալների համար):

Առավելություններ:

  • արագացնում է ռեսուրսային ծանր ֆունկցիաների կատարմանը;
  • նվազեցնում է պրոցեսորի բեռը՝ կրկնակի հաշվարկներից խուսափելով:

Անբարենպաստություններ:

  • ավելացնում է հիշողության սպառումը պահոցը պահելու համար;
  • կարող է լինել անարդյունավետ այն ֆունկցիաների համար, որոնք հաճախ կանչվում են տարբեր արգումենտներով կամ փոխում են իրենց վարքագիծը:

JavaScript-ի օրինակ:

function fibonacci(n) { // Ֆիբոնաչի թվերի ֆունկցիոնալ սահմանում
  if (n <= 1) {
    return n;
  }
  return fibonacci(n - 1) + fibonacci(n - 2); // Ռեկուրսիվ կանչ
}

// Ֆունկցիայի մեմոիզացված տարբերակը
function memoizedFibonacci(n, cache = {}) {
  if (n in cache) { // Ստուգում, կա արդյոք արդյունքը պահոցում
    return cache[n];
  }

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

  // Հաշվարկում և արդյունքը պահպանում է պահոցում
  cache[n] = memoizedFibonacci(n - 1, cache) + memoizedFibonacci(n - 2, cache);
  return cache[n];
}

// Կատարման արագության համեմատություն:
console.time('Մեմոիզացիայով');
fibonacci(40);
console.timeEnd('Մեմոիզացիայով'); // Արժեքը զգալիորեն մեծ է

console.time('Մեմոիզացիայով');
memoizedFibonacci(40);
console.timeEnd('Մեմոիզացիայով'); // Արժեքը զգալիորեն փոքր է

Այս օրինակով, առանց մեմոիզացիայի, fibonacci ֆունկցիան կրկնօրինակում է նույն արժեքները բազմիցս: Մեմոիզացված տարբերակը memoizedFibonacci պահպանում է հաշվարկված արժեքները cache օբյեկտում, ինչը զգալիորեն արագացնում է հաջորդ կանչերը նույն արգումենտներով։