მემოიზაცია რა არის?
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 ობიექტში, რაც მნიშვნელოვნად აჩქარებს შემდეგი გამოძახებებს იგივე არგუმენტებით.