इसका मतलब यह है कि यूनीरी knapsack P में है। इसका मतलब यह नहीं है कि knapsack (बाइनरी-एन्कोडेड संख्या के साथ) P में है।
नैकपैक एनपी-पूर्ण होने के लिए जाना जाता है। यदि आपने दिखाया है कि knapsack P में है, तो वह P = NP दिखाएगा।
लेकिन आपने यह नहीं दिखाया है कि knapsack P में है। आपने दिखाया है कि unary knapsack P में है। हालांकि, unary knapsack को NP-complete नहीं जाना जाता है (वास्तव में, मानक संदेह यह है कि यह सबसे अधिक संभावना है कि NP- पूर्ण नहीं है। )। इसलिए, पी में एकसमान नैकपैक लगाने का मतलब यह नहीं है कि पी = एनपी।
तो हमें कौन सी समस्या के बारे में अधिक ध्यान देना चाहिए, नैकपैक या अनियारी नैकपैक? यदि आपकी प्रेरणा व्यावहारिक चिंताओं पर आधारित है, तो उत्तर उन संख्याओं के आकार पर निर्भर करेगा, जिनके लिए आप नॅप्सैक समस्या को हल करना चाहते हैं: यदि वे बड़े हैं, तो आप निश्चित रूप से नॅाॅपैक की तुलना में नैकपैक की अधिक देखभाल करते हैं। यदि आपकी प्रेरणा सैद्धांतिक चिंताओं पर आधारित है, तो निपटा यकीनन अधिक दिलचस्प है, क्योंकि यह हमें एक गहरी समझ प्राप्त करने की अनुमति देता है - यह हमें आकार बनाम परिमाण के बीच का अंतर बनाने की अनुमति देता है - जबकि एकरी नैकपैक हमें यह अंतर बनाने से रोकता है।
नैकपैक समस्या के लिए डायनामिक प्रोग्रामिंग एल्गोरिथ्म के बारे में अनुवर्ती प्रश्न का उत्तर देने के लिए:
हाँ, एक ही गतिशील प्रोग्रामिंग एल्गोरिथ्म दोनों knapsacks और unary knapsack पर लागू किया जा सकता है। इसका चलने का समय संख्याओं के परिमाण में बहुपद है, लेकिन बाइनरी में एन्कोड किए जाने पर संख्या की लंबाई में घातीय (बहुपद नहीं) है। इस प्रकार, अपने चलने का समय है इनपुट की लंबाई में बहुपद जब इनपुट एकल में एन्कोड लेकिन है नहीं जब इनपुट बाइनरी में एन्कोड किया गया है इनपुट की लंबाई में बहुपद। के कारण है कि हम यही करते हैं पर विचार इस गतिशील प्रोग्रामिंग एल्गोरिथ्म एकल नैपसैक के लिए एक बहुपद समय एल्गोरिथ्म हो सकता है, लेकिन नहीं है इसके लिए (बाइनरी एन्कोड) नैपसैक एक बहुपद समय एल्गोरिथ्म मानते हैं।
स्मरण करो कि हम कहते हैं कि एक एल्गोरिथ्म बहुपद समय में चलता है यदि इसका चलने का समय इनपुट की लंबाई के कुछ बहुपदों में होता है, बिट्स में ।