शुरुआती के लिए विकल्प ट्रेडिंग

फाइबोनैचि में मेमोइज़ेशन का उपयोग कैसे किया जाता है

फाइबोनैचि में मेमोइज़ेशन का उपयोग कैसे किया जाता है
फोटो @steffipereira द्वारा

फाइबोनैचि में मेमोइज़ेशन का उपयोग कैसे किया जाता है

कंप्यूटिंग में, संस्मरण या संस्मरण एक अनुकूलन तकनीक है जिसका उपयोग मुख्य रूप से महंगे फ़ंक्शन कॉल के परिणामों को संग्रहीत करके और उसी इनपुट के फिर से होने पर कैश्ड परिणाम लौटाकर कंप्यूटर प्रोग्राम को गति देने के लिए किया जाता है।

संस्मरण क्या है इसका एक उदाहरण दीजिए ?

इसलिए संस्मरण यह सुनिश्चित करता है कि डेटा संरचना (आमतौर पर हैशटेबल या हैश मैप या ऐरे) में परिणाम संग्रहीत करके एक ही इनपुट के लिए विधि एक से अधिक बार निष्पादित नहीं होती है। आइए फिबोनाची उदाहरण की मदद से समझते हैं। यहाँ नमूना फाइबोनैचि श्रृंखला है। 0,1,1,2,3,5,8,13,21,34,55,89,144..

DP में Memoization क्या है?

संस्मरण टॉप-डाउन तकनीक है (दी गई समस्या को तोड़कर हल करना शुरू करें) और डायनेमिक प्रोग्रामिंग एक बॉटम-अप तकनीक है (छोटी उप-समस्या से हल करना शुरू करें, दी गई समस्या की ओर) डीपी से शुरू करके समाधान ढूंढता है बेस केस (केस) और ऊपर की ओर अपना काम करता है।

संस्मरण का उपयोग कहाँ किया जाता है?

संस्मरण का उपयोग कब करें

  1. जब कोई कार्य शुद्ध होता है। कॉल किए जाने पर एक शुद्ध फ़ंक्शन हमेशा वही मान देता है।
  2. भारी कंप्यूटिंग कार्य।
  3. रिमोट एपीआई कॉल।
  4. एक फ़ंक्शन जो पुनरावर्ती इनपुट मानों के साथ स्वयं को याद करता है, अर्थात, पुनरावर्ती फ़ंक्शन।

आप एक ज्ञापन कैसे लागू करते हैं?

अब, इस फ़ंक्शन को याद रखने के लिए हमें केवल तीन चीज़ें करने की आवश्यकता है:

  1. चरण 1: बाहरी फ़ंक्शन के दायरे में हैश टेबल/कैश को तुरंत चालू करें।
  2. चरण 2: कैश में दिया गया मान मौजूद है या नहीं, यह देखने के लिए आंतरिक फ़ंक्शन में बेस केस से पहले एक चेक जोड़ें, और यदि ऐसा है तो उसे वापस कर दें।

संस्मरण जावास्क्रिप्ट क्या है?

संस्मरण पहले से निष्पादित संगणनाओं को संग्रहीत करने की एक टॉप-डाउन, डेप्थ-फर्स्ट, ऑप्टिमाइज़ेशन तकनीक है। जब भी प्रोग्राम को इन गणनाओं के परिणाम की आवश्यकता होगी, प्रोग्राम को उस गणना को फिर से निष्पादित नहीं करना पड़ेगा। इसके बजाय, यह पहले से निष्पादित गणना के परिणाम का पुन: उपयोग करेगा।

प्रतिक्रिया ज्ञापन क्या है?

प्रतिक्रिया। ज्ञापन एक उच्च क्रम घटक है। यदि आपका घटक समान प्रॉप्स दिए गए समान परिणाम प्रस्तुत करता है, तो आप इसे रिएक्ट करने के लिए कॉल में लपेट सकते हैं। परिणाम को याद करके कुछ मामलों में प्रदर्शन को बढ़ावा देने के लिए ज्ञापन। इसका मतलब है कि रिएक्ट घटक को प्रस्तुत करना छोड़ देगा, और अंतिम प्रदान किए गए परिणाम का पुन: उपयोग करेगा।

आप संस्मरण कैसे करते हैं?

क्या मेमोइज़ेशन डीपी के समान है?

