डायनामिक प्रोग्रामिंग पर एक केस भेद: उदाहरण की आवश्यकता है!


19

मैं कुछ समय से डायनेमिक प्रोग्रामिंग पर काम कर रहा हूं। एक गतिशील प्रोग्रामिंग पुनरावृत्ति का मूल्यांकन करने के लिए विहित तरीका सभी आवश्यक मूल्यों की एक तालिका बनाकर और पंक्ति द्वारा पंक्ति को भरना है। उदाहरण के लिए Cormen, Leiserson et al: "परिचय के लिए एल्गोरिदम का परिचय" देखें

मैं दो आयामों (पंक्ति-दर-पंक्ति भरण) में तालिका-आधारित संगणना योजना पर ध्यान केंद्रित करता हूं और सेल निर्भरता की संरचना की जांच करता हूं, अर्थात किन कोशिकाओं को दूसरे की गणना करने से पहले किया जाना चाहिए। हम Γ(i) सेल सेल के सूचकांकों के सेट पर निर्भर करते हैं। ध्यान दें कि को चक्र-मुक्त होना आवश्यक है।iΓ

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

d(i)=f(i,Γ~d(i))

साथ , और (कुछ संगणनीय ) फ़ंक्शन, जो अलावा अन्य का उपयोग नहीं करता है, जो कि \ n \ _ \ _ \ _ \ _ \ _ \ _ "@ गामा} _d ;i[0m]×[0n]Γ~d(i)={(j,d(j))jΓd(i)}fdΓ~d

जब की खुरदरी जगहों (बाएँ, ऊपर-बाएँ, शीर्ष, शीर्ष-दाएँ, ... वर्तमान सेल के) की को प्रतिबंधित किया जाता है, तो यह देखा जाता है कि वैध रूप से तीन मामले (समरूपता और रोटेशन तक) हैं गतिशील प्रोग्रामिंग पुनरावर्ती जो यह बताती हैं कि तालिका कैसे भरी जा सकती है:Γd

गतिशील प्रोग्रामिंग सेल निर्भरता के तीन मामले

लाल क्षेत्रों को निरूपित (अतिव्यापी) । मामलों में से एक और दो सबसेट को रद्द कर देते हैं, केस तीन सबसे खराब स्थिति है (सूचकांक परिवर्तन तक)। ध्यान दें कि यह कड़ाई से आवश्यक नहीं है कि पूरे लाल क्षेत्रों को द्वारा कवर किया गया हो ; तालिका के प्रत्येक लाल भाग में कुछ कोशिकाएँ इसे लाल रंग देने के लिए पर्याप्त हैं। सफेद क्षेत्रों को किसी भी आवश्यक कोशिकाओं को शामिल नहीं करने के लिए जरूरी है।ΓΓ

मामले के उदाहरण एक हैं दूरी और सबसे लंबे समय तक सामान्य संपादित करने के बाद , केस दो बेलमैन और फोर्ड और CYK पर लागू होता है । कम स्पष्ट उदाहरणों में ऐसे शामिल हैं जो पंक्तियों (या स्तंभों) के बजाय विकर्णों पर काम करते हैं क्योंकि उन्हें प्रस्तावित मामलों को फिट करने के लिए घुमाया जा सकता है; उदाहरण के लिए जो का उत्तर देखें ।

मेरे पास केस थ्री के लिए कोई (प्राकृतिक) उदाहरण नहीं है, हालाँकि! तो मेरा सवाल है: मामले के तीन गतिशील प्रोग्रामिंग रिकर्स / समस्याओं के लिए उदाहरण क्या हैं?


2
केस 3 subsumes मामलों 1 और 2
JeffE

नहीं, यह दिखता है, के बावजूद नहीं है। उदाहरण के लिए, एक मामले 1 उदाहरण है, जबकि एक मामला 3 उदाहरण के लिए, ऊपरी बाएँ क्षेत्र में एक आवश्यक सेल नहीं हो सकता है ऊपरी बाएँ क्षेत्र में एक आवश्यक सेल है। मैंने स्पष्टीकरण स्पष्ट करने के लिए स्पष्टीकरण संपादित किया।
राफेल

जवाबों:


15

डायनामिक प्रोग्रामिंग एल्गोरिदम के कई अन्य उदाहरण हैं जो आपके पैटर्न को बिल्कुल भी फिट नहीं करते हैं।

  • सबसे लंबे समय तक बढ़ती हुई समस्या के लिए केवल एक आयामी तालिका की आवश्यकता होती है।

  • कई प्राकृतिक गतिशील प्रोग्रामिंग एल्गोरिदम हैं जिनकी तालिकाओं को तीन या अधिक आयामों की आवश्यकता होती है। उदाहरण के लिए: बिटमैप में अधिकतम क्षेत्र सफेद आयत खोजें। प्राकृतिक गतिशील प्रोग्रामिंग एल्गोरिथ्म एक तीन आयामी तालिका का उपयोग करता है।

  • लेकिन सबसे महत्वपूर्ण बात, गतिशील प्रोग्रामिंग तालिकाओं के बारे में नहीं है ; यह पुनरावृत्ति को उजागर करने के बारे में है। बहुत सारे प्राकृतिक गतिशील प्रोग्रामिंग एल्गोरिदम हैं जहां मध्यवर्ती परिणामों को संग्रहीत करने के लिए उपयोग की जाने वाली डेटा संरचना एक सरणी नहीं है, क्योंकि पुनरावृत्ति अनजाने पूर्णांक की एक सीमा से अधिक नहीं है। दो आसान उदाहरण एक पेड़ में शीर्ष का सबसे बड़ा स्वतंत्र सेट ढूंढ रहे हैं, और दो पेड़ों का सबसे बड़ा सामान्य उप-केंद्र ढूंढ रहे हैं। एक अधिक जटिल उदाहरण है -approximation एल्गोरिथ्म अरोड़ा और मिशेल द्वारा इयूक्लिडियन यात्रा विक्रेता की समस्या के लिए।(1+ϵ)


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

