बहुत अच्छा सवाल!
आप दो बार सही हैं:
- Knapsack में वस्तुओं की संख्या को प्रचारित करने से इष्टतम समाधान नहीं होता है।
- एक समाधान में तीसरे आयाम को जोड़ना शामिल है। यह सरल है लेकिन ऐसा करते समय कुछ तथ्यों को ध्यान में रखना आवश्यक है। ध्यान दें कि यह एकमात्र विकल्प नहीं है
निम्नलिखित में, मैं मान रहा हूं कि आप गतिशील प्रोग्रामिंग में आधारित समाधान से परिचित हैं। विशेष रूप से, मैं इस बात पर चर्चा नहीं करूंगा कि समाधान का निर्धारण करने के लिए तालिका को आगे पीछे कैसे किया जाए ।
आइए हम पहले विशिष्ट मामले पर ध्यान दें: वस्तुओं की संख्या अप्रतिबंधित है । इस स्थिति में, आप केवल एक तालिका बनाते हैं, जहाँ में इष्टतम मान होता है, जब नैकपैक की समग्र क्षमता और केवल पहले आइटम के बराबर होती है । यहां से:टी आई , जे आई जेTTi,jij
Ti,j=max{Ti,j−1,Ti−wj,j−1+vj}
जहां और क्रमशः -th आइटम के वजन और मूल्य के लिए खड़े हैं। यदि आपके नॅप्सैक की समग्र क्षमता है और कुल आइटम में हैं तो इष्टतम समाधान द्वारा दिया गया है । इस एल्गोरिथ्म को छद्म-बहुपद समय में चलाने के लिए जाना जाता है और इसकी सुंदरियों में से एक यह है कि यह केवल उन संयोजनों पर विचार करता है जो अधिकतम क्षमता फिट करते हैं।wjvjjCNTC,N
हालाँकि, यह पर्याप्त नहीं है जब आप अपनी बाधा जोड़ते हैं: अधिकतम आइटम । कारण यह है कि पिछले पुनरावृत्ति फार्मूला में वस्तुओं के विभिन्न संयोजनों को ध्यान में नहीं रखा गया है:p
- सबसे पहले, अगर तो ताकि वें वस्तु माना आइटम, की अधिकतम संख्या के बावजूद नैपसैक में जोड़ा जाता है --- ताकि आप अपने बाधा उल्लंघन कर रही है। ठीक है, आप प्रत्येक चरण में डाली गई वस्तुओं की संख्या पर नज़र रखते हुए पूर्ववर्ती फॉर्मूला लागू करने के लिए यहां परीक्षा दे सकते हैं और यदि नोकपैक में वर्तमान में आइटम की संख्या से अधिक है , तो दूसरों को न जोड़ें , लेकिन,Ti,j−1<(Ti−wj,j−1+vj)Ti,j=(Ti−wj,j−1+vj)jpp
- दूसरा, यदि तो ताकि यह आइटम जोड़ा न जाए लेकिन इष्टतम समाधान मामले में एक बड़ी गलती हो सकती है जिसमें पहले से ही आइटम की अधिकतम संख्या शामिल है जो कि नैकपैक में सम्मिलित हो। कारण यह है कि हम ठीक से तुलना नहीं कर रहे हैं: एक तरफ, पिछले बीच चयनित वस्तुओं से मिलकर इष्टतम समाधान को संरक्षित करने के लिए ; दूसरी ओर, -th आइटम सम्मिलित करने के लिए और, इसके अलावा पिछले बीच आइटम के साथ सबसे अच्छा सबसेट पर विचार करें ।Ti,j−1>(Ti−wj,j−1+vj)Ti,j=Ti,j−1Ti,j−1p(j−1)j(p−1)(j−1)
ताकि पहले समाधान में तीसरा आयाम शामिल हो। आपके मामले के लिए, इष्टतम समाधान हो जब नैकपैक की क्षमता , केवल पहले आइटमों पर विचार किया जाता है और इसे knapsack में आइटम से अधिक रखने की अनुमति नहीं है । अभी,Ti,j,kijk
- यदि आप को कई वस्तुओं के लिए सख्ती से कम या बराबर कर रहे हैं, जो सम्मिलित किए जा सकने वाले आइटमों की संख्या ( ) से अधिक है तो सामान्य रूप से आगे बढ़ें, लेकिन : के समान मान का उपयोग करकेTi,j,kj≤kkTi,j,k=max{Ti,j−1,k,Ti−wj,j−1,k+vj}
- अब, यदि आपको कई आइटमों की संख्या की तुलना में सख्ती से बड़ी संख्या में को सम्मिलित करना है, जो तब डाले जा सकते हैं ( ) तो:Ti,j,kj>kTi,j,k=max{Ti,j−1,k,Ti−wj,j−1,k−1+vj}
पहली अभिव्यक्ति स्पष्ट होनी चाहिए। तालिका की -th परत के बाद दूसरा काम करता है, ऊपर दिए गए पहले बीच वस्तुओं के सर्वोत्तम संयोजन का ट्रैक रखता है।(k−1)T(k−1)(j−1)
इस एल्गोरिथ्म के एक कुशल कार्यान्वयन गणना की जरूरत नहीं है सभी के लिए । नोट पूर्ववर्ती पुनरावृत्ति संबंधों परत संबंधित है कि के साथ और इस प्रकार, यह दो क्रमिक परतों (जैसे, यदि आप के साथ इष्टतम समाधान में रुचि रखने वाले कर रहे हैं के बीच वैकल्पिक के लिए संभव है तुम सिर्फ लगातार दो परतों का उपयोग: 0 (1, 1 और 2, 2 और 3, 3 और 4 और आप कर रहे हैं)। दूसरे शब्दों में, यह एल्गोरिथ्म गतिशील प्रोग्रामिंग के आधार पर पारंपरिक दृष्टिकोण द्वारा आवश्यक मेमोरी को दोगुना लेता है और इस प्रकार, यह अभी भी छद्म-बहुपद समय में चलाया जा सकता है।Ti,j,kkk(k−1)k=4
हालाँकि, अवगत रहें, कि यह एकमात्र समाधान नहीं है! और एक और है जो आपको अधिक सुरुचिपूर्ण मिल सकती है। पूर्ववर्ती सूत्रों में, हम इष्टतम समाधान जो कोई तुलना में अधिक शामिल पुनः प्राप्त पहले के बीच में आइटम के रूप में । हालाँकि, यह स्पष्ट होना चाहिए कि यह मूल तालिका का उपयोग करके ठीक बराबर है !! अर्थात्।, आइटम से अधिक नहीं के साथ इष्टतम समाधान को 1 आइटम, 2 आइटम, 3 आइटम, ... साथ इष्टतम समाधान पर विचार करके भी पुनर्प्राप्त किया जा सकता है।(k−1)(j−1)Ti,j−1,k−1maxp=0,j−1{Ti,p}k(j−1)आइटम ... इस सूत्रीकरण कार्य को करने के लिए आपको हर आंशिक समाधान में विचार की गई वस्तुओं की संख्या पर भी नज़र रखनी चाहिए ताकि आपको प्रत्येक सेल में दो पूर्णांकों की आवश्यकता पड़े। यह स्मृति कब्जे एल्गोरिथ्म ऊपर दिखाए गए (परतों के रूप में एक तीसरे आयाम का उपयोग करने का ठीक उसी स्मृति जरूरतों के मामले में परिणाम )k ।
उम्मीद है की यह मदद करेगा,