संस्मरण शब्द "याद रखना" या "याद रखना" शब्द से आया है। डायनेमिक प्रोग्रामिंग (डीपी) का अर्थ है समान छोटी ओवरलैपिंग उप-समस्याओं के समाधान को जोड़कर समस्याओं को पुनरावर्ती रूप से हल करना, आमतौर पर किसी प्रकार के पुनरावृत्ति संबंधों का उपयोग करना।

संस्मरण क्यों उपयोगी है?

इसका मतलब है कि फ़ंक्शन निष्पादन उत्परिवर्तित नहीं होता है। जब एक निश्चित इनपुट के साथ कॉल किया जाता है, तो फ़ंक्शन को कितनी बार कॉल किया जाएगा, इस पर ध्यान दिए बिना हमेशा वही मान लौटाना चाहिए। मान लें कि आपके पास एक ऐसा फ़ंक्शन है जो एक नहीं, दो बार नहीं, बल्कि कई बार निष्पादित करता है, तो उस फ़ंक्शन के परिणाम को याद क्यों न करें।

संस्मरण का क्या लाभ है?

मेमोइज़ेशन यह सुनिश्चित करता है कि दिए गए इनपुट (आमतौर पर हैश मैप में) के परिणामों का रिकॉर्ड रखकर एक ही इनपुट के लिए एक से अधिक बार एक विधि नहीं चलती है। किसी भी गणना के परिणामों को मेमो में सहेजें।

फाइबोनैचि में मेमोइज़ेशन का उपयोग कैसे किया जाता है

आप फाइबोनैचि कोड का अनुकूलन कैसे करते हैं?

फाइबोनैचि के लिए एल्गोरिदम क्या है?

फाइबोनैचि श्रृंखला को संख्याओं के अनुक्रम के रूप में परिभाषित किया जाता है जिसमें अनुक्रम के चयनित प्रारंभिक बिंदु के आधार पर पहली दो संख्याएं 1 और 1, या 0 और 1 हैं, और प्रत्येक बाद की संख्या पिछले दो का योग है।

मैं फाइबोनैचि को तेज कैसे बना सकता हूं?

सारांश: दो तेज़ फाइबोनैचि एल्गोरिदम मैट्रिक्स घातांक और तेज़ दोहरीकरण हैं, जिनमें से प्रत्येक में (logn) बिगिंट अंकगणितीय संक्रियाओं की एक स्पर्शोन्मुख जटिलता है। दोनों एल्गोरिदम गुणन का उपयोग करते हैं, इसलिए जब करात्सुबा गुणन का उपयोग किया जाता है तो वे और भी तेज हो जाते हैं।

फाइबोनैचि में मेमोइज़ेशन का उपयोग कैसे किया जाता है?

तर्कों की एक सरणी को पारित करने के फाइबोनैचि में मेमोइज़ेशन का उपयोग कैसे किया जाता है लिए हमें लागू () विधि का उपयोग करने की आवश्यकता है। हमारी फाइबोनैचि समस्या के लिए मेमोइज़ फ़ंक्शन का उपयोग करने के लिए हम केवल मेमोइज़ फ़ंक्शन कॉल को एक स्थिरांक के रूप में संग्रहीत करते हैं फाइबोनैचि में मेमोइज़ेशन का उपयोग कैसे किया जाता है और तर्कों को पास करते हैं जो अन्यथा इस स्थिरांक को फ़ाइब को पास कर दिए जाएंगे। कॉन्स्ट फास्टफिब = मेमोइज (फाइब);

आपको कैसे पता चलेगा कि कोई संख्या फाइबोनैचि है या नहीं?

एक संख्या फाइबोनैचि है यदि और केवल यदि एक या दोनों (5*n2 + 4) या (5*n2 – 4) एक पूर्ण वर्ग है (स्रोत: विकी)। इस अवधारणा पर आधारित एक सरल कार्यक्रम निम्नलिखित है।

फिबोनाची श्रृंखला के लिए रिकर्सन का उपयोग कैसे किया जा सकता है?