9
ठीक है, लेकिन मुझे लगता है कि आप इस बिंदु को याद कर रहे हैं।
जेफ ई

जैसा कि कई upvotes हैं, मैंने सोचा कि मुझे यह स्पष्ट करना चाहिए: यह पोस्ट प्रश्न का उत्तर नहीं देता है और यह वास्तव में प्रयास भी नहीं करता है।
राफेल

2
@ राफेल सही है। मेरा "उत्तर" एक उत्तर नहीं है, लेकिन सवाल की आलोचना है, लेकिन यह एक टिप्पणी के लिए बहुत लंबा था।
जेफई

3

कम्प्यूटिंग एकरमैन फंक्शन इसी भावना में है। गणना करने के लिए आपको कुछ बड़े k के लिए A ( m , n - 1 ) और A ( m - 1 , k ) जानना आवश्यक है । या तो दूसरा समन्वय घटता है, या पहला घटता है, और दूसरा संभावित रूप से बढ़ता है।A(m,n)A(m,n1)A(m1,k)k

यह आदर्श रूप से आवश्यकताओं को फिट नहीं करता है, क्योंकि स्तंभों की संख्या अनंत है, और गणना आमतौर पर संस्मरण के साथ टॉप-डाउन की जाती है, लेकिन मुझे लगता है कि यह उल्लेख के लायक है।


1
नहीं, रूप में घोंसला बनाना वास्तव में खुद को गतिशील प्रोग्रामिंग के लिए उधार नहीं देता है। हे, यह बहुत अजीब है मुझे यह देखना होगा कि मेरी परिभाषाएं ऐसे मामलों को किसी भी तरह से बाहर करती हैं। गैर आदिम पुनरावर्ती डी पी, हे ...A(m1,A(m,n1))
राफेल

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

@ जूल्स: कैनोनिकल टेबल स्कीम के लिए समस्या यह है कि आपको पता नहीं है कि (आदिम पुनरावर्ती) टेबल के आकार की प्राथमिकता है। बेशक आप स्मरण कर सकते हैं, लेकिन सामान्य तरीके से नहीं। तो हां, यह डीपी के लिए व्यवहार्य हो सकता है लेकिन यह उन समस्याओं के वर्ग के लिए उपयुक्त नहीं है जिनसे मेरा प्रश्न चिंतित है।
राफेल

1
मुझे नहीं लगता कि यह डीपी के लिए एक आवश्यकता है कि आपके पास टेबल के आकार की एक प्राथमिकता है? वास्तव में जेफ़ई का उल्लेख है, कैश के लिए बिल्कुल भी टेबल नहीं होना चाहिए। यह किसी भी सहयोगी डेटा संरचना हो सकती है। डीपी वास्तव में एक बहुत ही सरल विचार है: आप एक पुनरावर्ती रूप से परिभाषित फ़ंक्शन की गणना करना चाहते हैं, लेकिन इस फ़ंक्शन को बार-बार एक ही तर्क पर बुलाया जाता है। DP वह ऑप्टिमाइज़ेशन है जहाँ आप कैश का परिचय देते हैं ताकि आप सुनिश्चित कर सकें कि आप प्रत्येक मामले को केवल एक बार ही गणना करें। ऐसे बहुत सारे कार्य हैं जो आपके किसी भी मामले में फिट नहीं हैं, भले ही वे दो बंधे हुए पूर्णांकों के कार्य हों।
जूल्स

2

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

तो नियम कुछ इस प्रकार है:

diagMatrix


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

@ राफेल यह तुरंत स्पष्ट नहीं है कि ये समान हैं, आप अपने प्रश्न में इसका उल्लेख करना चाह सकते हैं।
जो

0

मैं इसका एक मूर्खतापूर्ण उदाहरण जानता हूं, लेकिन मुझे लगता है कि एक साधारण पुनरावृत्ति समस्या है

एक वर्ग मैट्रिक्स में संख्याओं का योग ज्ञात कीजिए

योग्यता हो सकती है। पारंपरिक "प्रत्येक पंक्ति के लिए प्रत्येक पंक्ति के लिए" थोड़े आपके मामले 3 जैसा दिखता है।


-1

यह ठीक वह खोज स्थान नहीं है जिसे आप खोज रहे हैं, लेकिन मुझे अपने सिर के शीर्ष का एक विचार है जो मदद का हो सकता है।

मुसीबत :

n×nMxM

उत्तर

इसे निम्न पुनरावर्ती तरीके से हल किया जा सकता है:

k=1+n2xmk,kx<mk,kmi,jkinkjn1/4x>mk,k1/4। इसलिए पहले पुनरावृत्ति के बाद, खोज स्थान का आकार हो जाता है34n2x(34)3n2


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