डायनामिक प्रोग्रामिंग के लिए उप-समस्याओं पर निर्णय लेना


39

मैंने कई बार गतिशील प्रोग्रामिंग की तकनीक का उपयोग किया है, लेकिन आज एक मित्र ने मुझसे पूछा कि मैं अपनी उप-समस्याओं को परिभाषित करने के बारे में कैसे जाऊंगा, मुझे एहसास हुआ कि मेरे पास एक उद्देश्यपूर्ण औपचारिक उत्तर प्रदान करने का कोई तरीका नहीं था। आप औपचारिक रूप से एक समस्या के लिए उप-समस्या को कैसे परिभाषित करते हैं जिसे आप गतिशील प्रोग्रामिंग का उपयोग करके हल करेंगे?


ऐसा लगता है कि मौजूदा उत्तरों में से कोई भी (अप्रैल, 2019 तक) पर्याप्त नहीं है, खासकर शुरुआती लोगों के लिए। मैं अन्य साइटों पर ट्यूटोरियल की सिफारिश करूंगा।
Apass.Jack

जवाबों:


35

डायनेमिक प्रोग्रामिंग का सिद्धांत शीर्ष-डाउन (यानी पुनरावर्ती) सोचना है, लेकिन नीचे को हल करना है। तो एक डीपी डिजाइन करने के लिए एक अच्छी रणनीति समस्या को फिर से तैयार करना और उस तरह से उप-समस्याएं उत्पन्न करना है।


14
मेरा दावा है कि यही एकमात्र रणनीति है।
जेफ ई

2
@ जेफ़े हां, मैंने अपने एल्गोरिथम कक्षाओं को पढ़ाते समय आपके नोट्स पढ़े और उनका उपयोग किया और यह प्रभावी था। उद्धरण: "गतिशील तालिकाओं में भरने के बारे में नहीं है। यह स्मार्ट पुनरावृत्ति के बारे में है!"
दाई

2
DPs को कैसे पढ़ाया जाता है, इसके बारे में मेरी समझ @ जेफई के नोटों से पूरी तरह प्रभावित है :)
सुरेश

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

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

4

जैसा कि @ सुरेश ने बताया, एक बार जब आप जानते हैं कि आपकी समस्या को डीपी द्वारा हल किया जा सकता है (यानी यह इष्टतम उपप्रकार और अतिव्यापी उपप्रोब्लेम्स प्रदर्शित करता है), तो आप एक विभाजन के बारे में सोच सकते हैं और पुनरावर्ती समाधान जीत सकते हैं।

O(1)

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


1
"इष्टतम सबस्ट्रक्चर" (जो भी इसका मतलब है) शायद डीपी-सॉल्वेबिलिटी के लिए एक पर्याप्त स्थिति नहीं है। "अतिव्यापीकरण" निश्चित रूप से एक आवश्यक नहीं है।
राफेल

1
ऑप्टिमल सबस्ट्रक्चर और ओवरलैपिंग सपोर्म्बल दोनों उन समस्याओं से प्रदर्शित होते हैं जिन्हें डीपी द्वारा कुशलतापूर्वक हल किया जा सकता है। बेशक डीपी सॉल्वेबिलिटी के लिए केवल इष्टतम सबस्ट्रक्चर पर्याप्त नहीं है। हालाँकि, यदि आपके पास अतिव्यापी उप-क्षेत्र नहीं हैं, तो आप समस्या को साधारण विभाजन द्वारा हल कर सकते हैं और समान लागत से जीत सकते हैं: वास्तव में, डीपी का लाभ एक जीत को विभाजित करने पर यह है कि प्रत्येक उपप्रकार को ठीक उसी समय हल किया जाता है जब पुनरावृत्ति के पेड़ में सामना करना पड़ता है ।
मासिमो कापरो

1
यह मेरा सूत्रीकरण नहीं है: आप इसे कॉर्मेन, लिइसर्सन, रिवेस्ट और स्टीन द्वारा "एल्गोरिदम का परिचय" और एल्गोरिदम पर कई अन्य पाठ्यपुस्तकों पर पाएंगे।
मैसिमो कैफ़रो

1
बृहस्पति, और अधिकांश कम से कम आंशिक रूप से गलत हैं। यदि आप एक उपयुक्त प्रश्न पोस्ट करते हैं, तो मुझे खुशी होगी।
राफेल

1
मुझे यकीन नहीं है कि मैं आपकी अंतिम टिप्पणी को ठीक से समझ पा रहा हूं। यह दिखाने के लिए कि इस तरह का लक्षण वर्णन गलत है (यह आंशिक रूप से गलत नहीं हो सकता है: या तो सही है या यह गलत है), आप बस एक प्रतिरूप के रूप में दिखा सकते हैं, एक समस्या जो इष्टतम उपप्रकार और अतिव्यापी उप-प्रदर्शन दोनों को प्रदर्शित नहीं करती है, फिर भी एक बहुपद डीपी समाधान के लिए उत्तरदायी। लेकिन ध्यान दें, इस संदर्भ में, इसका मतलब है कि एक समाधान जो सामान्य विभाजन और जीत से बेहतर है।
मैसिमो कैपरो

2

मेरा अनुभव "पहले से गणना किए गए उपयोगी मूल्य को संग्रहीत करने की मदद से निरर्थक गणना में कटौती" करने का एक तरीका खोज रहा है। वैसे, ICPC (International Collegiate Programming Contest) में डायनेमिक प्रोग्रामिंग वास्तव में लोकप्रिय है। ICPC की कई समस्याओं के अभ्यास के बाद DP के बारे में किसी की भी अपनी भावना हो सकती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.