जावा फाइबोनैचि रिकर्सन फ़ंक्शन एक इनपुट नंबर लेता है। 0, 1, 2 के लिए जाँच करता है और तदनुसार 0, 1, 1 लौटाता है क्योंकि जावा में फाइबोनैचि अनुक्रम 0, 1, 1 से शुरू होता है। जब इनपुट n> = 3 होता है, तो फ़ंक्शन स्वयं को पुनरावर्ती रूप से कॉल करेगा। कॉल दो बार की जाती है।

50वीं फिबोनाची संख्या क्या है?

12,586,269,025
50वीं फाइबोनैचि संख्या 12,586,269,025 है। हालांकि हम फाइबोनैचि अनुक्रम के पहले 50 शब्दों को खोजने के कठिन कार्य से गुजर सकते हैं …

इसे संस्मरण क्यों कहा जाता है?

शब्द "संस्मरण" 1968 में डोनाल्ड मिची द्वारा गढ़ा गया था और लैटिन शब्द "मेमोरेंडम" ("याद रखा जाना") से लिया गया है, जिसे आमतौर पर अमेरिकी अंग्रेजी में "मेमो" के रूप में छोटा किया जाता है, और इस प्रकार "मोड़" का अर्थ होता है। के परिणाम] याद रखने के लिए कुछ में एक समारोह"।

फाइबोनैचि में मेमोइज़ेशन का उपयोग कैसे किया जाता है

फाइबोनैचि में संस्मरण का उपयोग कैसे किया जाता है?

तर्कों की एक सरणी को पारित करने के लिए हमें लागू () विधि का उपयोग करने की आवश्यकता है। हमारी फाइबोनैचि समस्या के लिए मेमोइज़ फ़ंक्शन का उपयोग करने के लिए हम केवल मेमोइज़ फ़ंक्शन कॉल को एक स्थिरांक के रूप में संग्रहीत करते हैं और तर्कों को पास करते हैं जो अन्यथा इस स्थिरांक को फ़ाइब को पारित कर दिया जाएगा। कॉन्स्ट फास्टफिब = मेमोइज (फाइब);

डायनेमिक प्रोग्रामिंग में मेमोइज़ेशन क्या है एक उदाहरण दें?

संस्मरण एक अनुकूलन प्रक्रिया है। सरल शब्दों में, हम उप-समस्याओं के समाधान के मध्यवर्ती परिणामों को संग्रहीत करते हैं, जिससे हमें समग्र समाधान की गणना में तेजी लाने की अनुमति मिलती है।

कोडिंग में संस्मरण क्या है?

कंप्यूटिंग में, संस्मरण या संस्मरण एक अनुकूलन तकनीक है जिसका उपयोग मुख्य रूप से महंगे फ़ंक्शन कॉल के परिणामों को संग्रहीत करके और उसी इनपुट के फिर से होने पर कैश्ड परिणाम लौटाकर कंप्यूटर प्रोग्राम को गति देने के लिए किया जाता है।

संस्मरण और कैशिंग में क्या अंतर है?

संस्मरण कैशिंग का एक विशिष्ट रूप है जिसमें किसी फ़ंक्शन के रिटर्न मान को उसके मापदंडों के आधार पर कैशिंग करना शामिल है। कैशिंग एक अधिक सामान्य शब्द है; उदाहरण के लिए, HTTP कैशिंग कैशिंग है लेकिन संस्मरण नहीं है।

कोडिंग में मेमोइज़ेशन क्या है?

मेमोइज़ फंक्शन क्या है?

मेमोइज़ेशन की अवधारणा के साथ, जब किसी फ़ंक्शन को कॉल किया जाता है, तो उसका परिणाम अस्थायी रूप फाइबोनैचि में मेमोइज़ेशन का उपयोग कैसे किया जाता है से संग्रहीत किया जाएगा। इस मामले में, हम कह सकते हैं कि मेमोइज़ेशन महंगे फ़ंक्शन कॉल के परिणामों को कैशिंग करने की एक तकनीक है जो कंप्यूटर प्रोग्राम को तेज करने के लिए कैश्ड परिणाम लौटाता है जब वही इनपुट फिर से होता है।

मेमोइज़ का क्या अर्थ है?

कंप्यूटिंग में, संस्मरण या संस्मरण एक अनुकूलन तकनीक है जिसका उपयोग मुख्य रूप से महंगे फ़ंक्शन कॉल के परिणामों को संग्रहीत करके और उसी इनपुट के फिर से होने पर कैश्ड परिणाम लौटाकर कंप्यूटर प्रोग्राम को गति देने के लिए किया जाता है। …

