क्यों है नैकपैक की समस्या छद्म बहुपद?


87

मुझे पता है कि Knapsackयह एनपी-पूर्ण है जबकि इसे डीपी द्वारा हल किया जा सकता है। वे कहते हैं कि डीपी समाधान है pseudo-polynomial, क्योंकि यह "इनपुट की लंबाई" में घातीय है (यानी इनपुट को एन्कोड करने के लिए आवश्यक बिट्स की संख्या)। दुर्भाग्य से मुझे नहीं मिला। क्या कोई pseudo-polynomialमुझे धीरे से समझा सकता है ?


जवाबों:


89

एन आइटम के साथ एक अनबाउंड knapsack समस्या के लिए रनिंग टाइम O (NW) है और इनपुट की लंबाई में W. W आकार के नैकपैक हालांकि इनपुट की लंबाई में बहुपद नहीं है, जो इसे छद्म- पोलीनोमियल बनाता है ।

डब्ल्यू = 1,000,000,000,000 पर विचार करें। इस संख्या का प्रतिनिधित्व करने के लिए केवल 40 बिट्स लगते हैं, इसलिए इनपुट आकार = 40 है, लेकिन कम्प्यूटेशनल रनटाइम कारक 1,000,000,000,000 का उपयोग करता है जो ओ (2 40 ) है।

इसलिए रनटाइम अधिक सटीक रूप से O (N.2 बिट्स इन W ) कहा जाता है , जो कि घातीय है।

और देखें:


1
लिंक # 3 "0-1 नॅकैपैक समस्या के लिए गतिशील प्रोग्रामिंग की जटिलता" का उल्लेख है।
देव_नट

1
क्षमा करें, मुझे यह नहीं मिला। मान लीजिए कि यदि हमारे पास समय जटिलता ओ (एन) के साथ एक एल्गोरिथ्म है, तो हमारे पास ओ (2 ^ (एन में बिट)) है, जो घातीय है? धन्यवाद ~
लुशा ली

3
@LushaLi इससे मुझे मदद मिली: youtube.com/watch?v=9oI7fg-MIpE । यदि एन एक सरणी है जहां प्रत्येक तत्व का एक निश्चित अधिकतम आकार इनपुट है (कहो कि सरणी में प्रत्येक तत्व 32 बिट्स से अधिक नहीं है), और आप इस सरणी पर एक बार लूप चलाते हैं, तो यह इनपुट में एक बहुपद समय एल्गोरिथ्म है सरणी का आकार N। हालाँकि, यदि N एक पूर्णांक है और आप N पर एक लूप चलाते हैं, तो N अनबाउंड है और बिट्स की संख्या में तेजी से बढ़ता है जो इसे प्रतिनिधित्व करने के लिए लेता है। तो एन पर लूप के लिए एक सरल, वास्तव में, घातीय है। ध्यान दें कि सरणी के मामले में, सरणी में प्रत्येक तत्व का आकार ऊपरी-बाध्य था।
अधिकतम_मैक्स_मीर 17

मैं आश्वस्त नहीं था। समान गुणों वाले बहुत सारे एल्गोरिदम हैं जो "छद्म-बहुपद" नहीं हैं। कहो, चलनी ऑफ एराटोस्थनीज़ (या किसी अन्य प्रमुख संख्या खोजक) की जटिलता क्या है?
Ofir ए

31

हमारी अधिकांश समस्याओं में, हम बड़ी संख्या के साथ काम कर रहे हैं जो मानक इंट / फ्लोट डेटा प्रकारों के अंदर आराम से फिट होते हैं। जिस तरह से अधिकांश प्रोसेसर एक समय में 4-8 बाइट संख्या को बिना किसी अतिरिक्त लागत के संभालने के लिए बनाए जाते हैं (फिट, संख्या 1 बाइट की तुलना में संख्या के सापेक्ष), हम शायद ही कभी अपने नंबरों को स्केल करने से चलने के समय में बदलाव का सामना करते हैं या सीमाओं के भीतर हम वास्तविक समस्याओं का सामना करते हैं - इसलिए प्रमुख कारक डेटा बिंदुओं की सरासर मात्रा, एन या एम कारक हैं जो हम कर रहे हैं।

(आप कल्पना कर सकते हैं कि बिग-ओ नोटेशन एक स्थिर कारक को छिपा रहा है जो 32 या 64 बिट्स-प्रति-डेटा को विभाजित करता है, केवल नंबर-ऑफ-डेटा-पॉइंट्स को छोड़कर जब भी हमारी संख्या में से प्रत्येक उस बिट या उससे कम में फिट होता है )

लेकिन बड़े सेटों को शामिल करने वाले डेटा सेट पर कार्य करने के लिए अन्य एल्गोरिदम के साथ पुन: प्रयास करें - संख्या जो कि प्रतिनिधित्व करने के लिए 8 से अधिक बाइट्स की आवश्यकता होती है - और देखें कि रनटाइम के लिए क्या करता है। शामिल संख्याओं का परिमाण हमेशा एक अंतर बनाता है, यहां तक ​​कि द्विआधारी तरह के अन्य एल्गोरिदम में भी, एक बार जब आप विस्तार करते हैं तो सुरक्षा पारंपरिक प्रोसेसर के बफर से हमें 4-8 बाइट बैचों को संभालकर "मुफ्त में" मिलता है।

