Ի՞նչ է մեմոիզացիան։
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 օբյեկտում, ինչը զգալիորեն արագացնում է հաջորդ կանչերը նույն արգումենտներով։