क्या संस्मरण डीपी से बेहतर है?

संक्षेप में, यहाँ DP और संस्मरण के बीच अंतर हैं। डीपी एक समाधान रणनीति है जो आपको समान छोटी उप-समस्याओं को खोजने के लिए कहती है ताकि बड़ी उप-समस्याओं को हल किया जा सके। इसमें आमतौर पर पुनरावृत्ति संबंध और संस्मरण शामिल होते हैं। संस्मरण एक ही समस्या पर बार-बार गणना करने से बचने की एक तकनीक है।

कौन सा तेज संस्मरण या सारणीकरण है?

सारणीकरण अक्सर संस्मरण की तुलना में तेज़ होता है, क्योंकि यह पुनरावृत्त होता है और उप-समस्याओं को हल करने के लिए ओवरहेड की आवश्यकता नहीं होती है। हालाँकि, इसे संपूर्ण खोज स्थान से गुजरना पड़ता है, जिसका अर्थ है कि रनटाइम को आसानी से अनुकूलित करने का कोई तरीका नहीं है।

क्या कैशिंग मेमोइज्ड है?

5 उत्तर। संस्मरण कैशिंग का एक विशिष्ट रूप है जिसमें किसी फ़ंक्शन के रिटर्न मान को उसके मापदंडों के आधार पर कैशिंग करना शामिल है। कैशिंग एक अधिक सामान्य शब्द है; उदाहरण के लिए, HTTP कैशिंग कैशिंग है लेकिन संस्मरण नहीं है।

फाइबोनैचि समस्या में मेमोइज़ फ़ंक्शन का उपयोग कैसे करें?

हमारी फाइबोनैचि समस्या के लिए मेमोइज़ फ़ंक्शन का उपयोग करने के लिए हम केवल मेमोइज़ फ़ंक्शन कॉल को एक स्थिरांक के रूप में संग्रहीत करते हैं और तर्कों को पास करते हैं जो अन्यथा इस स्थिरांक को फ़ाइब को पारित कर दिया जाएगा। और, अंत में, हमें यह सुनिश्चित करने की आवश्यकता है कि जब फ़ाइब पुनरावर्ती कॉल करता है, तो यह मूल स्वयं के बजाय स्वयं के नए तेज़ संस्करण को कॉल करता है।

जब कोई फ़ंक्शन याद किया जाता है तो इसका क्या अर्थ है?

मेमोइज़ेशन फ़ंक्शन के परिणामों को "इन" कैशिंग करने की एक तकनीक है ताकि फ़ंक्शन में मेमोरी हो, और कॉल करने वालों को यह जानने की आवश्यकता नहीं होगी कि फ़ंक्शन को याद किया गया है या नहीं।

संस्मरण की विधि का नाम क्या है?

चूंकि केवल एक पैरामीटर गैर-स्थिर है, इस विधि को 1-डी ज्ञापन के रूप में जाना जाता है। उदाहरण के लिए, फाइबोनैचि श्रृंखला में एन-वें पद को खोजने के लिए फाइबोनैचि श्रृंखला की समस्या। यहां पर पुनरावर्ती दृष्टिकोण पर चर्चा की गई है। एक सामान्य अवलोकन यह है कि यह कार्यान्वयन बहुत अधिक बार-बार काम करता है (निम्नलिखित रिकर्सन पेड़ देखें)।

जावा में पहले n फाइबोनैचि नंबर कैसे प्रिंट करें?

ऊपर दिए गए अधिकांश समाधानों के समान लेकिन इसके बजाय मानचित्र का उपयोग करना। मेमोइज़ेशन का उपयोग करके पहले n फाइबोनैचि संख्याओं को मुद्रित करने का कार्यक्रम। मेरा मानना है कि आप वास्तव में अपने शब्दकोश में सामान देखना भूल जाते हैं। यहाँ पुनरावर्ती फाइबोनैचि संस्मरण का मेरा कार्यान्वयन है। BigInteger और ArrayList का उपयोग करने से आप 100वें या उससे भी बड़े पद की गणना कर सकते हैं।

संस्मरण और पुनरावृत्ति

