नैकस्पैक समस्या - गतिशील प्रोग्रामिंग समाधान के बावजूद एनपी-पूर्ण?


50

डायनेमिक प्रोग्रामिंग द्वारा नॅप्सैक समस्याओं को आसानी से हल किया जाता है। बहुपद समय में गतिशील प्रोग्रामिंग चलती है; यही कारण है कि हम इसे करते हैं, है ना?

मैंने पढ़ा है कि यह वास्तव में एक एनपी-पूर्ण समस्या है, हालांकि, जिसका अर्थ होगा कि बहुपद समस्या में समस्या को हल करना संभवतः असंभव है।

मेरी गलती कहाँ है?


5
ध्यान रखें कि डीपी "टेबल आकार" में बहुपद है। नपसैक के लिए तालिका बहुत बड़ी है (केव का उत्तर देखें)।
राफेल

जवाबों:


40

जब संख्याओं को बाइनरी नंबर के रूप में दिया जाता है, तो Knapsack समस्या होती है । इस मामले में, गतिशील प्रोग्रामिंग तेजी से कई कदम (इनपुट के आकार में, इनपुट में बिट्स की संख्या यानी) खत्म करने के लिए ले जाएगा ।NP-complete

दूसरी ओर, यदि इनपुट में संख्याएँ एकात्मक रूप से दी गई हैं, तो डायनेमिक प्रोग्रामिंग बहुपद समय (इनपुट के आकार में) में काम करेगा।

इस तरह की समस्याओं को कमजोर रूप सेNP-complete

: इनपुट देने के लिए उपयोग किए जाने वाले एन्कोडिंग के महत्व को समझने के लिए एक और अच्छा उदाहरण सामान्य एल्गोरिदम पर विचार करना है, यह देखने के लिए कि क्या संख्या अभाज्य है जो2 सेn और जांच करें कि क्या उनमें से कोई भीnविभाजित करता है। यहnमें बहुपद हैलेकिन जरूरी नहीं कि इनपुट आकार में हो। यदिnबाइनरी में दी गई है, इनपुट के आकार हैlgnऔर एल्गोरिथ्म समय में चलाता हैO(n)=O(2lgn/2)जो इनपुट आकार में घातांक है। और एक समस्या की सामान्य कम्प्यूटेशनल जटिलता इनपुट के आकार की है।

इस तरह का एल्गोरिथ्म, अर्थात् सबसे बड़ी संख्या में बहुपद जो इनपुट का हिस्सा है, लेकिन इनपुट लंबाई में घातांक को छद्म-बहुपद कहा जाता है ।


लेकिन उन चीजों के बारे में सोचें जो नैकपैक में डालनी हैं। वस्तुओं का इनपुट होना आवश्यक है और इस तरह के इनपुट को वस्तुओं की संख्या के साथ बहुपद होना चाहिए। यदि ऑब्जेक्ट बहुत सारे हैं, तो इनपुट समस्या के आकार के साथ बहुपद है। इसलिए मैं क्यों नहीं कह सकता कि टेबल आकार के संदर्भ में नैकपैक समस्या पी समस्या है? क्या मै गलत हु?
स्ट्रिन

@Strin, नहीं, वस्तुओं की एक छोटी संख्या एक बड़ी नैपसैक, जैसे लग रहा है करने के लिए पर्याप्त हो सकता है अगर बस्ता के आकार है , आकार में से एक objeact मीटर पर्याप्त है। इनपुट का आकार लगभग 2 lg मीटर है , जो m की तुलना में बहुत छोटा है । (मैं मान रहा हूं कि हम 0-1 नैकपैक के बारे में बात कर रहे हैं।)mm2lgmm
केवह

क्या आप इनपुट को उन छोटे इनपुट में तोड़ सकते हैं जिनके बाइनरी एन्कोडिंग में एक आकार होता है जो एल्गोरिथ्म को बहुपद समय में समाप्त करता है फिर समाधानों को संयोजित करता है?
चार

@ केवह "इनपुट का आकार लगभग 2 lg मीटर है" मुझे समझ में नहीं आता कि आप उस हिस्से को कहाँ से प्राप्त करते हैं। m(पैक आकार) और n(वस्तुओं की संख्या ) के बीच संबंध पूरी तरह से अज्ञात है, है ना? और फिर "जब संख्याओं को द्विआधारी संख्या के रूप में दिया जाता है" ... लेकिन क्या आप ऐसा कुछ भी नहीं कह सकते हैं? अधिकांश एल्गोरिदम के साथ, हम बेस 10 में इनपुट आकार के बारे में बात करते हैं। यहां बाइनरी के बारे में बात क्यों करें? और चाहे आप द्विआधारी, अष्टाधारी, दशमलव, आदि में सांकेतिक शब्दों में ... actualआपके मुख्य एल्गोरिथ्म लूप के माध्यम से पुनरावृति करने की संख्या सीधे nऔर दोनों पर निर्भर है W
११

1
@ The111, मुझे लगता है कि यह बेहतर है यदि आप एक नए प्रश्न के रूप में पोस्ट करते हैं और मैं एक उत्तर पोस्ट करूंगा। मुझे लगता है कि आपका प्रश्न अधिक मौलिक है और इस प्रश्न से संबंधित टिप्पणियां बहुत अधिक नहीं हैं।
केव

33

मुख्य भ्रम " आकार " और " मूल्य " के बीच अंतर है ।

" बहुपद समय " का तात्पर्य बहुपद wrt इनपुट के आकार से है।

" स्यूडोपोलिनोमियल टाइम " का तात्पर्य है बहुपद wrt इनपुट का मान । यह (नीचे) दिखाया जा सकता है कि यह इनपुट के आकार के घातीय wrt के बराबर है ।


NsizeNval

O(Nsizex)xN

O(Nvalx)xN

O(nW)W

Nsize=Logb(Nval)NvalbNval

Nval=bNsize

Nsize

O(bxNsize)b,xN


7
सिर्फ इतना धन्यवाद कहने के लिए यहां एक खाता बनाया गया है! आपके उदाहरण के बाद ही मैंने इसे समझा है।
inoryy

2
आपका जवाब सबको भाता है, ब्रावो!
मुहम्मद रजीब

1
इस महान जवाब हम कह सकते हैं कि अगर हम 100 से 101 के लिए डब्ल्यू बदलने के लिए जोड़ने के लिए, आकार समस्या की वृद्धि की नहीं है, आकार हम डब्ल्यू जो इसे दो बार के रूप में बड़ी बना देता है के लिए एक और बिट जोड़ने बढ़ जाती है, तो तालिका होगा दो बार अधिक पंक्तियाँ हैं और इसलिए एक-एक करके आकार बढ़ाने के साथ, समस्या समय दोगुना हो जाता है, यही कारण है कि यह घातीय है।
आमीन

@bcorso मान लीजिए कि आपको एक मान N दिया गया है और आपको 1 से N तक संख्याओं का योग ज्ञात करना है और आपने लूप विधि के लिए उपयोग किया है, जो कि एक pseudopolynomial Time algorithm होगा?
डॉलर अक्षय

8

P=NP

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

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