नैकप्स एल्गोरिथ्म के साथ चाल जिस पर हमने चर्चा की, वह असामान्य रूप से संवेदनशील (अन्य एल्गोरिदम के सापेक्ष) एक विशेष पैरामीटर की परिमाण के लिए, डब्ल्यू। डब्ल्यू में एक बिट जोड़ें और आप एल्गोरिथ्म के चलने के समय को दोगुना करते हैं। हमने इस से पहले अन्य एल्गोरिदम में मूल्य में परिवर्तन के लिए उस तरह की नाटकीय प्रतिक्रिया नहीं देखी है, यही कारण है कि ऐसा लग सकता है कि हम अलग-अलग तरीके से नॅप्सैक का इलाज कर रहे हैं - लेकिन यह एक गैर-बहुपत्नी फैशन में इसका जवाब देने का एक वास्तविक विश्लेषण है। इनपुट आकार में परिवर्तन करने के लिए।


8

नॅप्सैक एल्गोरिथ्म का रन-टाइम न केवल इनपुट (n - आइटमों की संख्या) के आकार पर होता है, बल्कि इनपुट (W - द नॅप्सैक क्षमता) O (nW) के परिमाण पर भी होता है, जो कि कैसे होता है बाइनरी में कंप्यूटर का प्रतिनिधित्व किया (2 ^ n)। कम्प्यूटेशनल जटिलता (यानी बिट्स के माध्यम से कंप्यूटर के अंदर प्रसंस्करण कैसे किया जाता है) केवल इनपुट के आकार से संबंधित है, न कि उनके परिमाण / मूल्यों से

एक पल के लिए मूल्य / वजन सूची की उपेक्षा करें। मान लें कि हमारे पास नैकपैक क्षमता के साथ एक उदाहरण है। डब्ल्यू इनपुट डेटा में दो बिट्स लेगा। अब हम शेष इनपुट को ध्यान में रखते हुए, knapsack क्षमता को बढ़ाकर 4 कर देंगे। हमारा इनपुट केवल एक बिट से बढ़ा है, लेकिन कम्प्यूटेशनल जटिलता दो गुना बढ़ गई है। यदि हम क्षमता को 1024 तक बढ़ाते हैं, तो हमारे पास W के लिए 2 के बजाय इनपुट के सिर्फ 10 बिट्स होंगे, लेकिन जटिलता 512 के कारक से बढ़ गई है। समय की जटिलता बाइनरी (या दशमलव) प्रतिनिधित्व में डब्ल्यू के आकार में तेजी से बढ़ती है ।

एक और सरल उदाहरण जिसने मुझे छद्म-बहुपत्नी अवधारणा को समझने में मदद की, वह है भोला-भाला परीक्षण एल्गोरिथ्म। किसी दिए गए नंबर n के लिए हम जाँच कर रहे हैं यदि यह प्रत्येक पूर्णांक संख्या द्वारा समान रूप से 2 सीमा में विभाजित है। लेकिन यहाँ, n इनपुट का परिमाण है, आकार नहीं है।

                     Now The regular O(n) case

इसके विपरीत, दिए गए तत्व के लिए एक सरणी की खोज बहुपद समय में चलती है: O (n)। यह अधिकांश n चरणों में होता है और यहाँ n इनपुट का आकार (सरणी की लंबाई) है।

[ यहाँ देखें ]

दशमलव संख्या को संग्रहीत करने के लिए आवश्यक बिट्स की गणना करना


3
तो आपके अंतिम खोज उदाहरण के लिए, n को बाइनरी के रूप में भी क्यों नहीं माना जाता है? यदि n = 1024, यह केवल 10 बिट लेता है, तो क्या यह छद्म-बहुपद नहीं होना चाहिए?
यूजर 1024

7

जिस तरह से मैं यह समझता हूं कि क्षमता हे (डब्ल्यू) होगी यदि क्षमता इनपुट [1,2, ..., डब्ल्यू] की एक सरणी थी , जिसमें डब्ल्यू का आकार है। लेकिन क्षमता इनपुट नहीं है संख्याओं की एक सरणी, यह एक पूर्णांक के बजाय है। समय जटिलता इनपुट के आकार के संबंध के बारे में है । आकार एक पूर्णांक के पूर्णांक के मूल्य, लेकिन यह का प्रतिनिधित्व बिट्स की संख्या नहीं है। हम बाद में एल्गोरिथ्म में इस पूर्णांक W को एक सरणी [1,2, ..., W] में बदल देते हैं, लोगों को गलत तरीके से सोचने में अग्रणी होता है कि डब्ल्यू आकार है, लेकिन यह सरणी इनपुट नहीं है, पूर्णांक स्वयं है।

"सामान की एक सरणी" के रूप में इनपुट के बारे में सोचो, और "सरणी में कितने सामान" के रूप में आकार। आइटम इनपुट वास्तव में सरणी में n आइटम का एक सरणी है इसलिए आकार = एन। क्षमता इनपुट इसमें डब्ल्यू संख्याओं की एक सरणी नहीं है, लेकिन लॉग (डब्ल्यू) बिट्स की एक सरणी द्वारा दर्शाया गया एक पूर्णांक है । 1 (1 सार्थक बिट जोड़कर) के आकार को बढ़ाएं, डब्ल्यू डबल्स इतना रन टाइम डबल्स, इसलिए घातीय समय जटिलता।

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