अपने पिछले ब्लॉग पोस्ट के लिए, मैंने पुनरावृत्ति की जांच की और कुछ बुनियादी उदाहरणों पर ध्यान दिया कि हम इसे कैसे लागू कर सकते हैं। जब मैं पुनरावृत्ति के बारे में सीख रहा था, मैं इस शब्द - संस्मरण के बारे में बताता रहा।

फोटो @edgarraw द्वारा

अपने पिछले ब्लॉग पोस्ट के लिए , मैंने पुनरावृत्ति की जांच की और कुछ बुनियादी उदाहरणों पर ध्यान दिया कि हम इसे कैसे लागू कर सकते हैं। जब मैं पुनरावृत्ति के बारे में सीख रहा था, मैं इस शब्द - संस्मरण के बारे में बताता रहा । मुझे यकीन नहीं था कि इसका क्या मतलब है या यह क्यों प्रासंगिक था, इसलिए मैंने आगे की जांच करने का फैसला किया। इस पोस्ट में, मैं इस बारे में बात करूंगा कि पुनरावृत्ति को लागू करते समय मेमोइज़ेशन एक महत्वपूर्ण कारक क्यों हो सकता है और इसका एक उदाहरण दे सकता है कि इसका उपयोग कैसे किया जा सकता है।

संस्मरण क्या है?

संस्मरण संभावित रूप से फ़ंक्शन करने का एक तरीका है जो पुनरावृत्ति को तेज़ी से चलाते हैं। जैसा कि मैं नीचे एक उदाहरण में दिखाऊंगा, एक पुनरावर्ती कार्य एक ही गणना को एक ही इनपुट के साथ कई बार कर सकता है। इसका मतलब है कि यह पुनरावृत्ति विकल्प से अधिक समय तक समाप्त हो सकता है। एक संस्मरण फ़ंक्शन हमें गणना के परिणाम के साथ इनपुट को संग्रहीत करने की अनुमति देता है। इसलिए, एक ही इनपुट का उपयोग करके फिर से वही काम करने के बजाय, यह केवल कैश में संग्रहीत मान वापस कर सकता है।

फ़ोटो @yespanioly द्वारा

संस्मरण और फाइबोनैचि

संस्मरण को वास्तव में समझने के लिए, मुझे यह देखने के लिए उपयोगी लगा कि फाइबोनैचि अनुक्रम में nth संख्या की गणना करने के लिए पुनरावर्तन का उपयोग करते समय इसका उपयोग कैसे किया जाता है । यह एक बहुत ही सामान्य उदाहरण है और निश्चित रूप से ऐसा कुछ हो सकता है जिसे आप तकनीकी साक्षात्कार में लागू करने के लिए कहें।

फाइबोनैचि अनुक्रम पर एक त्वरित नोट : यह संख्याओं का एक क्रम है जहां प्रत्येक संख्या दो पूर्ववर्ती संख्याओं का योग है। हम हमेशा 0 और 1 से शुरू करते हैं। अगला नंबर फिर 1 और होगा, क्योंकि 0 + 1 = 1. हम फिर 2 (1 + 1 = 2) प्राप्त करेंगे, फिर 3 (1 + 2 = 3), और इसी तरह पर।

एक प्रारंभिक पुनरावर्ती समाधान कुछ इस तरह दिख सकता है:

हाँ, यह काम करता है! लेकिन, जबकि यह फ़ंक्शन लंबी लाइनों का एक जोड़ा है, यह बेहद अक्षम है और पुनरावृत्ति विकल्प से अधिक समय लगेगा। रनटाइम घातांक है, जिसका अर्थ है कि जब भी हम 1 से इनपुट बढ़ाते हैं, तो यह गणना करने में कितना समय लगता है, इसमें बहुत बड़ी वृद्धि होती है। ऐसा इसलिए है क्योंकि फ़ंक्शन को एक ही तर्क के साथ कई बार कहा जा रहा है।

हम इस आरेख में देख सकते हैं कि ऐसा कैसे होता है:

पेड़ के प्रतिनिधित्व में पुनरावर्ती फिबोनाची समारोह

जब इनपुट 6 होता है, तो फ़ंक्शन पूर्ववर्ती संख्याओं में से प्रत्येक के साथ कई पुनरावर्ती कॉल करता है। उदाहरण के लिए, एफ (2) को पांच बार कहा जाता है! हालांकि यहाँ इसका बहुत बड़ा प्रभाव नहीं हो सकता है, हम कल्पना कर सकते हैं कि जब हमारा इनपुट 1,000 का था, तो रनटाइम कितना नकारात्मक होगा। जाहिर है, हमें एक बेहतर समाधान की आवश्यकता है।

