0 امتیاز
قبل در برنامه نویسی توسط (1.1هزار امتیاز)

Memoization در برنامه نویسی و کامپیوتر چه مفهوم و کاربردی دارد؟

1 پاسخ

+1 امتیاز
قبل توسط (741 امتیاز)
ویرایش شده قبل توسط

اصطلاح مموایز کردن توسط Donald Michie در سال 1968 ابداع شده بود و از کلمه لاتین memorandum (به یاد داشتن) برگرفته شده است و بنابراین دربردارنده ی معنی برگرداندن (نتایج ) یک تابع به چیزی است تا به یاد سپرده شود. در حالی که مموایز کردن ممکن است با به خاطر سپاری اشتباه گرفته شود (به خاطر به اشتراک گذاری ریشه مشترک)، مموایز کردن معنی خاصی در محاسبات دارد. یک تابع مموایز "به خاطر می سپارد" نتایجی را که با مجموعه هایی از ورودی های خاص مرتبط است. فراخوانی های بعدی با ورودی های به خاطر سپرده شده نتایج را به جای محاسبه مجدد آن بر میگرداند، بنابراین حذف هزینه اولیه فراخوانی با پارامترهای داده شده همه به جز اولین فراخوانی با آن پارامترها به تابع تحمیل می شود .مجموعه های به خاطر سپرده شده مرتبط ممکن است از یک مجموعه بااندازه ثابت باشند که توسط الگوریتم های جایگزینی از یک مجموعه ثابت کنترل شوند که بستگی به طبیعت تابع و کاربردهای آن دارد.یک تابع می تواند مموایز شود  اگر به طور ارجاعی شفاف باشد. که به این معنی است که، فراخوانی تابع تاثیر مشابهی با زمانی که فراخوانی تابع با مقدار بازگشتی از آن جایگزین شود دارد.(اگرچه،موارد استثناء خاصی نیز برای این محدودیت وجود دارد) برخلاف مرتبط بودن با جداول مراجعه، چون مموایزکردن اغلب از چنین جداولی در اجرایش استفاده می کند، مموایز کردن فضای کش اش را با نتایج شفاف در پرواز همان طور که مورد نیاز است، به جای از قبل فرستادن،اشغال می کند.یک نسخه مموایز شده از تابع فاکتوریل به صورت پایین است: 

function factorial (n is a non-negative integer )
       if n is 0 then
        return 1 [by the convention that 0! = 1]
    else if n is in lookup-table then
        return lookup-table-value-for-n
     else
        let x = factorial(n – 1) times n [recursively invoke factorial
                                         with the parameter 1 less than n]
        store x in lookup-table in the nth slot [remember the result of n! for later]
        return x
    end if
end function

مموایز کردن یک وسیله برای پایین آوردن هزینه زمان تابع در عوض هزینه فضااست. به این معنی که توابع مموایز شده برای سرعت در عوض استفاده ی بیشترازحافظه کامپیوتر بهینه می شوند. "هزینه"فضا/زمان الگوریتم ها اسم خاصی در محاسبات به نام: پیچیدگی محاسباتی دارند. همه ی توابع یک پیچیدگی محاسباتی در زمان (یعنی: زمانی که برای اجرا لازم دارند) و در فضا دارند.

سوالات مشابه

0 امتیاز
0 پاسخ 71 بازدید
سوال شده 1 ماه قبل در برنامه نویسی توسط ghazalo (0 امتیاز)
0 امتیاز
1 پاسخ 130 بازدید
...