उपसमुच्चय योग समस्या: Difference between revisions

From Vigyanwiki
(Created page with "{{Short description|Decision problem in computer science}} उपसमुच्चय योग समस्या (एसएसपी) कंप्यूटर विज...")
 
No edit summary
Line 1: Line 1:
{{Short description|Decision problem in computer science}}
{{Short description|Decision problem in computer science}}
उपसमुच्चय योग समस्या (एसएसपी) [[कंप्यूटर विज्ञान]] में एक [[निर्णय समस्या]] है। इसके सबसे सामान्य सूत्रीकरण में, एक [[मल्टीसेट]] है <math>S</math> पूर्णांकों और एक लक्ष्य-योग का <math>T</math>, और प्रश्न यह तय करना है कि क्या पूर्णांकों का कोई उपसमुच्चय सटीक रूप से योग करता है <math>T</math>.<ref name="kleinberg2006p491">{{cite book|last1=Kleinberg|first1=Jon|url=https://archive.org/details/algorithmdesign0000klei|title=एल्गोरिथम डिज़ाइन|last2=Tardos|first2=Éva|year=2006|isbn=0-321-37291-3|edition=2nd|page=[https://archive.org/details/algorithmdesign0000klei/page/491 491]|url-access=registration}}</ref> समस्या को [[ एनपी कठिन ]] माना जाता है। इसके अलावा, इसके कुछ प्रतिबंधित संस्करण एनपी-पूर्णता|एनपी-पूर्ण भी हैं, उदाहरण के लिए:<ref name="kleinberg2006p491" />
उपसमुच्चय योग समस्या (एसएसपी) [[कंप्यूटर विज्ञान]] में [[निर्णय समस्या]] है। इसके सबसे सामान्य सूत्रीकरण में, [[मल्टीसेट]] है <math>S</math> पूर्णांकों और लक्ष्य-योग का <math>T</math>, और प्रश्न यह तय करना है कि क्या पूर्णांकों का कोई उपसमुच्चय सटीक रूप से योग करता है <math>T</math>.<ref name="kleinberg2006p491">{{cite book|last1=Kleinberg|first1=Jon|url=https://archive.org/details/algorithmdesign0000klei|title=एल्गोरिथम डिज़ाइन|last2=Tardos|first2=Éva|year=2006|isbn=0-321-37291-3|edition=2nd|page=[https://archive.org/details/algorithmdesign0000klei/page/491 491]|url-access=registration}}</ref> समस्या को [[ एनपी कठिन |एनपी कठिन]] माना जाता है। इसके अलावा, इसके कुछ प्रतिबंधित संस्करण एनपी-पूर्णता|एनपी-पूर्ण भी हैं, उदाहरण के लिए:<ref name="kleinberg2006p491" />


* वह वैरिएंट जिसमें सभी इनपुट सकारात्मक हैं।
* वह वैरिएंट जिसमें सभी इनपुट सकारात्मक हैं।
Line 6: Line 6:
* वह वैरिएंट जिसमें सभी इनपुट सकारात्मक हैं, और लक्ष्य योग सभी इनपुट के योग का बिल्कुल आधा है, यानी, <math> T = \frac{1}{2}(a_1+\dots+a_n)</math> . एसएसपी के इस विशेष मामले को विभाजन समस्या के रूप में जाना जाता है।
* वह वैरिएंट जिसमें सभी इनपुट सकारात्मक हैं, और लक्ष्य योग सभी इनपुट के योग का बिल्कुल आधा है, यानी, <math> T = \frac{1}{2}(a_1+\dots+a_n)</math> . एसएसपी के इस विशेष मामले को विभाजन समस्या के रूप में जाना जाता है।


एसएसपी को एक [[अनुकूलन समस्या]] के रूप में भी माना जा सकता है: एक उपसमुच्चय ढूंढें जिसका योग अधिकतम टी है, और उसके अधीन, जितना संभव हो टी के करीब। यह एनपी-हार्ड है, लेकिन कई एल्गोरिदम हैं जो इसे उचित रूप से जल्दी से हल कर सकते हैं अभ्यास।
एसएसपी को [[अनुकूलन समस्या]] के रूप में भी माना जा सकता है: उपसमुच्चय ढूंढें जिसका योग अधिकतम टी है, और उसके अधीन, जितना संभव हो टी के करीब। यह एनपी-हार्ड है, लेकिन कई एल्गोरिदम हैं जो इसे उचित रूप से जल्दी से हल कर सकते हैं अभ्यास।


एसएसपी नैपसैक समस्या और [[एकाधिक उपसमुच्चय योग]] समस्या का एक विशेष मामला है।
एसएसपी नैपसैक समस्या और [[एकाधिक उपसमुच्चय योग]] समस्या का विशेष मामला है।


== कम्प्यूटेशनल कठोरता ==
== कम्प्यूटेशनल कठोरता ==
Line 14: Line 14:
SSP की [[रन-टाइम जटिलता]] दो मापदंडों पर निर्भर करती है:
SSP की [[रन-टाइम जटिलता]] दो मापदंडों पर निर्भर करती है:


* {{nobold|''n''}} - इनपुट पूर्णांकों की संख्या. यदि n एक छोटी निश्चित संख्या है, तो समाधान के लिए एक विस्तृत खोज व्यावहारिक है।
* {{nobold|''n''}} - इनपुट पूर्णांकों की संख्या. यदि n छोटी निश्चित संख्या है, तो समाधान के लिए विस्तृत खोज व्यावहारिक है।
* {{nobold|''L''}} - समस्या की सटीकता, समस्या को बताने के लिए लगने वाले द्विआधारी स्थानीय मानों की संख्या के रूप में बताई गई है। यदि L एक छोटी निश्चित संख्या है, तो [[गतिशील प्रोग्रामिंग]] एल्गोरिदम हैं जो इसे सटीक रूप से हल कर सकते हैं।
* {{nobold|''L''}} - समस्या की सटीकता, समस्या को बताने के लिए लगने वाले द्विआधारी स्थानीय मानों की संख्या के रूप में बताई गई है। यदि L छोटी निश्चित संख्या है, तो [[गतिशील प्रोग्रामिंग]] एल्गोरिदम हैं जो इसे सटीक रूप से हल कर सकते हैं।


जैसे-जैसे n और L दोनों बड़े होते जाते हैं, SSP NP-हार्ड होता है। सबसे प्रसिद्ध एल्गोरिदम की जटिलता दो मापदंडों n और L में से छोटे में [[घातीय समय]] है। समस्या एनपी-हार्ड है, तब भी जब सभी इनपुट पूर्णांक सकारात्मक होते हैं (और लक्ष्य-योग टी इनपुट का एक हिस्सा है)। इसे [[3SAT]] से प्रत्यक्ष कमी द्वारा सिद्ध किया जा सकता है।<ref>{{Cite web |last=Goodrich |first=Michael |title=अधिक एनपी पूर्ण और एनपी कठिन समस्याएं|url=https://www.ics.uci.edu/~goodrich/teach/cs162/notes/pnp3.pdf |archive-url=https://ghostarchive.org/archive/20221009/https://www.ics.uci.edu/~goodrich/teach/cs162/notes/pnp3.pdf |archive-date=2022-10-09 |url-status=live}}</ref> इसे [[3-आयामी मिलान]] (3DM) से कमी करके भी सिद्ध किया जा सकता है:<ref name="garey79">{{Garey-Johnson}}, Section&nbsp;3.1 and problem&nbsp;SP1 in Appendix&nbsp;A.3.1.</ref>
जैसे-जैसे n और L दोनों बड़े होते जाते हैं, SSP NP-हार्ड होता है। सबसे प्रसिद्ध एल्गोरिदम की जटिलता दो मापदंडों n और L में से छोटे में [[घातीय समय]] है। समस्या एनपी-हार्ड है, तब भी जब सभी इनपुट पूर्णांक सकारात्मक होते हैं (और लक्ष्य-योग टी इनपुट का हिस्सा है)। इसे [[3SAT]] से प्रत्यक्ष कमी द्वारा सिद्ध किया जा सकता है।<ref>{{Cite web |last=Goodrich |first=Michael |title=अधिक एनपी पूर्ण और एनपी कठिन समस्याएं|url=https://www.ics.uci.edu/~goodrich/teach/cs162/notes/pnp3.pdf |archive-url=https://ghostarchive.org/archive/20221009/https://www.ics.uci.edu/~goodrich/teach/cs162/notes/pnp3.pdf |archive-date=2022-10-09 |url-status=live}}</ref> इसे [[3-आयामी मिलान]] (3DM) से कमी करके भी सिद्ध किया जा सकता है:<ref name="garey79">{{Garey-Johnson}}, Section&nbsp;3.1 and problem&nbsp;SP1 in Appendix&nbsp;A.3.1.</ref>
* हमें 3DM का एक उदाहरण दिया गया है, जहां शीर्ष सेट W, X, Y हैं। प्रत्येक सेट में n शीर्ष हैं। वहाँ m किनारे हैं, जहाँ प्रत्येक किनारे में W,<sub>2</sub>(एम+1)), ताकि एल किनारों की संख्या का प्रतिनिधित्व करने के लिए आवश्यक बिट्स की संख्या से बड़ा हो।
* हमें 3DM का उदाहरण दिया गया है, जहां शीर्ष सेट W, X, Y हैं। प्रत्येक सेट में n शीर्ष हैं। वहाँ m किनारे हैं, जहाँ प्रत्येक किनारे में W,<sub>2</sub>(एम+1)), ताकि एल किनारों की संख्या का प्रतिनिधित्व करने के लिए आवश्यक बिट्स की संख्या से बड़ा हो।
* हम m धनात्मक पूर्णांकों के साथ SSP का एक उदाहरण बनाते हैं। पूर्णांकों का वर्णन उनके द्विआधारी निरूपण द्वारा किया जाता है। प्रत्येक इनपुट पूर्णांक को 3nL बिट्स द्वारा दर्शाया जा सकता है, जिसे L बिट्स के 3n ज़ोन में विभाजित किया गया है। प्रत्येक क्षेत्र एक शीर्ष से मेल खाता है।
* हम m धनात्मक पूर्णांकों के साथ SSP का उदाहरण बनाते हैं। पूर्णांकों का वर्णन उनके द्विआधारी निरूपण द्वारा किया जाता है। प्रत्येक इनपुट पूर्णांक को 3nL बिट्स द्वारा दर्शाया जा सकता है, जिसे L बिट्स के 3n ज़ोन में विभाजित किया गया है। प्रत्येक क्षेत्र शीर्ष से मेल खाता है।
* 3DM उदाहरण में प्रत्येक किनारे (w,x,y) के लिए, SSP उदाहरण में एक पूर्णांक होता है, जिसमें बिल्कुल तीन बिट्स 1 होते हैं: शीर्ष w, x, और y के क्षेत्रों में सबसे कम महत्वपूर्ण बिट्स . उदाहरण के लिए, यदि n=10 और L=3, और W=(0,...,9), X=(10,...,19), Y=(20,...,29), तो किनारे (0, 10, 20) को संख्या (2) द्वारा दर्शाया गया है<sup>0</sup>+2<sup>30</sup>+2<sup>60</sup>).
* 3DM उदाहरण में प्रत्येक किनारे (w,x,y) के लिए, SSP उदाहरण में पूर्णांक होता है, जिसमें बिल्कुल तीन बिट्स 1 होते हैं: शीर्ष w, x, और y के क्षेत्रों में सबसे कम महत्वपूर्ण बिट्स . उदाहरण के लिए, यदि n=10 और L=3, और W=(0,...,9), X=(10,...,19), Y=(20,...,29), तो किनारे (0, 10, 20) को संख्या (2) द्वारा दर्शाया गया है<sup>0</sup>+2<sup>30</sup>+2<sup>60</sup>).
* एसएसपी उदाहरण में लक्ष्य योग टी को प्रत्येक क्षेत्र के सबसे कम-महत्वपूर्ण बिट में 1 के साथ पूर्णांक पर सेट किया गया है, यानी (2)<sup>0</sup>+2<sup>1</sup>+...+2<sup>3एन-1</sup>).
* एसएसपी उदाहरण में लक्ष्य योग टी को प्रत्येक क्षेत्र के सबसे कम-महत्वपूर्ण बिट में 1 के साथ पूर्णांक पर सेट किया गया है, यानी (2)<sup>0</sup>+2<sup>1</sup>+...+2<sup>3एन-1</sup>).
* यदि 3DM उदाहरण में पूर्ण मिलान है, तो SSP उदाहरण में संबंधित पूर्णांकों का योग बिल्कुल T प्राप्त करता है।
* यदि 3DM उदाहरण में पूर्ण मिलान है, तो SSP उदाहरण में संबंधित पूर्णांकों का योग बिल्कुल T प्राप्त करता है।
* इसके विपरीत, यदि SSP उदाहरण में बिल्कुल T योग के साथ एक उपसमुच्चय है, तो, चूंकि क्षेत्र पर्याप्त रूप से बड़े हैं ताकि एक क्षेत्र से दूसरे क्षेत्र में कोई स्थानांतरण न हो, योग को 3DM उदाहरण में पूर्ण मिलान के अनुरूप होना चाहिए।
* इसके विपरीत, यदि SSP उदाहरण में बिल्कुल T योग के साथ उपसमुच्चय है, तो, चूंकि क्षेत्र पर्याप्त रूप से बड़े हैं ताकि क्षेत्र से दूसरे क्षेत्र में कोई स्थानांतरण न हो, योग को 3DM उदाहरण में पूर्ण मिलान के अनुरूप होना चाहिए।


निम्नलिखित वेरिएंट को एनपी-हार्ड के रूप में भी जाना जाता है:
निम्नलिखित वेरिएंट को एनपी-हार्ड के रूप में भी जाना जाता है:


* इनपुट पूर्णांक धनात्मक और ऋणात्मक दोनों हो सकते हैं, और लक्ष्य-योग T = 0. इसे धनात्मक पूर्णांक वाले वैरिएंट से घटाकर सिद्ध किया जा सकता है। उस वैरिएंट को SubsetSumPositive से और वर्तमान वैरिएंट को SubsetSumZero से निरूपित करें। SubsetSumPositive के एक उदाहरण (S, T) को देखते हुए, −T मान के साथ एक तत्व जोड़कर SubsetSumZero का एक उदाहरण बनाएं। SubsetSumPositive उदाहरण के समाधान को देखते हुए, −T जोड़ने से SubsetSumZero उदाहरण का समाधान प्राप्त होता है। इसके विपरीत, SubsetSumZero उदाहरण के समाधान को देखते हुए, इसमें −T होना चाहिए (चूंकि S में सभी पूर्णांक सकारात्मक हैं), इसलिए शून्य का योग प्राप्त करने के लिए, इसमें +T के योग के साथ S का एक उपसमुच्चय भी होना चाहिए, जो SubsetSumPositive उदाहरण का एक समाधान है।
* इनपुट पूर्णांक धनात्मक और ऋणात्मक दोनों हो सकते हैं, और लक्ष्य-योग T = 0. इसे धनात्मक पूर्णांक वाले वैरिएंट से घटाकर सिद्ध किया जा सकता है। उस वैरिएंट को SubsetSumPositive से और वर्तमान वैरिएंट को SubsetSumZero से निरूपित करें। SubsetSumPositive के उदाहरण (S, T) को देखते हुए, −T मान के साथ तत्व जोड़कर SubsetSumZero का उदाहरण बनाएं। SubsetSumPositive उदाहरण के समाधान को देखते हुए, −T जोड़ने से SubsetSumZero उदाहरण का समाधान प्राप्त होता है। इसके विपरीत, SubsetSumZero उदाहरण के समाधान को देखते हुए, इसमें −T होना चाहिए (चूंकि S में सभी पूर्णांक सकारात्मक हैं), इसलिए शून्य का योग प्राप्त करने के लिए, इसमें +T के योग के साथ S का उपसमुच्चय भी होना चाहिए, जो SubsetSumPositive उदाहरण का समाधान है।
*इनपुट पूर्णांक सकारात्मक हैं, और टी = योग(एस)/2। इसे सामान्य प्रकार से कमी करके भी सिद्ध किया जा सकता है; विभाजन समस्या देखें.
*इनपुट पूर्णांक सकारात्मक हैं, और टी = योग(एस)/2। इसे सामान्य प्रकार से कमी करके भी सिद्ध किया जा सकता है; विभाजन समस्या देखें.


Line 41: Line 41:
सबसे सरल समाधान|भोला एल्गोरिदम एन संख्याओं के सभी उपसमूहों के माध्यम से चक्र करना होगा और, उनमें से प्रत्येक के लिए, यह जांचना होगा कि उपसमुच्चय का योग सही संख्या में है या नहीं। चलने का समय व्यवस्थित है <math>O(2^n \cdot n)</math>, क्योंकि वहां हैं <math>2^n</math> उपसमुच्चय और, प्रत्येक उपसमुच्चय की जाँच करने के लिए, हमें अधिकतम n तत्वों का योग करना होगा।
सबसे सरल समाधान|भोला एल्गोरिदम एन संख्याओं के सभी उपसमूहों के माध्यम से चक्र करना होगा और, उनमें से प्रत्येक के लिए, यह जांचना होगा कि उपसमुच्चय का योग सही संख्या में है या नहीं। चलने का समय व्यवस्थित है <math>O(2^n \cdot n)</math>, क्योंकि वहां हैं <math>2^n</math> उपसमुच्चय और, प्रत्येक उपसमुच्चय की जाँच करने के लिए, हमें अधिकतम n तत्वों का योग करना होगा।


एल्गोरिथ्म को बाइनरी ट्री की [[गहराई-पहली खोज]] द्वारा कार्यान्वित किया जा सकता है: ट्री में प्रत्येक स्तर एक इनपुट संख्या से मेल खाता है; बायीं शाखा सेट से संख्या को बाहर करने से मेल खाती है, और दाहिनी शाखा संख्या को शामिल करने से मेल खाती है (इसलिए नाम समावेशन-बहिष्करण)। आवश्यक स्मृति है <math>O(n)</math>. रन-टाइम को कई अनुमानों द्वारा बेहतर बनाया जा सकता है:<ref name=":0" />
एल्गोरिथ्म को बाइनरी ट्री की [[गहराई-पहली खोज]] द्वारा कार्यान्वित किया जा सकता है: ट्री में प्रत्येक स्तर इनपुट संख्या से मेल खाता है; बायीं शाखा सेट से संख्या को बाहर करने से मेल खाती है, और दाहिनी शाखा संख्या को शामिल करने से मेल खाती है (इसलिए नाम समावेशन-बहिष्करण)। आवश्यक स्मृति है <math>O(n)</math>. रन-टाइम को कई अनुमानों द्वारा बेहतर बनाया जा सकता है:<ref name=":0" />


* इनपुट संख्याओं को घटते क्रम में संसाधित करें।
* इनपुट संख्याओं को घटते क्रम में संसाधित करें।
Line 48: Line 48:


=== होरोविट्ज़ और साहनी ===
=== होरोविट्ज़ और साहनी ===
1974 में, होरोविट्ज़ और [[सरताज साहनी]]<ref>{{cite journal|last1=Horowitz|first1=Ellis|title=नैपसैक समस्या के अनुप्रयोगों के साथ विभाजन की गणना करना|url=https://ecommons.cornell.edu/bitstream/1813/5989/1/72-134.pdf |archive-url=https://ghostarchive.org/archive/20221009/https://ecommons.cornell.edu/bitstream/1813/5989/1/72-134.pdf |archive-date=2022-10-09 |url-status=live|journal=[[Journal of the Association for Computing Machinery]]|volume=21|issue=2|pages=277–292|year=1974|doi=10.1145/321812.321823|mr=0354006|last2=Sahni|first2=Sartaj|author2-link=Sartaj Sahni|hdl=1813/5989|s2cid=16866858|hdl-access=free}}</ref> एक तेज़ घातीय-समय एल्गोरिदम प्रकाशित किया, जो समय में चलता है <math>O( 2^{n/2}\cdot (n/2))</math>, लेकिन बहुत अधिक स्थान की आवश्यकता है - <math>O( 2^{n/2})</math>. एल्गोरिथ्म मनमाने ढंग से n तत्वों को दो सेटों में विभाजित करता है <math>n/2</math> प्रत्येक। इन दो सेटों में से प्रत्येक के लिए, यह सभी के योगों की एक सूची संग्रहीत करता है <math>2^{n/2}</math> इसके तत्वों के संभावित उपसमुच्चय। फिर इन दोनों सूचियों में से प्रत्येक को क्रमबद्ध किया जाता है। यहां तक ​​कि सबसे तेज़ तुलना सॉर्टिंग एल्गोरिदम का उपयोग करते हुए, इस चरण के लिए मर्जसॉर्ट को समय लगेगा <math>O(2^{n/2}n)</math>. हालाँकि, इसके लिए रकम की एक क्रमबद्ध सूची दी गई है <math>k</math> तत्वों, सूची को (की शुरूआत के साथ दो क्रमबद्ध सूचियों तक विस्तारित किया जा सकता है<math>k+1</math>)वां तत्व, और इन दो क्रमबद्ध सूचियों को समय में मर्ज किया जा सकता है <math>O(2^k)</math>. इस प्रकार, प्रत्येक सूची को समय पर क्रमबद्ध रूप में तैयार किया जा सकता है <math>O(2^{n/2})</math>. दो क्रमबद्ध सूचियों को देखते हुए, एल्गोरिदम जांच कर सकता है कि पहले सरणी का एक तत्व और दूसरे सरणी का एक तत्व समय में टी तक है या नहीं <math>O(2^{n/2})</math>. ऐसा करने के लिए, एल्गोरिदम पहले एरे से घटते क्रम में (सबसे बड़े तत्व से शुरू) और दूसरे एरे से बढ़ते क्रम में (सबसे छोटे तत्व से शुरू) गुजरता है। जब भी पहले एरे में वर्तमान तत्व और दूसरे एरे में वर्तमान तत्व का योग टी से अधिक होता है, तो एल्गोरिदम पहले एरे में अगले तत्व पर चला जाता है। यदि यह टी से कम है, तो एल्गोरिदम दूसरे सरणी में अगले तत्व पर चला जाता है। यदि T के योग वाले दो तत्व पाए जाते हैं, तो यह रुक जाता है। (दो तत्वों के योग की उप-समस्या को दो-योग के रूप में जाना जाता है।<ref>{{Cite web |title=दो-योग समस्या|url=https://www3.cs.uic.edu/pub/CS211/LabsS18/Two-Sum.pdf |archive-url=https://ghostarchive.org/archive/20221009/https://www3.cs.uic.edu/pub/CS211/LabsS18/Two-Sum.pdf |archive-date=2022-10-09 |url-status=live}}</ref>)
1974 में, होरोविट्ज़ और [[सरताज साहनी]]<ref>{{cite journal|last1=Horowitz|first1=Ellis|title=नैपसैक समस्या के अनुप्रयोगों के साथ विभाजन की गणना करना|url=https://ecommons.cornell.edu/bitstream/1813/5989/1/72-134.pdf |archive-url=https://ghostarchive.org/archive/20221009/https://ecommons.cornell.edu/bitstream/1813/5989/1/72-134.pdf |archive-date=2022-10-09 |url-status=live|journal=[[Journal of the Association for Computing Machinery]]|volume=21|issue=2|pages=277–292|year=1974|doi=10.1145/321812.321823|mr=0354006|last2=Sahni|first2=Sartaj|author2-link=Sartaj Sahni|hdl=1813/5989|s2cid=16866858|hdl-access=free}}</ref> तेज़ घातीय-समय एल्गोरिदम प्रकाशित किया, जो समय में चलता है <math>O( 2^{n/2}\cdot (n/2))</math>, लेकिन बहुत अधिक स्थान की आवश्यकता है - <math>O( 2^{n/2})</math>. एल्गोरिथ्म मनमाने ढंग से n तत्वों को दो सेटों में विभाजित करता है <math>n/2</math> प्रत्येक। इन दो सेटों में से प्रत्येक के लिए, यह सभी के योगों की सूची संग्रहीत करता है <math>2^{n/2}</math> इसके तत्वों के संभावित उपसमुच्चय। फिर इन दोनों सूचियों में से प्रत्येक को क्रमबद्ध किया जाता है। यहां तक ​​कि सबसे तेज़ तुलना सॉर्टिंग एल्गोरिदम का उपयोग करते हुए, इस चरण के लिए मर्जसॉर्ट को समय लगेगा <math>O(2^{n/2}n)</math>. हालाँकि, इसके लिए रकम की क्रमबद्ध सूची दी गई है <math>k</math> तत्वों, सूची को (की शुरूआत के साथ दो क्रमबद्ध सूचियों तक विस्तारित किया जा सकता है<math>k+1</math>)वां तत्व, और इन दो क्रमबद्ध सूचियों को समय में मर्ज किया जा सकता है <math>O(2^k)</math>. इस प्रकार, प्रत्येक सूची को समय पर क्रमबद्ध रूप में तैयार किया जा सकता है <math>O(2^{n/2})</math>. दो क्रमबद्ध सूचियों को देखते हुए, एल्गोरिदम जांच कर सकता है कि पहले सरणी का तत्व और दूसरे सरणी का तत्व समय में टी तक है या नहीं <math>O(2^{n/2})</math>. ऐसा करने के लिए, एल्गोरिदम पहले एरे से घटते क्रम में (सबसे बड़े तत्व से शुरू) और दूसरे एरे से बढ़ते क्रम में (सबसे छोटे तत्व से शुरू) गुजरता है। जब भी पहले एरे में वर्तमान तत्व और दूसरे एरे में वर्तमान तत्व का योग टी से अधिक होता है, तो एल्गोरिदम पहले एरे में अगले तत्व पर चला जाता है। यदि यह टी से कम है, तो एल्गोरिदम दूसरे सरणी में अगले तत्व पर चला जाता है। यदि T के योग वाले दो तत्व पाए जाते हैं, तो यह रुक जाता है। (दो तत्वों के योग की उप-समस्या को दो-योग के रूप में जाना जाता है।<ref>{{Cite web |title=दो-योग समस्या|url=https://www3.cs.uic.edu/pub/CS211/LabsS18/Two-Sum.pdf |archive-url=https://ghostarchive.org/archive/20221009/https://www3.cs.uic.edu/pub/CS211/LabsS18/Two-Sum.pdf |archive-date=2022-10-09 |url-status=live}}</ref>)


=== श्रोएप्पेल और शमीर ===
=== श्रोएप्पेल और शमीर ===
1981 में, [[रिचर्ड श्रोएप]]्पेल और [[आदि शमीर]] ने एक एल्गोरिदम प्रस्तुत किया<ref>{{Cite journal|last1=Schroeppel|first1=Richard|last2=Shamir|first2=Adi|date=1981-08-01|title=A {{math|''T'' {{=}} ''O''(2<sup>''n''/2</sup>)}}, {{math|''S'' {{=}} ''O''(2<sup>''n''/4</sup>)}} algorithm for certain NP-complete problems|url=https://epubs.siam.org/doi/abs/10.1137/0210033|journal=SIAM Journal on Computing|volume=10|issue=3|pages=456–464|doi=10.1137/0210033|issn=0097-5397}}</ref> होरोविट्ज़ और सानही पर आधारित, जिसके लिए समान रनटाइम की आवश्यकता होती है - <math>O( 2^{n/2}\cdot (n/4))</math>, बहुत कम जगह - <math>O(2^{n/4})</math>. n/2 तत्वों के सभी उपसमूहों को पहले से बनाने और संग्रहीत करने के बजाय, वे तत्वों को n/4 तत्वों के 4 सेटों में विभाजित करते हैं, और [[न्यूनतम ढेर]] का उपयोग करके गतिशील रूप से n/2 तत्व जोड़े के सबसेट उत्पन्न करते हैं, जो उपरोक्त समय प्राप्त करता है और अंतरिक्ष की जटिलताएँ क्योंकि यह किया जा सकता है <math>O(k^{2}\log(k))</math> और स्थान <math>O(k)</math> लंबाई k की 4 सूचियाँ दी गई हैं।
1981 में, [[रिचर्ड श्रोएप]]्पेल और [[आदि शमीर]] ने एल्गोरिदम प्रस्तुत किया<ref>{{Cite journal|last1=Schroeppel|first1=Richard|last2=Shamir|first2=Adi|date=1981-08-01|title=A {{math|''T'' {{=}} ''O''(2<sup>''n''/2</sup>)}}, {{math|''S'' {{=}} ''O''(2<sup>''n''/4</sup>)}} algorithm for certain NP-complete problems|url=https://epubs.siam.org/doi/abs/10.1137/0210033|journal=SIAM Journal on Computing|volume=10|issue=3|pages=456–464|doi=10.1137/0210033|issn=0097-5397}}</ref> होरोविट्ज़ और सानही पर आधारित, जिसके लिए समान रनटाइम की आवश्यकता होती है - <math>O( 2^{n/2}\cdot (n/4))</math>, बहुत कम जगह - <math>O(2^{n/4})</math>. n/2 तत्वों के सभी उपसमूहों को पहले से बनाने और संग्रहीत करने के बजाय, वे तत्वों को n/4 तत्वों के 4 सेटों में विभाजित करते हैं, और [[न्यूनतम ढेर]] का उपयोग करके गतिशील रूप से n/2 तत्व जोड़े के सबसेट उत्पन्न करते हैं, जो उपरोक्त समय प्राप्त करता है और अंतरिक्ष की जटिलताएँ क्योंकि यह किया जा सकता है <math>O(k^{2}\log(k))</math> और स्थान <math>O(k)</math> लंबाई k की 4 सूचियाँ दी गई हैं।


स्थान आवश्यकताओं के कारण, एचएस एल्गोरिदम लगभग 50 पूर्णांकों तक के लिए व्यावहारिक है, और एसएस एल्गोरिदम 100 पूर्णांकों तक के लिए व्यावहारिक है।<ref name=":0" />
स्थान आवश्यकताओं के कारण, एचएस एल्गोरिदम लगभग 50 पूर्णांकों तक के लिए व्यावहारिक है, और एसएस एल्गोरिदम 100 पूर्णांकों तक के लिए व्यावहारिक है।<ref name=":0" />
Line 57: Line 57:


=== हाउग्रेव-ग्राहम और जौक्स ===
=== हाउग्रेव-ग्राहम और जौक्स ===
2010 में, हाउग्रेव-ग्राहम और जौक्स<ref>{{Cite book|last1=Howgrave-Graham|first1=Nick|last2=Joux|first2=Antoine|title=Advances in Cryptology – EUROCRYPT 2010 |chapter=New Generic Algorithms for Hard Knapsacks |date=2010|editor-last=Gilbert|editor-first=Henri|series=Lecture Notes in Computer Science|volume=6110|language=en|location=Berlin, Heidelberg|publisher=Springer|pages=235–256|doi=10.1007/978-3-642-13190-5_12|isbn=978-3-642-13190-5|doi-access=free}}</ref> एक [[संभाव्य एल्गोरिथ्म]] प्रस्तुत किया जो पिछले सभी एल्गोरिदम की तुलना में समय में तेजी से चलता है <math>O(2^{.337n})</math> स्थान का उपयोग करना <math>O(2^{.256n})</math>. यह केवल निर्णय की समस्या को हल करता है, यह साबित नहीं कर सकता कि किसी दिए गए योग का कोई समाधान नहीं है, और टी के निकटतम सबसेट योग को वापस नहीं करता है।
2010 में, हाउग्रेव-ग्राहम और जौक्स<ref>{{Cite book|last1=Howgrave-Graham|first1=Nick|last2=Joux|first2=Antoine|title=Advances in Cryptology – EUROCRYPT 2010 |chapter=New Generic Algorithms for Hard Knapsacks |date=2010|editor-last=Gilbert|editor-first=Henri|series=Lecture Notes in Computer Science|volume=6110|language=en|location=Berlin, Heidelberg|publisher=Springer|pages=235–256|doi=10.1007/978-3-642-13190-5_12|isbn=978-3-642-13190-5|doi-access=free}}</ref> [[संभाव्य एल्गोरिथ्म]] प्रस्तुत किया जो पिछले सभी एल्गोरिदम की तुलना में समय में तेजी से चलता है <math>O(2^{.337n})</math> स्थान का उपयोग करना <math>O(2^{.256n})</math>. यह केवल निर्णय की समस्या को हल करता है, यह साबित नहीं कर सकता कि किसी दिए गए योग का कोई समाधान नहीं है, और टी के निकटतम सबसेट योग को वापस नहीं करता है।


हाउग्रेव-ग्राहम और जौक्स की तकनीकों को बाद में विस्तारित किया गया <ref>{{Cite book|last1=Becker|first1=Anja|last2=Joux|first2=Antoine|title=Advances in Cryptology – EUROCRYPT 2011 |chapter=Improved Generic Algorithms for Hard Knapsacks |date=2010|editor-last=Gilbert|editor-first=Henri|series=Lecture Notes in Computer Science|volume=6632|language=en|location=Berlin, Heidelberg|publisher=Springer|pages=364–385|doi=10.1007/978-3-642-20465-4_21|isbn=978-3-642-20465-4|doi-access=free}}</ref> समय-जटिलता को लाना <math>O(2^{.291n})</math>.
हाउग्रेव-ग्राहम और जौक्स की तकनीकों को बाद में विस्तारित किया गया <ref>{{Cite book|last1=Becker|first1=Anja|last2=Joux|first2=Antoine|title=Advances in Cryptology – EUROCRYPT 2011 |chapter=Improved Generic Algorithms for Hard Knapsacks |date=2010|editor-last=Gilbert|editor-first=Henri|series=Lecture Notes in Computer Science|volume=6632|language=en|location=Berlin, Heidelberg|publisher=Springer|pages=364–385|doi=10.1007/978-3-642-20465-4_21|isbn=978-3-642-20465-4|doi-access=free}}</ref> समय-जटिलता को लाना <math>O(2^{.291n})</math>.
Line 63: Line 63:
== छद्म-बहुपद समय गतिशील प्रोग्रामिंग समाधान ==
== छद्म-बहुपद समय गतिशील प्रोग्रामिंग समाधान ==


गतिशील प्रोग्रामिंग का उपयोग करके एसएसपी को छद्म-बहुपद समय में हल किया जा सकता है। मान लीजिए कि हमारे पास एक उदाहरण में तत्वों का निम्नलिखित क्रम है:
गतिशील प्रोग्रामिंग का उपयोग करके एसएसपी को छद्म-बहुपद समय में हल किया जा सकता है। मान लीजिए कि हमारे पास उदाहरण में तत्वों का निम्नलिखित क्रम है:


:<math>x_1,\ldots, x_N</math>
:<math>x_1,\ldots, x_N</math>
हम एक अवस्था को पूर्णांकों के युग्म (i, s) के रूप में परिभाषित करते हैं। यह राज्य इस बात का प्रतिनिधित्व करता है कि
हम अवस्था को पूर्णांकों के युग्म (i, s) के रूप में परिभाषित करते हैं। यह राज्य इस बात का प्रतिनिधित्व करता है कि


: का एक अरिक्त उपसमुच्चय है <math>x_1,\ldots, x_i</math> जो बताता है {{mvar|s}}.
: का अरिक्त उपसमुच्चय है <math>x_1,\ldots, x_i</math> जो बताता है {{mvar|s}}.


प्रत्येक राज्य (i, s) के दो अगले राज्य हैं:
प्रत्येक राज्य (i, s) के दो अगले राज्य हैं:
Line 75: Line 75:
* (आई+1, एस+<math>x_{i+1}</math>), जिसका अर्थ है <math>x_{i+1}</math> उपसमुच्चय में सम्मिलित है।
* (आई+1, एस+<math>x_{i+1}</math>), जिसका अर्थ है <math>x_{i+1}</math> उपसमुच्चय में सम्मिलित है।


प्रारंभिक स्थिति (0, 0) से शुरू करके, स्थिति (एन, टी) की खोज के लिए किसी भी ग्राफ़ खोज एल्गोरिदम (उदाहरण के लिए चौड़ाई-पहली खोज) का उपयोग करना संभव है। यदि स्थिति पाई जाती है, तो पीछे जाकर हम बिल्कुल टी के योग के साथ एक उपसमुच्चय पा सकते हैं।
प्रारंभिक स्थिति (0, 0) से शुरू करके, स्थिति (एन, टी) की खोज के लिए किसी भी ग्राफ़ खोज एल्गोरिदम (उदाहरण के लिए चौड़ाई-पहली खोज) का उपयोग करना संभव है। यदि स्थिति पाई जाती है, तो पीछे जाकर हम बिल्कुल टी के योग के साथ उपसमुच्चय पा सकते हैं।


इस एल्गोरिदम का रन-टाइम राज्यों की संख्या में अधिकतम रैखिक है। राज्यों की संख्या विभिन्न संभावित योगों की संख्या से अधिकतम N गुना है। होने देना {{mvar|A}} ऋणात्मक मानों का योग हो और {{mvar|B}} सकारात्मक मानों का योग; विभिन्न संभावित योगों की संख्या अधिकतम B-A है, इसलिए कुल रनटाइम है <math>O(N(B-A))</math>. उदाहरण के लिए, यदि सभी इनपुट मान सकारात्मक हैं और कुछ स्थिरांक C से बंधे हैं, तो B अधिकतम N C है, इसलिए आवश्यक समय है <math>O(N^{2}C)</math>.
इस एल्गोरिदम का रन-टाइम राज्यों की संख्या में अधिकतम रैखिक है। राज्यों की संख्या विभिन्न संभावित योगों की संख्या से अधिकतम N गुना है। होने देना {{mvar|A}} ऋणात्मक मानों का योग हो और {{mvar|B}} सकारात्मक मानों का योग; विभिन्न संभावित योगों की संख्या अधिकतम B-A है, इसलिए कुल रनटाइम है <math>O(N(B-A))</math>. उदाहरण के लिए, यदि सभी इनपुट मान सकारात्मक हैं और कुछ स्थिरांक C से बंधे हैं, तो B अधिकतम N C है, इसलिए आवश्यक समय है <math>O(N^{2}C)</math>.
Line 81: Line 81:
यह समाधान जटिलता सिद्धांत में बहुपद समय के रूप में नहीं गिना जाता है क्योंकि <math>B-A</math> समस्या के आकार में बहुपद नहीं है, जो कि इसे दर्शाने के लिए उपयोग की जाने वाली बिट्स की संख्या है। यह एल्गोरिथम के मानों में बहुपद है {{mvar|A}} और {{mvar|B}}, जो बिट्स की संख्या में घातीय हैं। हालाँकि, यूनरी में एन्कोड किया गया सबसेट योग P में है, तब से एन्कोडिंग का आकार B-A में रैखिक है। इसलिए, सबसेट योग केवल कमजोर एनपी-पूर्ण है।
यह समाधान जटिलता सिद्धांत में बहुपद समय के रूप में नहीं गिना जाता है क्योंकि <math>B-A</math> समस्या के आकार में बहुपद नहीं है, जो कि इसे दर्शाने के लिए उपयोग की जाने वाली बिट्स की संख्या है। यह एल्गोरिथम के मानों में बहुपद है {{mvar|A}} और {{mvar|B}}, जो बिट्स की संख्या में घातीय हैं। हालाँकि, यूनरी में एन्कोड किया गया सबसेट योग P में है, तब से एन्कोडिंग का आकार B-A में रैखिक है। इसलिए, सबसेट योग केवल कमजोर एनपी-पूर्ण है।


इस मामले के लिए कि प्रत्येक <math>x_i</math> सकारात्मक है और एक निश्चित स्थिरांक से घिरा है {{mvar|C}}, 1999 में, पिसिंगर ने समय जटिलता वाला एक रैखिक समय एल्गोरिदम पाया <math>O(NC)</math> (ध्यान दें कि यह समस्या के उस संस्करण के लिए है जहां लक्ष्य योग आवश्यक रूप से शून्य नहीं है, अन्यथा समस्या तुच्छ होगी)।<ref name="Pisinger09">{{cite journal | last = Pisinger | first = David | doi = 10.1006/jagm.1999.1034 | issue = 1 | journal = Journal of Algorithms | mr = 1712690 | pages = 1–14 | title = सीमित वजन के साथ बस्ता समस्याओं के लिए रैखिक समय एल्गोरिदम| volume = 33 | year = 1999}}</ref> 2015 में, कोइलियारिस और जू ने एक नियतिवादी पाया <math>\tilde{O}(T \sqrt N)</math> सबसेट योग समस्या के लिए एल्गोरिदम जहां {{mvar|T}} वह योग है जिसे हमें खोजने की आवश्यकता है।<ref>{{Cite arXiv|title = सबसेट योग के लिए एक तेज़ छद्मबहुपद समय एल्गोरिदम|eprint = 1507.02318 |date = 2015-07-08|first1 = Konstantinos|last1 = Koiliaris|first2 = Chao|last2 = Xu|class = cs.DS }}</ref> 2017 में, ब्रिंगमैन ने एक यादृच्छिक पाया <math>\tilde{O}(T+N)</math> समय एल्गोरिथ्म.<ref>{{cite conference | last = Bringmann | first = Karl | editor-last = Klein | editor-first = Philip N. | arxiv = 1610.04712 | contribution = A near-linear pseudopolynomial time algorithm for subset sum | doi = 10.1137/1.9781611974782.69 | pages = 1073–1084 | publisher = SIAM | title = Proceedings of the Twenty-Eighth Annual ACM-SIAM Symposium on Discrete Algorithms (SODA 2017) | year = 2017}}</ref>
इस मामले के लिए कि प्रत्येक <math>x_i</math> सकारात्मक है और निश्चित स्थिरांक से घिरा है {{mvar|C}}, 1999 में, पिसिंगर ने समय जटिलता वाला रैखिक समय एल्गोरिदम पाया <math>O(NC)</math> (ध्यान दें कि यह समस्या के उस संस्करण के लिए है जहां लक्ष्य योग आवश्यक रूप से शून्य नहीं है, अन्यथा समस्या तुच्छ होगी)।<ref name="Pisinger09">{{cite journal | last = Pisinger | first = David | doi = 10.1006/jagm.1999.1034 | issue = 1 | journal = Journal of Algorithms | mr = 1712690 | pages = 1–14 | title = सीमित वजन के साथ बस्ता समस्याओं के लिए रैखिक समय एल्गोरिदम| volume = 33 | year = 1999}}</ref> 2015 में, कोइलियारिस और जू ने नियतिवादी पाया <math>\tilde{O}(T \sqrt N)</math> सबसेट योग समस्या के लिए एल्गोरिदम जहां {{mvar|T}} वह योग है जिसे हमें खोजने की आवश्यकता है।<ref>{{Cite arXiv|title = सबसेट योग के लिए एक तेज़ छद्मबहुपद समय एल्गोरिदम|eprint = 1507.02318 |date = 2015-07-08|first1 = Konstantinos|last1 = Koiliaris|first2 = Chao|last2 = Xu|class = cs.DS }}</ref> 2017 में, ब्रिंगमैन ने यादृच्छिक पाया <math>\tilde{O}(T+N)</math> समय एल्गोरिथ्म.<ref>{{cite conference | last = Bringmann | first = Karl | editor-last = Klein | editor-first = Philip N. | arxiv = 1610.04712 | contribution = A near-linear pseudopolynomial time algorithm for subset sum | doi = 10.1137/1.9781611974782.69 | pages = 1073–1084 | publisher = SIAM | title = Proceedings of the Twenty-Eighth Annual ACM-SIAM Symposium on Discrete Algorithms (SODA 2017) | year = 2017}}</ref>
2014 में, कर्टिस और सांचेस ने [[SIMD]] मशीनों में अत्यधिक स्केलेबल एक सरल रिकर्सन पाया <math>O(N(m-x_{\min})/p)</math> समय और <math>O(N+m-x_{\min})</math> स्थान, कहाँ {{mvar|p}} प्रसंस्करण तत्वों की संख्या है, <math>m=\min(s, \sum x_i - s)</math> और <math>x_{\min}</math> निम्नतम पूर्णांक है.<ref>{{cite journal |last1=Curtis |first1=V. V. |last2=Sanches |first2=C. A. A. |title=An efficient solution to the subset-sum problem on GPU: An efficient solution to the subset-sum problem on GPU |journal=Concurrency and Computation: Practice and Experience |date=January 2016 |volume=28 |issue=1 |pages=95–113 |doi=10.1002/cpe.3636|s2cid=20927927 }}</ref> यह अब तक ज्ञात सर्वोत्तम सैद्धांतिक समानांतर जटिलता है।
2014 में, कर्टिस और सांचेस ने [[SIMD]] मशीनों में अत्यधिक स्केलेबल सरल रिकर्सन पाया <math>O(N(m-x_{\min})/p)</math> समय और <math>O(N+m-x_{\min})</math> स्थान, कहाँ {{mvar|p}} प्रसंस्करण तत्वों की संख्या है, <math>m=\min(s, \sum x_i - s)</math> और <math>x_{\min}</math> निम्नतम पूर्णांक है.<ref>{{cite journal |last1=Curtis |first1=V. V. |last2=Sanches |first2=C. A. A. |title=An efficient solution to the subset-sum problem on GPU: An efficient solution to the subset-sum problem on GPU |journal=Concurrency and Computation: Practice and Experience |date=January 2016 |volume=28 |issue=1 |pages=95–113 |doi=10.1002/cpe.3636|s2cid=20927927 }}</ref> यह अब तक ज्ञात सर्वोत्तम सैद्धांतिक समानांतर जटिलता है।


व्यावहारिक परिणामों की तुलना और एसएसपी के कठिन उदाहरणों के समाधान पर कर्टिस और सांचेस द्वारा चर्चा की गई है।<ref>{{cite journal |last1=Curtis |first1=V. V. |last2=Sanches |first2=C. A. A. |title=जीपीयू पर सबसेट-सम समस्या के लिए एक कम-स्थान एल्गोरिथ्म|journal=Computers & Operations Research |date=July 2017 |volume=83 |pages=120–124 |doi=10.1016/j.cor.2017.02.006}}</ref>
व्यावहारिक परिणामों की तुलना और एसएसपी के कठिन उदाहरणों के समाधान पर कर्टिस और सांचेस द्वारा चर्चा की गई है।<ref>{{cite journal |last1=Curtis |first1=V. V. |last2=Sanches |first2=C. A. A. |title=जीपीयू पर सबसेट-सम समस्या के लिए एक कम-स्थान एल्गोरिथ्म|journal=Computers & Operations Research |date=July 2017 |volume=83 |pages=120–124 |doi=10.1016/j.cor.2017.02.006}}</ref>
Line 89: Line 89:
== बहुपद समय सन्निकटन एल्गोरिदम ==
== बहुपद समय सन्निकटन एल्गोरिदम ==


{{More citations needed section|date=February 2021}}
मान लीजिए कि सभी इनपुट सकारात्मक हैं। एसएसपी के लिए सन्निकटन एल्गोरिदम का लक्ष्य अधिकतम टी के योग और इष्टतम योग के कम से कम आर गुना के साथ एस का उपसमूह ढूंढना है, जहां आर (0,1) में संख्या है जिसे सन्निकटन अनुपात कहा जाता है।
 
मान लीजिए कि सभी इनपुट सकारात्मक हैं। एसएसपी के लिए एक सन्निकटन एल्गोरिदम का लक्ष्य अधिकतम टी के योग और इष्टतम योग के कम से कम आर गुना के साथ एस का एक उपसमूह ढूंढना है, जहां आर (0,1) में एक संख्या है जिसे सन्निकटन अनुपात कहा जाता है।


=== सरल 1/2-अनुमान ===
=== सरल 1/2-अनुमान ===
Line 98: Line 96:
* अगले सबसे बड़े इनपुट को सबसेट में रखें, जब तक वह वहां फिट बैठता है।
* अगले सबसे बड़े इनपुट को सबसेट में रखें, जब तक वह वहां फिट बैठता है।


जब यह एल्गोरिदम समाप्त हो जाता है, तो या तो सभी इनपुट सबसेट में होते हैं (जो स्पष्ट रूप से इष्टतम है), या एक इनपुट है जो फिट नहीं होता है। ऐसा पहला इनपुट पिछले सभी इनपुट से छोटा है जो उपसमुच्चय में हैं और उपसमुच्चय में इनपुट का योग T/2 से अधिक है अन्यथा इनपुट भी T/2 से कम है और यह सेट में फिट होगा। T/2 से अधिक ऐसी राशि स्पष्ट रूप से OPT/2 से अधिक है।
जब यह एल्गोरिदम समाप्त हो जाता है, तो या तो सभी इनपुट सबसेट में होते हैं (जो स्पष्ट रूप से इष्टतम है), या इनपुट है जो फिट नहीं होता है। ऐसा पहला इनपुट पिछले सभी इनपुट से छोटा है जो उपसमुच्चय में हैं और उपसमुच्चय में इनपुट का योग T/2 से अधिक है अन्यथा इनपुट भी T/2 से कम है और यह सेट में फिट होगा। T/2 से अधिक ऐसी राशि स्पष्ट रूप से OPT/2 से अधिक है।


=== पूर्ण-बहुपद समय सन्निकटन योजना{{Anchor|FPTAS}} ===
=== पूर्ण-बहुपद समय सन्निकटन योजना ===
निम्नलिखित एल्गोरिदम प्रत्येक के लिए प्राप्त करता है <math>\epsilon>0</math>, का एक अनुमानित अनुपात <math>(1-\epsilon)</math>. इसका रन टाइम बहुपद है {{mvar|n}} और <math>1/\epsilon</math>. याद रखें कि n इनपुट की संख्या है और T उपसमुच्चय योग की ऊपरी सीमा है।
निम्नलिखित एल्गोरिदम प्रत्येक के लिए प्राप्त करता है <math>\epsilon>0</math>, का अनुमानित अनुपात <math>(1-\epsilon)</math>. इसका रन टाइम बहुपद है {{mvar|n}} और <math>1/\epsilon</math>. याद रखें कि n इनपुट की संख्या है और T उपसमुच्चय योग की ऊपरी सीमा है।
  एक तत्व 0 को शामिल करने के लिए सूची L को प्रारंभ करें।
  एक तत्व 0 को शामिल करने के लिए सूची L को प्रारंभ करें।
   
   
  'प्रत्येक के लिए' मैं 1 से n तक 'करता हूँ'
  'प्रत्येक के लिए' मैं 1 से n तक 'करता हूँ'
    चलो यू<sub>i</sub>एक सूची बनें जिसमें L में सभी तत्व y और सभी योग x हों<sub>i</sub>एल में सभी y के लिए + y।
  चलो यू<sub>i</sub>एक सूची बनें जिसमें L में सभी तत्व y और सभी योग x हों<sub>i</sub>एल में सभी y के लिए + y।
    यू क्रमित करें<sub>i</sub>बढ़ते क्रम में
  यू क्रमित करें<sub>i</sub>बढ़ते क्रम में
    L को खाली करें
  L को खाली करें
    माना कि y, U का सबसे छोटा तत्व है<sub>i</sub>L में y जोड़ें
  माना कि y, U का सबसे छोटा तत्व है<sub>i</sub>L में y जोड़ें
    यू के 'प्रत्येक' तत्व z के लिए<sub>i</sub>बढ़ते क्रम में 'करो'
  यू के 'प्रत्येक' तत्व z के लिए<sub>i</sub>बढ़ते क्रम में 'करो'
        <u>// एक दूसरे के करीब संख्याओं को हटाकर सूची को ट्रिम करें</u>
  <u>// दूसरे के करीब संख्याओं को हटाकर सूची को ट्रिम करें</u>
        <u>// और लक्ष्य योग T से अधिक तत्वों को बाहर फेंक दें।</u>
  <u>// और लक्ष्य योग T से अधिक तत्वों को बाहर फेंक दें।</u>
        'यदि' y + ε T/n < z ≤ T 'तब'
  'यदि' y + ε T/n < z ≤ T 'तब'
            y = z
  y = z
            L में z जोड़ें
  L में z जोड़ें
   
   
  एल में सबसे बड़ा तत्व 'रिटर्न' करें।
  एल में सबसे बड़ा तत्व 'रिटर्न' करें।
Line 125: Line 123:
ये गुण मिलकर सूची की गारंटी देते हैं {{mvar|L}} से अधिक नहीं है <math>n/\epsilon</math> तत्व; इसलिए रन-टाइम बहुपद है <math>n/\epsilon</math>.
ये गुण मिलकर सूची की गारंटी देते हैं {{mvar|L}} से अधिक नहीं है <math>n/\epsilon</math> तत्व; इसलिए रन-टाइम बहुपद है <math>n/\epsilon</math>.


जब एल्गोरिदम समाप्त होता है, यदि इष्टतम योग होता है {{mvar|L}}, फिर इसे वापस कर दिया जाता है और हमारा काम हो जाता है। अन्यथा, इसे पिछले ट्रिमिंग चरण में हटा दिया गया होगा। प्रत्येक ट्रिमिंग चरण अधिकतम एक योगात्मक त्रुटि प्रस्तुत करता है <math>\epsilon T/n</math>, इसलिए {{mvar|n}} चरण एक साथ अधिकतम की त्रुटि प्रस्तुत करते हैं <math>\epsilon T</math>. इसलिए, लौटाया गया समाधान कम से कम है <math>\text{OPT}-\epsilon T</math> जो कम से कम है <math>(1-\epsilon)\text{OPT}</math> .
जब एल्गोरिदम समाप्त होता है, यदि इष्टतम योग होता है {{mvar|L}}, फिर इसे वापस कर दिया जाता है और हमारा काम हो जाता है। अन्यथा, इसे पिछले ट्रिमिंग चरण में हटा दिया गया होगा। प्रत्येक ट्रिमिंग चरण अधिकतम योगात्मक त्रुटि प्रस्तुत करता है <math>\epsilon T/n</math>, इसलिए {{mvar|n}} चरण साथ अधिकतम की त्रुटि प्रस्तुत करते हैं <math>\epsilon T</math>. इसलिए, लौटाया गया समाधान कम से कम है <math>\text{OPT}-\epsilon T</math> जो कम से कम है <math>(1-\epsilon)\text{OPT}</math> .


उपरोक्त एल्गोरिदम उस स्थिति में एसएसपी का सटीक समाधान प्रदान करता है जब इनपुट संख्या छोटी (और गैर-नकारात्मक) होती है। यदि संख्याओं का कोई योग अधिक से अधिक निर्दिष्ट किया जा सकता है {{mvar|P}} बिट्स, फिर समस्या को लगभग हल करना <math>\epsilon = 2^{-P}</math> इसे बिल्कुल हल करने के बराबर है। फिर, अनुमानित उपसमुच्चय के लिए बहुपद समय एल्गोरिथ्म रनिंग टाइम बहुपद के साथ एक सटीक एल्गोरिदम बन जाता है {{mvar|n}} और <math>2^P</math> (अर्थात, घातीय में {{mvar|P}}).
उपरोक्त एल्गोरिदम उस स्थिति में एसएसपी का सटीक समाधान प्रदान करता है जब इनपुट संख्या छोटी (और गैर-नकारात्मक) होती है। यदि संख्याओं का कोई योग अधिक से अधिक निर्दिष्ट किया जा सकता है {{mvar|P}} बिट्स, फिर समस्या को लगभग हल करना <math>\epsilon = 2^{-P}</math> इसे बिल्कुल हल करने के बराबर है। फिर, अनुमानित उपसमुच्चय के लिए बहुपद समय एल्गोरिथ्म रनिंग टाइम बहुपद के साथ सटीक एल्गोरिदम बन जाता है {{mvar|n}} और <math>2^P</math> (अर्थात, घातीय में {{mvar|P}}).


केलरर, मैनसिनी, पफ़रस्की और स्पेरान्ज़ा<ref>{{Cite journal|last1=Kellerer|first1=Hans|last2=Mansini|first2=Renata|last3=Pferschy|first3=Ulrich|last4=Speranza|first4=Maria Grazia|date=2003-03-01|title=उपसमुच्चय-योग समस्या के लिए एक कुशल पूर्णतः बहुपद सन्निकटन योजना|journal=Journal of Computer and System Sciences|language=en|volume=66|issue=2|pages=349–370|doi=10.1016/S0022-0000(03)00006-0|issn=0022-0000|doi-access=free}}</ref> और केलरर, पफ़रस्की और पिसिंगर<ref name="knapsack">{{cite book|author1=Hans Kellerer|title=बस्ते की समस्या|url=https://books.google.com/books?id=u5DB7gck08YC&pg=PA97|page=97|year=2004|publisher=Springer|isbn=9783540402862|author2=Ulrich Pferschy|author3=David Pisinger}}</ref> उपसमुच्चय राशि के लिए अन्य FPTAS-s प्रस्तुत करें।
केलरर, मैनसिनी, पफ़रस्की और स्पेरान्ज़ा<ref>{{Cite journal|last1=Kellerer|first1=Hans|last2=Mansini|first2=Renata|last3=Pferschy|first3=Ulrich|last4=Speranza|first4=Maria Grazia|date=2003-03-01|title=उपसमुच्चय-योग समस्या के लिए एक कुशल पूर्णतः बहुपद सन्निकटन योजना|journal=Journal of Computer and System Sciences|language=en|volume=66|issue=2|pages=349–370|doi=10.1016/S0022-0000(03)00006-0|issn=0022-0000|doi-access=free}}</ref> और केलरर, पफ़रस्की और पिसिंगर<ref name="knapsack">{{cite book|author1=Hans Kellerer|title=बस्ते की समस्या|url=https://books.google.com/books?id=u5DB7gck08YC&pg=PA97|page=97|year=2004|publisher=Springer|isbn=9783540402862|author2=Ulrich Pferschy|author3=David Pisinger}}</ref> उपसमुच्चय राशि के लिए अन्य FPTAS-s प्रस्तुत करें।


== यह भी देखें ==
== यह भी देखें ==
* नैपसेक समस्या - एसएसपी का एक सामान्यीकरण जिसमें प्रत्येक इनपुट आइटम का एक मूल्य और एक वजन दोनों होता है। लक्ष्य मूल्य को अधिकतम करना है ताकि कुल वजन सीमित हो जाए।
* नैपसेक समस्या - एसएसपी का सामान्यीकरण जिसमें प्रत्येक इनपुट आइटम का मूल्य और वजन दोनों होता है। लक्ष्य मूल्य को अधिकतम करना है ताकि कुल वजन सीमित हो जाए।
*[[एकाधिक उपसमुच्चय योग समस्या]] - एसएसपी का एक सामान्यीकरण जिसमें व्यक्ति को कई उपसमुच्चय चुनने चाहिए।
*[[एकाधिक उपसमुच्चय योग समस्या]] - एसएसपी का सामान्यीकरण जिसमें व्यक्ति को कई उपसमुच्चय चुनने चाहिए।
*3योग
*3योग
* मर्कल-हेलमैन नैपसेक क्रिप्टोसिस्टम
* मर्कल-हेलमैन नैपसेक क्रिप्टोसिस्टम

Revision as of 11:49, 15 July 2023

उपसमुच्चय योग समस्या (एसएसपी) कंप्यूटर विज्ञान में निर्णय समस्या है। इसके सबसे सामान्य सूत्रीकरण में, मल्टीसेट है पूर्णांकों और लक्ष्य-योग का , और प्रश्न यह तय करना है कि क्या पूर्णांकों का कोई उपसमुच्चय सटीक रूप से योग करता है .[1] समस्या को एनपी कठिन माना जाता है। इसके अलावा, इसके कुछ प्रतिबंधित संस्करण एनपी-पूर्णता|एनपी-पूर्ण भी हैं, उदाहरण के लिए:[1]

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

एसएसपी को अनुकूलन समस्या के रूप में भी माना जा सकता है: उपसमुच्चय ढूंढें जिसका योग अधिकतम टी है, और उसके अधीन, जितना संभव हो टी के करीब। यह एनपी-हार्ड है, लेकिन कई एल्गोरिदम हैं जो इसे उचित रूप से जल्दी से हल कर सकते हैं अभ्यास।

एसएसपी नैपसैक समस्या और एकाधिक उपसमुच्चय योग समस्या का विशेष मामला है।

कम्प्यूटेशनल कठोरता

SSP की रन-टाइम जटिलता दो मापदंडों पर निर्भर करती है:

  • n - इनपुट पूर्णांकों की संख्या. यदि n छोटी निश्चित संख्या है, तो समाधान के लिए विस्तृत खोज व्यावहारिक है।
  • L - समस्या की सटीकता, समस्या को बताने के लिए लगने वाले द्विआधारी स्थानीय मानों की संख्या के रूप में बताई गई है। यदि L छोटी निश्चित संख्या है, तो गतिशील प्रोग्रामिंग एल्गोरिदम हैं जो इसे सटीक रूप से हल कर सकते हैं।

जैसे-जैसे n और L दोनों बड़े होते जाते हैं, SSP NP-हार्ड होता है। सबसे प्रसिद्ध एल्गोरिदम की जटिलता दो मापदंडों n और L में से छोटे में घातीय समय है। समस्या एनपी-हार्ड है, तब भी जब सभी इनपुट पूर्णांक सकारात्मक होते हैं (और लक्ष्य-योग टी इनपुट का हिस्सा है)। इसे 3SAT से प्रत्यक्ष कमी द्वारा सिद्ध किया जा सकता है।[2] इसे 3-आयामी मिलान (3DM) से कमी करके भी सिद्ध किया जा सकता है:[3]

  • हमें 3DM का उदाहरण दिया गया है, जहां शीर्ष सेट W, X, Y हैं। प्रत्येक सेट में n शीर्ष हैं। वहाँ m किनारे हैं, जहाँ प्रत्येक किनारे में W,2(एम+1)), ताकि एल किनारों की संख्या का प्रतिनिधित्व करने के लिए आवश्यक बिट्स की संख्या से बड़ा हो।
  • हम m धनात्मक पूर्णांकों के साथ SSP का उदाहरण बनाते हैं। पूर्णांकों का वर्णन उनके द्विआधारी निरूपण द्वारा किया जाता है। प्रत्येक इनपुट पूर्णांक को 3nL बिट्स द्वारा दर्शाया जा सकता है, जिसे L बिट्स के 3n ज़ोन में विभाजित किया गया है। प्रत्येक क्षेत्र शीर्ष से मेल खाता है।
  • 3DM उदाहरण में प्रत्येक किनारे (w,x,y) के लिए, SSP उदाहरण में पूर्णांक होता है, जिसमें बिल्कुल तीन बिट्स 1 होते हैं: शीर्ष w, x, और y के क्षेत्रों में सबसे कम महत्वपूर्ण बिट्स . उदाहरण के लिए, यदि n=10 और L=3, और W=(0,...,9), X=(10,...,19), Y=(20,...,29), तो किनारे (0, 10, 20) को संख्या (2) द्वारा दर्शाया गया है0+230+260).
  • एसएसपी उदाहरण में लक्ष्य योग टी को प्रत्येक क्षेत्र के सबसे कम-महत्वपूर्ण बिट में 1 के साथ पूर्णांक पर सेट किया गया है, यानी (2)0+21+...+23एन-1).
  • यदि 3DM उदाहरण में पूर्ण मिलान है, तो SSP उदाहरण में संबंधित पूर्णांकों का योग बिल्कुल T प्राप्त करता है।
  • इसके विपरीत, यदि SSP उदाहरण में बिल्कुल T योग के साथ उपसमुच्चय है, तो, चूंकि क्षेत्र पर्याप्त रूप से बड़े हैं ताकि क्षेत्र से दूसरे क्षेत्र में कोई स्थानांतरण न हो, योग को 3DM उदाहरण में पूर्ण मिलान के अनुरूप होना चाहिए।

निम्नलिखित वेरिएंट को एनपी-हार्ड के रूप में भी जाना जाता है:

  • इनपुट पूर्णांक धनात्मक और ऋणात्मक दोनों हो सकते हैं, और लक्ष्य-योग T = 0. इसे धनात्मक पूर्णांक वाले वैरिएंट से घटाकर सिद्ध किया जा सकता है। उस वैरिएंट को SubsetSumPositive से और वर्तमान वैरिएंट को SubsetSumZero से निरूपित करें। SubsetSumPositive के उदाहरण (S, T) को देखते हुए, −T मान के साथ तत्व जोड़कर SubsetSumZero का उदाहरण बनाएं। SubsetSumPositive उदाहरण के समाधान को देखते हुए, −T जोड़ने से SubsetSumZero उदाहरण का समाधान प्राप्त होता है। इसके विपरीत, SubsetSumZero उदाहरण के समाधान को देखते हुए, इसमें −T होना चाहिए (चूंकि S में सभी पूर्णांक सकारात्मक हैं), इसलिए शून्य का योग प्राप्त करने के लिए, इसमें +T के योग के साथ S का उपसमुच्चय भी होना चाहिए, जो SubsetSumPositive उदाहरण का समाधान है।
  • इनपुट पूर्णांक सकारात्मक हैं, और टी = योग(एस)/2। इसे सामान्य प्रकार से कमी करके भी सिद्ध किया जा सकता है; विभाजन समस्या देखें.

अनुरूप गणना समस्या #एसएसपी, जो लक्ष्य के योग के लिए उपसमुच्चय की संख्या की गणना करने के लिए कहती है, शार्प पी पूर्ण|#पी-पूर्ण है।[4]


घातीय समय एल्गोरिदम

एन में समय घातांक में एसएसपी को हल करने के कई तरीके हैं।[5]


समावेश-बहिष्करण

सबसे सरल समाधान|भोला एल्गोरिदम एन संख्याओं के सभी उपसमूहों के माध्यम से चक्र करना होगा और, उनमें से प्रत्येक के लिए, यह जांचना होगा कि उपसमुच्चय का योग सही संख्या में है या नहीं। चलने का समय व्यवस्थित है , क्योंकि वहां हैं उपसमुच्चय और, प्रत्येक उपसमुच्चय की जाँच करने के लिए, हमें अधिकतम n तत्वों का योग करना होगा।

एल्गोरिथ्म को बाइनरी ट्री की गहराई-पहली खोज द्वारा कार्यान्वित किया जा सकता है: ट्री में प्रत्येक स्तर इनपुट संख्या से मेल खाता है; बायीं शाखा सेट से संख्या को बाहर करने से मेल खाती है, और दाहिनी शाखा संख्या को शामिल करने से मेल खाती है (इसलिए नाम समावेशन-बहिष्करण)। आवश्यक स्मृति है . रन-टाइम को कई अनुमानों द्वारा बेहतर बनाया जा सकता है:[5]

  • इनपुट संख्याओं को घटते क्रम में संसाधित करें।
  • यदि किसी दिए गए नोड में शामिल पूर्णांक अब तक पाए गए सर्वोत्तम उपसमुच्चय के योग से अधिक है, तो नोड को काट दिया जाता है।
  • यदि किसी दिए गए नोड में शामिल पूर्णांक, साथ ही शेष सभी पूर्णांक, अब तक पाए गए सर्वोत्तम उपसमुच्चय के योग से कम हैं, तो नोड को काट दिया जाता है।

होरोविट्ज़ और साहनी

1974 में, होरोविट्ज़ और सरताज साहनी[6] तेज़ घातीय-समय एल्गोरिदम प्रकाशित किया, जो समय में चलता है , लेकिन बहुत अधिक स्थान की आवश्यकता है - . एल्गोरिथ्म मनमाने ढंग से n तत्वों को दो सेटों में विभाजित करता है प्रत्येक। इन दो सेटों में से प्रत्येक के लिए, यह सभी के योगों की सूची संग्रहीत करता है इसके तत्वों के संभावित उपसमुच्चय। फिर इन दोनों सूचियों में से प्रत्येक को क्रमबद्ध किया जाता है। यहां तक ​​कि सबसे तेज़ तुलना सॉर्टिंग एल्गोरिदम का उपयोग करते हुए, इस चरण के लिए मर्जसॉर्ट को समय लगेगा . हालाँकि, इसके लिए रकम की क्रमबद्ध सूची दी गई है तत्वों, सूची को (की शुरूआत के साथ दो क्रमबद्ध सूचियों तक विस्तारित किया जा सकता है)वां तत्व, और इन दो क्रमबद्ध सूचियों को समय में मर्ज किया जा सकता है . इस प्रकार, प्रत्येक सूची को समय पर क्रमबद्ध रूप में तैयार किया जा सकता है . दो क्रमबद्ध सूचियों को देखते हुए, एल्गोरिदम जांच कर सकता है कि पहले सरणी का तत्व और दूसरे सरणी का तत्व समय में टी तक है या नहीं . ऐसा करने के लिए, एल्गोरिदम पहले एरे से घटते क्रम में (सबसे बड़े तत्व से शुरू) और दूसरे एरे से बढ़ते क्रम में (सबसे छोटे तत्व से शुरू) गुजरता है। जब भी पहले एरे में वर्तमान तत्व और दूसरे एरे में वर्तमान तत्व का योग टी से अधिक होता है, तो एल्गोरिदम पहले एरे में अगले तत्व पर चला जाता है। यदि यह टी से कम है, तो एल्गोरिदम दूसरे सरणी में अगले तत्व पर चला जाता है। यदि T के योग वाले दो तत्व पाए जाते हैं, तो यह रुक जाता है। (दो तत्वों के योग की उप-समस्या को दो-योग के रूप में जाना जाता है।[7])

श्रोएप्पेल और शमीर

1981 में, रिचर्ड श्रोएप्पेल और आदि शमीर ने एल्गोरिदम प्रस्तुत किया[8] होरोविट्ज़ और सानही पर आधारित, जिसके लिए समान रनटाइम की आवश्यकता होती है - , बहुत कम जगह - . n/2 तत्वों के सभी उपसमूहों को पहले से बनाने और संग्रहीत करने के बजाय, वे तत्वों को n/4 तत्वों के 4 सेटों में विभाजित करते हैं, और न्यूनतम ढेर का उपयोग करके गतिशील रूप से n/2 तत्व जोड़े के सबसेट उत्पन्न करते हैं, जो उपरोक्त समय प्राप्त करता है और अंतरिक्ष की जटिलताएँ क्योंकि यह किया जा सकता है और स्थान लंबाई k की 4 सूचियाँ दी गई हैं।

स्थान आवश्यकताओं के कारण, एचएस एल्गोरिदम लगभग 50 पूर्णांकों तक के लिए व्यावहारिक है, और एसएस एल्गोरिदम 100 पूर्णांकों तक के लिए व्यावहारिक है।[5]


हाउग्रेव-ग्राहम और जौक्स

2010 में, हाउग्रेव-ग्राहम और जौक्स[9] संभाव्य एल्गोरिथ्म प्रस्तुत किया जो पिछले सभी एल्गोरिदम की तुलना में समय में तेजी से चलता है स्थान का उपयोग करना . यह केवल निर्णय की समस्या को हल करता है, यह साबित नहीं कर सकता कि किसी दिए गए योग का कोई समाधान नहीं है, और टी के निकटतम सबसेट योग को वापस नहीं करता है।

हाउग्रेव-ग्राहम और जौक्स की तकनीकों को बाद में विस्तारित किया गया [10] समय-जटिलता को लाना .

छद्म-बहुपद समय गतिशील प्रोग्रामिंग समाधान

गतिशील प्रोग्रामिंग का उपयोग करके एसएसपी को छद्म-बहुपद समय में हल किया जा सकता है। मान लीजिए कि हमारे पास उदाहरण में तत्वों का निम्नलिखित क्रम है:

हम अवस्था को पूर्णांकों के युग्म (i, s) के रूप में परिभाषित करते हैं। यह राज्य इस बात का प्रतिनिधित्व करता है कि

का अरिक्त उपसमुच्चय है जो बताता है s.

प्रत्येक राज्य (i, s) के दो अगले राज्य हैं:

  • (i+1, s), जिसका अर्थ है उपसमूह में शामिल नहीं है;
  • (आई+1, एस+), जिसका अर्थ है उपसमुच्चय में सम्मिलित है।

प्रारंभिक स्थिति (0, 0) से शुरू करके, स्थिति (एन, टी) की खोज के लिए किसी भी ग्राफ़ खोज एल्गोरिदम (उदाहरण के लिए चौड़ाई-पहली खोज) का उपयोग करना संभव है। यदि स्थिति पाई जाती है, तो पीछे जाकर हम बिल्कुल टी के योग के साथ उपसमुच्चय पा सकते हैं।

इस एल्गोरिदम का रन-टाइम राज्यों की संख्या में अधिकतम रैखिक है। राज्यों की संख्या विभिन्न संभावित योगों की संख्या से अधिकतम N गुना है। होने देना A ऋणात्मक मानों का योग हो और B सकारात्मक मानों का योग; विभिन्न संभावित योगों की संख्या अधिकतम B-A है, इसलिए कुल रनटाइम है . उदाहरण के लिए, यदि सभी इनपुट मान सकारात्मक हैं और कुछ स्थिरांक C से बंधे हैं, तो B अधिकतम N C है, इसलिए आवश्यक समय है .

यह समाधान जटिलता सिद्धांत में बहुपद समय के रूप में नहीं गिना जाता है क्योंकि समस्या के आकार में बहुपद नहीं है, जो कि इसे दर्शाने के लिए उपयोग की जाने वाली बिट्स की संख्या है। यह एल्गोरिथम के मानों में बहुपद है A और B, जो बिट्स की संख्या में घातीय हैं। हालाँकि, यूनरी में एन्कोड किया गया सबसेट योग P में है, तब से एन्कोडिंग का आकार B-A में रैखिक है। इसलिए, सबसेट योग केवल कमजोर एनपी-पूर्ण है।

इस मामले के लिए कि प्रत्येक सकारात्मक है और निश्चित स्थिरांक से घिरा है C, 1999 में, पिसिंगर ने समय जटिलता वाला रैखिक समय एल्गोरिदम पाया (ध्यान दें कि यह समस्या के उस संस्करण के लिए है जहां लक्ष्य योग आवश्यक रूप से शून्य नहीं है, अन्यथा समस्या तुच्छ होगी)।[11] 2015 में, कोइलियारिस और जू ने नियतिवादी पाया सबसेट योग समस्या के लिए एल्गोरिदम जहां T वह योग है जिसे हमें खोजने की आवश्यकता है।[12] 2017 में, ब्रिंगमैन ने यादृच्छिक पाया समय एल्गोरिथ्म.[13] 2014 में, कर्टिस और सांचेस ने SIMD मशीनों में अत्यधिक स्केलेबल सरल रिकर्सन पाया समय और स्थान, कहाँ p प्रसंस्करण तत्वों की संख्या है, और निम्नतम पूर्णांक है.[14] यह अब तक ज्ञात सर्वोत्तम सैद्धांतिक समानांतर जटिलता है।

व्यावहारिक परिणामों की तुलना और एसएसपी के कठिन उदाहरणों के समाधान पर कर्टिस और सांचेस द्वारा चर्चा की गई है।[15]


बहुपद समय सन्निकटन एल्गोरिदम

मान लीजिए कि सभी इनपुट सकारात्मक हैं। एसएसपी के लिए सन्निकटन एल्गोरिदम का लक्ष्य अधिकतम टी के योग और इष्टतम योग के कम से कम आर गुना के साथ एस का उपसमूह ढूंढना है, जहां आर (0,1) में संख्या है जिसे सन्निकटन अनुपात कहा जाता है।

सरल 1/2-अनुमान

निम्नलिखित अत्यंत सरल एल्गोरिदम का अनुमानित अनुपात 1/2 है:[16]

  • इनपुट को घटते मूल्य के आधार पर क्रमबद्ध करें;
  • अगले सबसे बड़े इनपुट को सबसेट में रखें, जब तक वह वहां फिट बैठता है।

जब यह एल्गोरिदम समाप्त हो जाता है, तो या तो सभी इनपुट सबसेट में होते हैं (जो स्पष्ट रूप से इष्टतम है), या इनपुट है जो फिट नहीं होता है। ऐसा पहला इनपुट पिछले सभी इनपुट से छोटा है जो उपसमुच्चय में हैं और उपसमुच्चय में इनपुट का योग T/2 से अधिक है अन्यथा इनपुट भी T/2 से कम है और यह सेट में फिट होगा। T/2 से अधिक ऐसी राशि स्पष्ट रूप से OPT/2 से अधिक है।

पूर्ण-बहुपद समय सन्निकटन योजना

निम्नलिखित एल्गोरिदम प्रत्येक के लिए प्राप्त करता है , का अनुमानित अनुपात . इसका रन टाइम बहुपद है n और . याद रखें कि n इनपुट की संख्या है और T उपसमुच्चय योग की ऊपरी सीमा है।

एक तत्व 0 को शामिल करने के लिए सूची L को प्रारंभ करें।

'प्रत्येक के लिए' मैं 1 से n तक 'करता हूँ'
 चलो यूiएक सूची बनें जिसमें L में सभी तत्व y और सभी योग x होंiएल में सभी y के लिए + y।
 यू क्रमित करेंiबढ़ते क्रम में
 L को खाली करें
 माना कि y, U का सबसे छोटा तत्व हैiL में y जोड़ें
 यू के 'प्रत्येक' तत्व z के लिएiबढ़ते क्रम में 'करो'
 // दूसरे के करीब संख्याओं को हटाकर सूची को ट्रिम करें
 // और लक्ष्य योग T से अधिक तत्वों को बाहर फेंक दें।
 'यदि' y + ε T/n < z ≤ T 'तब'
 y = z
 L में z जोड़ें

एल में सबसे बड़ा तत्व 'रिटर्न' करें।

ध्यान दें कि ट्रिमिंग चरण (प्रत्येक लूप के लिए आंतरिक) के बिना, सूची एल में सभी का योग शामिल होगा इनपुट के सबसेट. ट्रिमिंग चरण दो काम करता है:

  • यह सुनिश्चित करता है कि L में शेष सभी राशियाँ T से नीचे हैं, इसलिए वे उप-योग समस्या का व्यवहार्य समाधान हैं।
  • यह सुनिश्चित करता है कि सूची एल विरल है, यानी, प्रत्येक दो लगातार आंशिक-योगों के बीच का अंतर कम से कम है .

ये गुण मिलकर सूची की गारंटी देते हैं L से अधिक नहीं है तत्व; इसलिए रन-टाइम बहुपद है .

जब एल्गोरिदम समाप्त होता है, यदि इष्टतम योग होता है L, फिर इसे वापस कर दिया जाता है और हमारा काम हो जाता है। अन्यथा, इसे पिछले ट्रिमिंग चरण में हटा दिया गया होगा। प्रत्येक ट्रिमिंग चरण अधिकतम योगात्मक त्रुटि प्रस्तुत करता है , इसलिए n चरण साथ अधिकतम की त्रुटि प्रस्तुत करते हैं . इसलिए, लौटाया गया समाधान कम से कम है जो कम से कम है .

उपरोक्त एल्गोरिदम उस स्थिति में एसएसपी का सटीक समाधान प्रदान करता है जब इनपुट संख्या छोटी (और गैर-नकारात्मक) होती है। यदि संख्याओं का कोई योग अधिक से अधिक निर्दिष्ट किया जा सकता है P बिट्स, फिर समस्या को लगभग हल करना इसे बिल्कुल हल करने के बराबर है। फिर, अनुमानित उपसमुच्चय के लिए बहुपद समय एल्गोरिथ्म रनिंग टाइम बहुपद के साथ सटीक एल्गोरिदम बन जाता है n और (अर्थात, घातीय में P).

केलरर, मैनसिनी, पफ़रस्की और स्पेरान्ज़ा[17] और केलरर, पफ़रस्की और पिसिंगर[18] उपसमुच्चय राशि के लिए अन्य FPTAS-s प्रस्तुत करें।

यह भी देखें

  • नैपसेक समस्या - एसएसपी का सामान्यीकरण जिसमें प्रत्येक इनपुट आइटम का मूल्य और वजन दोनों होता है। लक्ष्य मूल्य को अधिकतम करना है ताकि कुल वजन सीमित हो जाए।
  • एकाधिक उपसमुच्चय योग समस्या - एसएसपी का सामान्यीकरण जिसमें व्यक्ति को कई उपसमुच्चय चुनने चाहिए।
  • 3योग
  • मर्कल-हेलमैन नैपसेक क्रिप्टोसिस्टम

संदर्भ

  1. 1.0 1.1 Kleinberg, Jon; Tardos, Éva (2006). एल्गोरिथम डिज़ाइन (2nd ed.). p. 491. ISBN 0-321-37291-3.
  2. Goodrich, Michael. "अधिक एनपी पूर्ण और एनपी कठिन समस्याएं" (PDF). Archived (PDF) from the original on 2022-10-09.
  3. Garey, Michael R.; Johnson, David S. (1979), Computers and Intractability: A Guide to the Theory of NP-Completeness, W. H. Freeman, ISBN 0-7167-1045-5, Section 3.1 and problem SP1 in Appendix A.3.1.
  4. Filmus, Yuval (30 January 2016). Answer to: "Is there a known, fast algorithm for counting all subsets that sum to below a certain number?". Theoretical Computer Science Stack Exchange. Note that Filmus' citation in support of the claim (Faliszewski, Piotr; Hemaspaandra, Lane (2009). "The complexity of power-index comparison". Theoretical Computer Science. Elsevier. 410: 101-107. DOI 10.1016/j.tcs.2008.09.034) does not in fact prove the claim, instead directing readers to another citation (Papadimitriou, Christos (1994). Computational Complexity. Addison-Wesley: Reading, MA. Chapter 9. ISBN 0-201-53082-1 — via the Internet Archive), which does not explicitly prove the claim either. Papadimitriou's proof that SSP is NP-complete via reduction of 3SAT does, however, generalize to a reduction from #3SAT to #SSP.
  5. 5.0 5.1 5.2 Richard E. Korf, Ethan L. Schreiber, and Michael D. Moffitt (2014). "इष्टतम अनुक्रमिक मल्टी-वे संख्या विभाजन" (PDF). Archived (PDF) from the original on 2022-10-09.{{cite web}}: CS1 maint: multiple names: authors list (link)
  6. Horowitz, Ellis; Sahni, Sartaj (1974). "नैपसैक समस्या के अनुप्रयोगों के साथ विभाजन की गणना करना" (PDF). Journal of the Association for Computing Machinery. 21 (2): 277–292. doi:10.1145/321812.321823. hdl:1813/5989. MR 0354006. S2CID 16866858. Archived (PDF) from the original on 2022-10-09.
  7. "दो-योग समस्या" (PDF). Archived (PDF) from the original on 2022-10-09.
  8. Schroeppel, Richard; Shamir, Adi (1981-08-01). "A T = O(2n/2)[[Category: Templates Vigyan Ready]], S = O(2n/4)[[Category: Templates Vigyan Ready]] algorithm for certain NP-complete problems". SIAM Journal on Computing. 10 (3): 456–464. doi:10.1137/0210033. ISSN 0097-5397. {{cite journal}}: URL–wikilink conflict (help)
  9. Howgrave-Graham, Nick; Joux, Antoine (2010). "New Generic Algorithms for Hard Knapsacks". In Gilbert, Henri (ed.). Advances in Cryptology – EUROCRYPT 2010. Lecture Notes in Computer Science (in English). Vol. 6110. Berlin, Heidelberg: Springer. pp. 235–256. doi:10.1007/978-3-642-13190-5_12. ISBN 978-3-642-13190-5.
  10. Becker, Anja; Joux, Antoine (2010). "Improved Generic Algorithms for Hard Knapsacks". In Gilbert, Henri (ed.). Advances in Cryptology – EUROCRYPT 2011. Lecture Notes in Computer Science (in English). Vol. 6632. Berlin, Heidelberg: Springer. pp. 364–385. doi:10.1007/978-3-642-20465-4_21. ISBN 978-3-642-20465-4.
  11. Pisinger, David (1999). "सीमित वजन के साथ बस्ता समस्याओं के लिए रैखिक समय एल्गोरिदम". Journal of Algorithms. 33 (1): 1–14. doi:10.1006/jagm.1999.1034. MR 1712690.
  12. Koiliaris, Konstantinos; Xu, Chao (2015-07-08). "सबसेट योग के लिए एक तेज़ छद्मबहुपद समय एल्गोरिदम". arXiv:1507.02318 [cs.DS].
  13. Bringmann, Karl (2017). "A near-linear pseudopolynomial time algorithm for subset sum". In Klein, Philip N. (ed.). Proceedings of the Twenty-Eighth Annual ACM-SIAM Symposium on Discrete Algorithms (SODA 2017). SIAM. pp. 1073–1084. arXiv:1610.04712. doi:10.1137/1.9781611974782.69.
  14. Curtis, V. V.; Sanches, C. A. A. (January 2016). "An efficient solution to the subset-sum problem on GPU: An efficient solution to the subset-sum problem on GPU". Concurrency and Computation: Practice and Experience. 28 (1): 95–113. doi:10.1002/cpe.3636. S2CID 20927927.
  15. Curtis, V. V.; Sanches, C. A. A. (July 2017). "जीपीयू पर सबसेट-सम समस्या के लिए एक कम-स्थान एल्गोरिथ्म". Computers & Operations Research. 83: 120–124. doi:10.1016/j.cor.2017.02.006.
  16. Caprara, Alberto; Kellerer, Hans; Pferschy, Ulrich (2000-02-01). "एकाधिक उपसमुच्चय योग समस्या". SIAM Journal on Optimization. 11 (2): 308–319. doi:10.1137/S1052623498348481. ISSN 1052-6234.
  17. Kellerer, Hans; Mansini, Renata; Pferschy, Ulrich; Speranza, Maria Grazia (2003-03-01). "उपसमुच्चय-योग समस्या के लिए एक कुशल पूर्णतः बहुपद सन्निकटन योजना". Journal of Computer and System Sciences (in English). 66 (2): 349–370. doi:10.1016/S0022-0000(03)00006-0. ISSN 0022-0000.
  18. Hans Kellerer; Ulrich Pferschy; David Pisinger (2004). बस्ते की समस्या. Springer. p. 97. ISBN 9783540402862.


अग्रिम पठन