फोटो @steffipereira द्वारा

बचाव के लिए संस्मरण! एक संस्मरण फ़ंक्शन के साथ, हम एक कैश बना सकते हैं जहां हम इनपुट की गणना उनके परिणामों के साथ करते हैं। फिर, जब भी हमारे पास एक इनपुट होता है जिसे हमने पहले ही देख लिया है, तो हम अपने किसी भी काम को फिर से करने के बजाय परिणाम को पुनः प्राप्त कर सकते हैं।

नीचे, हम एक उदाहरण देख सकते हैं कि इस तरह का एक फ़ंक्शन कैसे बनाया जा सकता है:

इसके अतिरिक्त, जैसा कि यह एक बहुत ही सामान्य कार्य है, हम इसे अन्य पुनरावर्ती कार्यों के संयोजन में भी पुन: उपयोग कर सकते हैं। उस स्थिति में, आप यह भी तर्क कर सकते हैं कि फ़ंक्शन जितनी संख्या में सक्षम है, उदाहरण के लिए . args का उपयोग करने में सक्षम है, इसे और अधिक सार बनाने के लिए।

संस्मरण पर एक नोट

कैश बनाकर, हम अतिरिक्त स्थान का उपयोग कर रहे हैं, इसलिए आपको यह तय करना होगा कि क्या यह बेहतर गति के लायक है। यदि आपके पास बहुत बड़ी मात्रा में इनपुट्स हैं, जहाँ इसकी काफी संभावना नहीं है कि आपको समान गणनाओं को दोहराने की आवश्यकता होगी, तो हो सकता है कि मेमोइज़ेशन एक कुशल समाधान न हो।

फूट डालो और जीतो एल्गो और डायनामिक प्रोग्रामिंग के बीच अंतर

डायनामिक प्रोग्रामिंग, अतिव्यापी उप-समस्याओं के साथ समस्याओं को हल करने की एक तकनीक है। प्रत्येक उप-समस्या को केवल एक बार हल किया जाता है और प्रत्येक उप-समस्या का परिणाम भविष्य के संदर्भों के लिए एक तालिका (आमतौर पर एक सरणी या हैश तालिका के रूप में लागू) में संग्रहीत किया जाता है। इन उप-समाधानों का उपयोग मूल समाधान प्राप्त करने के लिए किया जा सकता है और उप-समस्या समाधानों को संग्रहीत करने की तकनीक को संस्मरण के रूप में जाना जाता है।

आप सोच सकते हैं DP = recursion + re-use

अंतर को समझने के लिए एक क्लासिक उदाहरण इन दोनों दृष्टिकोणों को देखने के लिए होगा, जो एनएचआर नंबर प्राप्त करने की दिशा में है। इस सामग्री को MIT से जांचें ।

फूट डालो और जीतो दृष्टिकोण

फूट डालो और जीतो दृष्टिकोण

यहां छवि विवरण दर्ज करें

डायनामिक प्रोग्रामिंग दृष्टिकोण

मुझे लगता है कि इस पूरे उत्तर में सबसे महत्वपूर्ण पंक्ति यह है कि: "अतिव्यापी उपप्रकारों"। डीपी में यह है, डिवाइड एंड कॉनकर नहीं है

@HasanIqbalAnik ओवरलैपिंग उप समस्या का अर्थ है एक समस्या जो बार-बार होती है। जैसे ऊपर दिखाए गए उदाहरण में fn-2 को हल करना। तो डी एंड सी में यह वहाँ है और यही कारण है कि यह डीपी के रूप में कुशल नहीं है।

अजीब! 'ओवरलैपिंग सबप्रॉब्लम्स' आप समस्या के बारे में बात कर रहे हैं लेकिन 'डायनेमिक प्रोग्रामिंग' एक तरह का एल्गोरिथ्म है। मुझे लगता है कि 'समस्याओं' और 'एल्गोरिदम' को अलग करना महत्वपूर्ण है।

