यदि आप सिर्फ अपने पुनरावर्ती एल्गोरिथ्म को गति देना चाहते हैं, तो मेमोरेशन पर्याप्त हो सकता है। यह फ़ंक्शन कॉल के परिणामों को संग्रहीत करने की तकनीक है ताकि भविष्य में समान मापदंडों के साथ कॉल केवल परिणाम का पुन: उपयोग कर सकें। यह लागू है अगर (और केवल अगर) आपके फ़ंक्शन
- साइड इफेक्ट नहीं है और
- केवल इसके मापदंडों पर निर्भर करता है (अर्थात कुछ राज्य पर नहीं)।
यह आपको समय की बचत करेगा यदि (और केवल अगर) फ़ंक्शन को एक ही पैरामीटर के साथ बार-बार कहा जाता है। लोकप्रिय उदाहरणों में फाइबोनैचि संख्याओं की पुनरावर्ती परिभाषा शामिल है, अर्थात्
च( 0 )च( 1 )च( n + 2 )= 0= 1= च( एन + 1 ) + एफ( एन ), एन ≥ 0
जब भोलेपन से मूल्यांकन किया जाता है, चच( एन )च( n + 1 )
ध्यान दें कि, इसके विपरीत, मर्ज एल्गोरिदम के लिए बेकार के बगल में है जैसे मर्ज सॉर्ट: आमतौर पर कुछ (यदि कोई हो) आंशिक सूचियां समान हैं, और समानता चेक महंगे हैं (सॉर्टिंग केवल थोड़ा अधिक महंगा है!)।
व्यावहारिक क्रियान्वयन में, आप परिणामों को कैसे संग्रहीत करते हैं, यह प्रदर्शन के लिए बहुत अच्छा है। हैश टेबल का उपयोग करना स्पष्ट विकल्प हो सकता है, लेकिन स्थानीयता को तोड़ सकता है। यदि आपके पैरामीटर गैर-नकारात्मक पूर्णांक हैं, तो सरणियाँ एक प्राकृतिक विकल्प हैं लेकिन यदि आप केवल कुछ प्रविष्टियों का उपयोग करते हैं तो भारी मेमोरी ओवरहेड हो सकती है। इसलिए, प्रभाव और लागत के बीच का समझौता एक व्यापार है; क्या यह भुगतान करता है यह आपके विशिष्ट परिदृश्य पर निर्भर करता है।
डायनेमिक प्रोग्रामिंग एक पूरी तरह से अन्य जानवर है। यह संपत्ति के साथ समस्याओं पर लागू होता है
- यह उपप्रकारों में विभाजित किया जा सकता है (शायद एक से अधिक तरीकों से),
- उन उपप्रकारों को स्वतंत्र रूप से हल किया जा सकता है,
- (इष्टतम) उन उपप्रकारों के समाधानों को मूल समस्या के (इष्टतम) समाधानों के साथ जोड़ा जा सकता है और
- उप-उत्पाद में एक ही गुण है (या तुच्छ हैं)।
यह आमतौर पर (स्पष्ट रूप से) निहित है जब लोग बेलमैन के सिद्धांत को इष्टतमता का आह्वान करते हैं ।
अब, यह केवल उन समस्याओं के एक वर्ग का वर्णन करता है जिन्हें एक निश्चित प्रकार की पुनरावृत्ति द्वारा व्यक्त किया जा सकता है। उन का मूल्यांकन (अक्सर) कुशल होता है क्योंकि मेमॉज़ेशन को महान प्रभाव (ऊपर देखें) पर लागू किया जा सकता है; आमतौर पर, छोटे उपप्रकार कई बड़ी समस्याओं के हिस्से के रूप में होते हैं। लोकप्रिय उदाहरणों में संपादित दूरी और बेलमैन-फोर्ड एल्गोरिदम शामिल हैं ।