यहां आपको आरंभ करने का संकेत दिया गया है। पूर्णांक के विभाजनों के सेट की गणना करने के लिए मानक गतिशील प्रोग्रामिंग एल्गोरिदम लागू करें , और यह जांचने के लिए कुछ तर्क जोड़ें कि इनमें से कौन सा अद्वितीय परिवर्तन के लिए अनुमति देता है, सभी रकमों की जाँच करके, परिवर्तन करके , और अद्वितीयता की पुष्टि करें।
थोड़ा और विस्तार से: मान लीजिए कि आपके पास एक मल्टीसेट । एक नंबर को देखते हुए मैं के साथ 1 ≤ मैं ≤ n , तुम कैसे की एक submultiset की पहचान कर सकता है एस करने के लिए है कि रकम मैं ? आप कैसे जाँच सकते हैं कि क्या यह सबमुलिसेट अद्वितीय है? परिवर्तन करने के लिए मानक गतिशील प्रोग्रामिंग तकनीकों को अनुकूलित करने का प्रयास करें । ( यह सवाल भी देखें )Si1≤i≤nSi
एक मल्टीसेट को देखते हुए , आप यह कैसे जांच सकते हैं कि क्या यह दूसरी स्थिति को संतुष्ट करता है, अर्थात, क्या 1 से n तक की प्रत्येक संख्या को विशिष्ट रूप से S के एक उप-कुल के रूप में व्यक्त किया जा सकता है (अद्वितीय परिवर्तनशील स्थिति)? यदि आप पिछले एक को हल करते हैं तो यह बहुत आसान होना चाहिए।SnS
चलो multisets कि अपनी शर्तों के दोनों को संतुष्ट की सूची को दर्शाते हैं। यदि आप पी ( 1 ) , पी ( 2 ) , … , पी ( एन ) जानते हैं, तो आप पी ( एन + 1 ) के निर्माण के लिए उस जानकारी का उपयोग कैसे कर सकते हैं ? यहाँ आप एक पूर्णांक के विभाजनों की गणना के लिए मानक गतिशील प्रोग्रामिंग तकनीकों को अनुकूलित करना चाह सकते हैं।P(n)P(1),P(2),…,P(n)P(n+1)
यहाँ एक दृष्टिकोण है जो शायद बेहतर होगा।
मान लीजिए कि एक मल्टीसेट है जो आपकी दोनों स्थितियों ( एन के लिए ) को संतुष्ट करता है । हम एक मल्टीसेट टी प्राप्त करने के लिए इसे कैसे बढ़ा सकते हैं जिसमें एक तत्व अधिक है? दूसरे शब्दों में, हम एक नए मल्टीसेट टी को प्राप्त करने के लिए एस को एक और तत्व जोड़ने के सभी तरीकों की पहचान कैसे कर सकते हैं जो आपकी दोनों स्थितियों (कुछ एन ′ के लिए ) को संतुष्ट करता है ?SnTSTn′
उत्तर: यदि को S के कुछ तत्वों के योग के रूप में व्यक्त किया जा सकता है , तो इसे S में जोड़ने का कोई मतलब नहीं है : जो T को विशिष्टता की स्थिति का उल्लंघन करने का कारण बनेगा । तो, हम सभी पूर्णांकों की गणना कर सकते हैं एक्स कि नहीं कर सकते हैं की तत्वों में से कुछ की राशि के रूप में व्यक्त किया जा एस ; प्रत्येक एक ऐसी चीज है जो संभवतः एक नया मल्टीसेट टी प्राप्त करने के लिए एस में जोड़ा जा सकता है जो दोनों स्थितियों (कुछ अन्य एन के लिए ) को संतुष्ट करेगा ।xSSTxSSTn
इसके अलावा, यह एन्यूमरेट करना संभव है कि कौन से पूर्णांकों को के कुछ तत्वों के योग के रूप में व्यक्त किया जा सकता है , और जो गतिशील प्रोग्रामिंग का उपयोग नहीं कर सकता है। आप एक दो आयामी सरणी का निर्माण एक [ 1 ... | एस | , 1 ... एन ] बूलियन्स, जहां की एक [ मैं , जे ] अगर वहाँ पूर्णांक व्यक्त करने के लिए एक तरीका है सच है j पहले से कुछ की राशि के रूप में मैं के तत्वों एस (केवल पहला मैं के तत्वों एस करने के पात्र हैं इस्तेमाल किया जा सकता है, जहां एसSA[1…|S|,1…n]A[i,j]jiSiSSसॉर्ट किया गया है, इसलिए और रों 1 ≤ रों 2 ≤ ⋯ ≤ रों कश्मीर )। ध्यान दें कि A [ i , j ] A [ 1 … i - 1 , 1 … j - 1 ] के मूल्यों का उपयोग करके कंप्यूटिंग कर सकता है : विशेष रूप से, A [ i , j ]S={s1,s2,…,sk}s1≤s2≤⋯≤skA[i,j]A[1…i−1,1…j−1] अगर j > एस मैं , या एक [ मैं , जे ] = एक [ मैं - 1 , जे ] अन्यथा। यह हमें उन सभी नंबरों की पहचान करने में सक्षम बनाता है जो एस में जोड़े जाने वाले उम्मीदवार हैं।A[i,j]=A[i−1,j]∨A[i−1,j−si]j>siA[i,j]=A[i−1,j]S
इसके बाद, प्रत्येक उम्मीदवार विस्तार के लिए के एस (एक तत्व जोड़कर प्राप्त एस ), हम है कि क्या जाँच करना चाहते हैं टी संतुष्ट दोनों स्थितियों। चलो n के तत्वों का योग निरूपित एस , और n ' के तत्वों का योग टी । हम जांच करने के लिए है कि क्या रेंज में हर पूर्णांक जरूरत n + 1 , n + 2 , ... , n ' के तत्वों में से कुछ की राशि के रूप में व्यक्त किया जा सकता है टीTSSTnSn′Tn+1,n+2,…,n′T। यह भी परिवर्तनशील के लिए मानक एल्गोरिदम का उपयोग करते हुए, गतिशील प्रोग्रामिंग का उपयोग करके हल किया जा सकता है। (वास्तव में, अगर आप अभी भी सरणी है ऊपर उल्लेख किया है आप आसानी से इसे थोड़ा सा इस समस्या को हल करने के लिए विस्तार कर सकते हैं: हम इसे एक सरणी बनाने के एक [ 1 ... | टी | , 1 ... n ' ] , सभी में भरने के लिए जारी अतिरिक्त प्रविष्टियों की, और सुनिश्चित करें कि A [ | T | , n + 1 ] , A [ | T | , n + 2 ] ,AA[1…|T|,1…n′] सभी सही हैं।) तो, अब हम सभी multisets गणना कर सकते हैं टी कि विस्तार एस एक भी तत्व से और है कि दोनों शर्तों को पूरा।A[|T|,n+1],A[|T|,n+2],…,A[|T|,n′]TS
यह तुरंत सभी multisets की गणना करने के लिए एक एल्गोरिथ्म का सुझाव सभी के लिए, कि अपनी हालत को संतुष्ट n बाध्य कुछ करने के लिए कहते हैं, n ≤ 20 । हम एक सरणी होगा पी [ 1 ... 20 ] , जहां पी [ 5 ] भंडार सभी multisets एस 5 के लिए उस राशि, और आम तौर पर, पी [ एन ] भंडार सभी multisets के सेट एस करने के लिए उस राशि एन ।Snn≤20P[1…20]P[5]SP[n]Sn
अगला, हम पुनरावृति में भर सकते हैं । केवल एक मल्टीसेट { 1 } सम्मिलित करने के लिए P [ 1 ] सेट करके प्रारंभ करें । अगला, प्रत्येक के लिए n (1 से 20 से ऊपर बढ़ रहा है), प्रत्येक के लिए एस ∈ पी [ एन ] , सभी संभव एक्सटेंशन गणना टी के एस (ऊपर तकनीक का उपयोग), चलो n ' के तत्वों का योग निरूपित टी , और T को P [ n ′ ] में डालेंP[n]P[1]{1}nS∈P[n]TSn′TTP[n′]अगर यह पहले से ही मौजूद है और अगर नहीं है ।n′≤20
यह बहुत उल्लेखनीय होना चाहिए। सौभाग्य! मज़े करो! विवरणों के माध्यम से काम करना गतिशील प्रोग्रामिंग में एक अच्छा शिक्षण-व्यायाम होगा।