फूट डालो और जीतो और गतिशील प्रोग्रामिंग के बीच अन्य अंतर हो सकता है:

  1. उप-समस्याओं पर अधिक काम करता है और इसलिए समय की अधिक खपत होती है।
  2. विभाजन और जीत में उप-समस्याएं एक-दूसरे से स्वतंत्र हैं।
  1. उप-समस्याओं को केवल एक बार हल करता है और फिर इसे तालिका में संग्रहीत करता है।
  2. गतिशील प्रोग्रामिंग में उप-समस्या स्वतंत्र नहीं है।

डिवाइड-एंड-कॉनकॉर एल्गोरिदम आवश्यक रूप से अपने डीपी विकल्पों की तुलना में अधिक काम नहीं करते हैं। एक उदाहरण मैक्सिकन अंकगणितीय प्रगति खोजने के लिए एरिकसन का एल्गोरिदम है।

कभी-कभी जब प्रोग्रामिंग पुनरावृत्ति होती है, तो आप फ़ंक्शन को एक ही पैरामीटर के साथ कई बार कॉल करते हैं जो कि अस्वाभाविक है।

प्रसिद्ध उदाहरण फाइबोनैचि संख्या:

तो हमने कहा है: 1 बार एफ (4) 2 बार एफ (3) 3 बार एफ (2) 2 बार एफ (1)

डायनेमिक प्रोग्रामिंग अप्रोच: यदि आप एक ही पैरामीटर के साथ किसी फ़ंक्शन को एक से अधिक बार कॉल करते हैं, तो परिणाम को अगली बार सीधे एक्सेस करने के लिए एक चर में सहेजें। चलने का तरीका:

आइए फिर से F (5) पर कॉल करें:

जैसा कि आप देख सकते हैं, जब भी आपको कई कॉल की आवश्यकता होती है तो आप इसे पुनः प्राप्त करने के बजाय मूल्य प्राप्त करने के लिए संबंधित चर का उपयोग करते हैं।

वैसे, डायनेमिक प्रोग्रामिंग का मतलब पुनरावर्ती कोड को पुनरावृति कोड में बदलना नहीं है। यदि आप एक पुनरावर्ती कोड चाहते हैं, तो आप उप-वर्ग को एक चर में भी सहेज सकते हैं। इस मामले में तकनीक को संस्मरण कहा जाता है। हमारे उदाहरण के लिए यह इस तरह दिखता है:

इसलिए डिवाइड एंड कॉनकेयर का संबंध यह है कि डी एंड डी एल्गोरिदम पुनरावृत्ति पर भरोसा करते हैं। और उनमें से कुछ संस्करणों में यह "एक ही पैरामीटर मुद्दे के साथ कई फ़ंक्शन कॉल है।" ऐसे उदाहरणों के लिए "मैट्रिक्स चेन गुणा" और "सबसे लंबे समय तक सामान्य अनुक्रिया" के लिए खोजें जहां डी एंड डी एल्गो के टी (एन) को बेहतर बनाने के लिए डीपी की आवश्यकता होती है।

डायनेमिक प्रोग्रामिंग और डिवाइड-एंड-कॉनकॉर्ड समानताएं

जैसा कि मैंने इसे अभी के लिए देखा है मैं कह सकता हूं कि डायनेमिक प्रोग्रामिंग डिवाइड और विजय प्रतिमान का विस्तार है

मैं उन्हें पूरी तरह से अलग चीज नहीं मानूंगा। क्योंकि वे दोनों एक समस्या को दो या दो से अधिक एक ही या संबंधित प्रकार की उप-समस्याओं में तोड़-मरोड़ कर काम करते हैं , जब तक कि ये सीधे सरल नहीं हो जाते हैं। उप-समस्याओं का समाधान तब मूल समस्या का समाधान देने के लिए संयुक्त किया जाता है।

तो हमारे पास अभी भी अलग-अलग प्रतिमान क्यों हैं और मैंने डायनेमिक प्रोग्रामिंग को विस्तार क्यों कहा। ऐसा इसलिए है क्योंकि डायनेमिक प्रोग्रामिंग अप्रोच समस्या पर तभी लागू हो सकती है जब समस्या में कुछ प्रतिबंध या पूर्वापेक्षाएँ हों । और उसके बाद डायनामिक प्रोग्रामिंग मेमोइज़ेशन या टेबुलेशन तकनीक के साथ डिवाइड और विजय दृष्टिकोण को बढ़ाता है ।

गतिशील प्रोग्रामिंग पूर्वापेक्षाएँ / प्रतिबंध

जैसा कि हमने अभी पता लगाया है कि दो महत्वपूर्ण विशेषताएं हैं जो समस्या को विभाजित करने और जीतने के लिए गतिशील प्रोग्रामिंग के लिए लागू होना चाहिए:

इष्टतम उप -निर्माण - इष्टतम समाधान का निर्माण इसके उप-उत्पादों के इष्टतम समाधानों से किया जा सकता है

ओवरलैपिंग उप-समस्याओं - समस्या को उन सबप्रोब्लेम्स में तोड़ा जा सकता है जो कई बार पुन: उपयोग किए जाते हैं या समस्या के लिए एक पुनरावर्ती एल्गोरिथ्म एक ही उपप्रोब्लेम को हल करता है और हमेशा नए उपप्रक्रम उत्पन्न करता है

एक बार इन दो शर्तों को पूरा करने के बाद, हम कह सकते हैं कि डायनामिक प्रोग्रामिंग दृष्टिकोण का उपयोग करके इस विभाजन और जीत की समस्या को हल किया जा सकता है।

डिवाइड और जीत के लिए डायनामिक प्रोग्रामिंग एक्सटेंशन

डायनेमिक प्रोग्रामिंग एप्रोच डिवाइड को बढ़ाता है और दो तकनीकों ( मेमोनाइजेशन और टेबुलेशन ) के साथ एप्रोच को जीतता है, जिसमें दोनों के पास उप-समस्याओं के समाधान को संग्रहीत करने और फिर से उपयोग करने का एक उद्देश्य है जो प्रदर्शन में काफी सुधार कर सकता है। उदाहरण के लिए, फिबोनाची फ़ंक्शन के भोले पुनरावर्ती कार्यान्वयन में समय की जटिलता है O(2^n) जहां डीपी समाधान केवल O(n) समय के साथ ही कर रहा है ।

संस्मरण (टॉप-डाउन कैश फिलिंग) पहले से गणना किए गए परिणामों को कैशिंग और पुन: उपयोग करने की तकनीक को संदर्भित करता है। इस fib प्रकार याद किया गया कार्य इस प्रकार होगा:

टेबुलेशन (बॉटम-अप कैश फिलिंग) समान है, लेकिन कैश की प्रविष्टियों को भरने पर ध्यान केंद्रित करता है। कैश में मानों की गणना करना सबसे आसान है। सारणीकरण संस्करण fib इस तरह दिखेगा:

आप यहाँ संस्मरण और सारणीकरण तुलना के बारे में अधिक पढ़ सकते हैं ।

मुख्य विचार जो आपको यहां समझाना चाहिए, वह यह है कि क्योंकि हमारी विभाजन और जीत की समस्या ने उप-समस्याओं को ओवरलैप कर दिया है, इसलिए उप-समस्या समाधान के कैशिंग संभव हो जाते हैं और इस प्रकार दृश्य पर संस्मरण / सारणीकरण कदम बढ़ जाता है।

तो आखिर डीपी और डीसी के बीच अंतर क्या है

चूंकि हम अब डीपी पूर्वापेक्षाओं और इसकी कार्यप्रणाली से परिचित हैं, इसलिए हम एक चित्र में ऊपर वर्णित सभी को डालने के लिए तैयार हैं।

डायनामिक प्रोग्रामिंग बनाम डिवाइड-एंड-कॉनकेयर

यदि आप कोड उदाहरण देखना चाहते हैं, तो आप यहां अधिक विस्तृत विवरण देख सकते हैं, जहां आपको दो एल्गोरिथम उदाहरण मिलेंगे: बाइनरी सर्च और मिनिमम एडिट डिस्टेंस (लेवेंसहाइट डिस्टेंस) जो डीपी और डीसी के बीच के अंतर को दर्शा रहे हैं।

रेटिंग: 4.65
अधिकतम अंक: 5
न्यूनतम अंक: 1
मतदाताओं की संख्या: 685
उत्तर छोड़ दें

आपका ईमेल पता प्रकाशित नहीं किया जाएगा| अपेक्षित स्थानों को रेखांकित कर दिया गया है *