समझने वाली पहली बात यह है कि पी और एनपी भाषाओं का वर्गीकरण करते हैं , समस्याओं का नहीं । यह समझने के लिए कि इसका क्या अर्थ है, हमें पहले कुछ अन्य परिभाषाओं की आवश्यकता है।
एक वर्णमाला प्रतीकों का एक गैर-रिक्त परिमित सेट है।
{ 0
, 1
} एक वर्णमाला है जैसा कि ASCII वर्ण सेट है। {} यह वर्णमाला नहीं है क्योंकि यह खाली है। एन (पूर्णांक) एक वर्णमाला नहीं है क्योंकि यह परिमित नहीं है।
आज्ञा देना alp एक वर्णमाला है। से प्रतीकों की एक सीमित संख्या का एक आदेश दिया संयोजन Σ एक कहा जाता है शब्द से अधिक Σ ।
स्ट्रिंग 101
वर्णमाला { 0
, 1
} पर एक शब्द है । खाली शब्द (अक्सर के रूप में लिखा ε ) किसी भी वर्णमाला के ऊपर एक शब्द है। स्ट्रिंग penguin
ASCII वर्णों वाले वर्णमाला के ऊपर एक शब्द है। संख्या π की दशमलव संकेतन वर्णमाला पर एक शब्द नहीं है { .
, 0
, 1
, 2
, 3
, 4
, 5
, 6
, 7
, 8
, 9
} क्योंकि यह नहीं परिमित है।
एक शब्द w की लंबाई , के रूप में लिखा है | w |, इसमें प्रतीकों की संख्या है।
उदाहरण के लिए, | hello
| = 5 और | ε | = 0. किसी भी शब्द के लिए w , | w | ∈ एन और इसलिए परिमित।
आज्ञा देना alp एक वर्णमाला है। सेट Σ * से अधिक सभी शब्द शामिल हैं Σ , सहित ε । सेट Σ + से अधिक सभी शब्द शामिल हैं Σ , को छोड़कर ε । के लिए n ∈ एन , Σ n लंबाई के शब्दों का सेट है n ।
हर वर्णमाला के लिए Σ , Σ * और Σ + अनंत हैं गणनीय सेट । ASCII वर्ण सेट के लिए Σ ASCII , नियमित अभिव्यक्ति .*
और .+
निरूपित Σ ASCII * और Σ ASCII + क्रमशः।
{ 0
, 1
} 7 7-बिट ASCII कोड का सेट है { 0000000
, 0000001
, ..., 1111111
}। { 0
, 1
} 32 , 32 बिट पूर्णांक मानों का समूह है।
चलो Σ एक वर्णमाला और हो एल ⊆ Σ * । एल एक कहा जाता है भाषा से अधिक Σ ।
एक वर्णमाला के लिए Σ , खाली सेट और Σ * अधिक तुच्छ भाषाएं हैं Σ । पूर्व को अक्सर खाली भाषा के रूप में संदर्भित किया जाता है । खाली भाषा {} और केवल खाली शब्द {युक्त भाषा ε } अलग हैं।
{ 0
, 1
} 32 का सबसेट जो गैर- NaN IEEE 754 फ्लोटिंग पॉइंट वैल्यू से मेल खाता है, एक परिमित भाषा है।
भाषाओं में शब्दों की अनंत संख्या हो सकती है लेकिन हर भाषा गणनीय है। तार के सेट { 1
, 2
, ...} डेसीमल नोटेशन पूर्णांकों को संकेतित करते वर्णमाला के ऊपर एक अनंत भाषा है { 0
, 1
, 2
, 3
, 4
, 5
, 6
, 7
, 8
, 9
}। तार के अनंत सेट { 2
, 3
, 5
, 7
, 11
, 13
, ...} डेसीमल नोटेशन रूढ़ अंक दर्शाने एक उचित सबसेट उसके है। नियमित अभिव्यक्ति [+-]?\d+\.\d*([eE][+-]?\d+)?
से मेल खाते सभी शब्दों वाली भाषा ASCII वर्ण सेट पर एक भाषा है (सी प्रोग्रामिंग भाषा द्वारा परिभाषित वैध फ्लोटिंग-पॉइंट एक्सप्रेशन के सबसेट को दर्शाते हुए)।
कोई भी भाषा नहीं है जिसमें सभी वास्तविक संख्याएँ हैं (किसी भी अंकन में) क्योंकि वास्तविक संख्याओं का समूह गणना योग्य नहीं है।
चलो Σ एक वर्णमाला और हो एल ⊆ Σ * । एक मशीन डी का फैसला करता है एल हर इनपुट के लिए अगर डब्ल्यू ∈ Σ * यह गणना करता है विशेषता समारोह χ एल ( डब्ल्यू परिमित समय में)। विशेषता फ़ंक्शन के रूप में परिभाषित किया गया है
χ एल : Σ * → {0, 1}
डब्ल्यू ↦ 1, डब्ल्यू ∈ एल
0, अन्यथा।
इस तरह की मशीन को एल के लिए एक डिकैडर कहा जाता है । हम लिखने " डी ( डब्ल्यू ) = एक्स " "दिए गए के लिए डब्ल्यू , डी आउटपुट एक्स "।
कई मशीन मॉडल हैं। सबसे सामान्य एक जो आज व्यावहारिक उपयोग में है वह एक ट्यूरिंग मशीन का मॉडल है । ट्यूरिंग मशीन में कोशिकाओं में असीमित रैखिक भंडारण होता है। प्रत्येक सेल किसी भी समय किसी वर्णमाला के ठीक एक प्रतीक को पकड़ सकता है। ट्यूरिंग मशीन कम्प्यूटेशन चरणों के अनुक्रम के रूप में अपनी गणना करती है। प्रत्येक चरण में, यह एक सेल पढ़ सकता है, संभवतः इसके मूल्य को अधिलेखित कर सकता है और रीड / राइट हेड को एक स्थिति में लेफ्ट या राइट सेल में स्थानांतरित कर सकता है। मशीन क्या कार्य करेगी, यह एक परिमित स्थिति ऑटोमेटन द्वारा नियंत्रित किया जाता है।
निर्देशों और सीमित भंडारण के सीमित सेट के साथ एक यादृच्छिक एक्सेस मशीन एक और मशीन मॉडल है जो ट्यूरिंग मशीन मॉडल के समान शक्तिशाली है।
इस चर्चा के लिए, हम हमारे द्वारा उपयोग की जाने वाली सटीक मशीन मॉडल के साथ हमें परेशान नहीं करेंगे, बल्कि यह कहने के लिए पर्याप्त होगा कि मशीन में एक परिमित नियतात्मक नियंत्रण इकाई, असीमित भंडारण है और गणना के चरणों के अनुक्रम के रूप में एक संगणना करता है।
चूंकि आपने इसे अपने प्रश्न में उपयोग किया है, इसलिए मुझे लगता है कि आप "बिग-ओ" अंकन से पहले ही परिचित हैं, इसलिए यहां केवल एक त्वरित रिफ्रेशर है।
आज्ञा देना एफ : एन → एक समारोह हो। सेट हे ( च ) सभी कार्यों में शामिल है जी : एन → एन जिसके लिए वहाँ स्थिरांक मौजूद एन 0 ∈ एन और सी ∈ एन ऐसी है कि हर एक के लिए n ∈ एन के साथ n > एन 0 यह सच है कि जी ( एन ) ≤ ग च ( n )।
अब हम वास्तविक प्रश्न पर पहुंचने के लिए तैयार हैं।
वर्ग पी शामिल सभी भाषाओं एल जिसके लिए एक ट्यूरिंग मशीन वहां मौजूद डी कि फैसला करता एल और एक निरंतर कश्मीर ∈ एन हर इनपुट के लिए ऐसी है कि डब्ल्यू , डी ज्यादा से ज्यादा के बाद हाल्ट टी (| w |) एक समारोह के लिए चरणों का टी ∈ हे ( n ↦ n कश्मीर )।
चूंकि हे ( एन ↦ n कश्मीर ) है, जबकि गणितीय सही, लिखने के लिए असुविधाजनक और पढ़ा है, ज्यादातर लोगों को है - ईमानदारी से, हर कोई अपने आप को छोड़कर - आम तौर पर सिर्फ लिखते हे ( एन कश्मीर )।
ध्यान दें कि बाउंड डब्ल्यू की लंबाई पर निर्भर करता है । इसलिए, आप जिस भाषा की primes के लिए तर्क करते हैं, वह केवल अनार्य एनकोडिंग में संख्याओं के लिए सही है , जहाँ नंबर n के एन्कोडिंग w के लिए एन्कोडिंग की लंबाई है | w | n के आनुपातिक है । कोई भी कभी भी अभ्यास में इस तरह के एन्कोडिंग का उपयोग नहीं करेगा। सभी संभावित कारकों की कोशिश करने की तुलना में अधिक उन्नत एल्गोरिदम का उपयोग करते हुए, यह दिखाया जा सकता है, हालांकि, अभाज्य संख्याओं की भाषा पी में रहती है यदि इनपुट बाइनरी में (या किसी अन्य आधार पर) एन्कोड किए गए हैं। (बड़े पैमाने पर रुचि के बावजूद, यह केवल मनिंद्र अग्रवाल, नीरज कयाल और नितिन सक्सेना द्वारा सिद्ध किया जा सकता है 2004 में एक पुरस्कार विजेता पेपर में ताकि आप अनुमान लगा सकें कि एल्गोरिथ्म बहुत सरल नहीं है।)
तुच्छ भाषाओं {} और Σ * और गैर तुच्छ भाषा { ε } में स्पष्ट रूप से कर रहे हैं पी (किसी भी वर्णमाला के लिए Σ )। क्या आप अपनी पसंदीदा प्रोग्रामिंग भाषा में फ़ंक्शन लिख सकते हैं जो एक स्ट्रिंग को इनपुट के रूप में लेते हैं और एक बूलियन को यह बताते हुए लौटाते हैं कि क्या स्ट्रिंग इनमें से प्रत्येक के लिए भाषा का एक शब्द है और यह साबित करता है कि आपके फ़ंक्शन में बहुपद रन-टाइम जटिलता है?
हर नियमित भाषा (एक नियमित अभिव्यक्ति द्वारा वर्णित भाषा) पी में है ।
चलो Σ एक वर्णमाला और हो एल ⊆ Σ * । एक मशीन वी दो शब्दों से एक एन्कोड टपल लेता डब्ल्यू , सी ∈ Σ * कदम की एक निश्चित संख्या के बाद और आउटपुट 0 या 1 एक है सत्यापनकर्ता के लिए एल यदि वह निम्नलिखित गुण है।
- (देखते हुए डब्ल्यू , सी ,) वी आउटपुट 1 केवल तभी डब्ल्यू ∈ एल ।
- हर के लिए डब्ल्यू ∈ एल , एक वहां मौजूद ग ∈ Σ * ऐसी है कि वी ( डब्ल्यू , ग ) = 1।
ग उपरोक्त परिभाषा में एक कहा जाता है गवाह (या प्रमाण पत्र )।
एक सत्यापनकर्ता को गलत गवाह के लिए झूठी नकारात्मक देने की अनुमति दी जाती है, भले ही डब्ल्यू वास्तव में एल में हो । हालांकि, यह झूठी सकारात्मक देने की अनुमति नहीं है। यह भी आवश्यक है कि भाषा में प्रत्येक शब्द के लिए, कम से कम एक गवाह मौजूद हो।
भाषा COMPOSITE के लिए, जिसमें सभी पूर्णांकों के दशमलव एनकोडिंग शामिल हैं जो कि प्रमुख नहीं हैं , एक गवाह एक कारक हो सकता है। उदाहरण के लिए, OS COMPOSITE के (659, 709)
लिए एक गवाह है 467231
। आप आसानी से सत्यापित कर सकते हैं कि कागज की एक शीट पर जबकि गवाह के बिना, यह साबित करना कि 467231 प्राइम नहीं है कंप्यूटर का उपयोग किए बिना मुश्किल होगा।
हमने इस बारे में कुछ नहीं कहा कि एक उपयुक्त गवाह कैसे मिल सकता है। यह गैर-निर्धारक भाग है।
वर्ग एनपी शामिल सभी भाषाओं एल जिसके लिए एक ट्यूरिंग मशीन वहां मौजूद वी , जो यह सत्यापित एल और एक निरंतर कश्मीर ∈ एन हर इनपुट के लिए ऐसी है कि ( डब्ल्यू , सी ), वी हाल्ट ज्यादा से ज्यादा के बाद टी (| w |) एक समारोह के लिए चरणों टी ∈ हे ( एन ↦ n कश्मीर )।
ध्यान दें कि उपरोक्त परिभाषा का अर्थ है कि प्रत्येक w के लिए impl L के साथ एक ग मौजूद है सी | ≤ टी (| w |)। (ट्यूरिंग मशीन संभवतः साक्षी के अधिक प्रतीकों को नहीं देख सकती है।)
एनपी पी (क्यों?) का सुपरसेट है । यह ज्ञात नहीं है कि वहाँ मौजूद भाषाएँ एनपी में हैं लेकिन पी में नहीं हैं ।
इंटेगर फैक्टराइजेशन एक भाषा नहीं है। हालाँकि, हम एक ऐसी भाषा का निर्माण कर सकते हैं जो उससे जुड़ी निर्णय समस्या का प्रतिनिधित्व करती है। यह है कि, एक भाषा है कि सभी tuples शामिल ( n , m ) ऐसी है कि n एक कारक है डी के साथ घ ≤ मीटर । आइए हम इस भाषा को FACTOR कहते हैं। यदि आपके पास FACTOR तय करने के लिए एक एल्गोरिथ्म है, तो इसका उपयोग प्रत्येक मुख्य कारक के लिए एक पुनरावर्ती बाइनरी खोज का प्रदर्शन करके केवल बहुपद ओवरहेड के साथ एक पूर्ण कारकीकरण की गणना करने के लिए किया जा सकता है।
यह दिखाना आसान है कि FACTOR NP में है । एक उचित गवाह बस कारक होगा घ ही है और सभी सत्यापनकर्ता करने के लिए होता है सत्यापित करें कि है घ ≤ मीटर और n आधुनिक घ = इस का 0. सभी बहुपद समय में किया जा सकता। (याद रखें, फिर से, यह एन्कोडिंग की लंबाई है जो मायने रखता है और एन में लॉगरिदमिक है ।)
यदि आप दिखा सकते हैं कि FACTOR P में भी है , तो आप कई अच्छे पुरस्कार प्राप्त कर सकते हैं। (और आपने आज की क्रिप्टोग्राफी के एक महत्वपूर्ण हिस्से को तोड़ दिया है।)
में हर भाषा के लिए एनपी , वहाँ एक जानवर बल एल्गोरिथ्म है कि निर्णय लेता है यह निर्धारणात्मक। यह बस सभी गवाहों पर एक विस्तृत खोज करता है। (ध्यान दें कि किसी गवाह की अधिकतम लंबाई एक बहुपद से बंधी होती है।) इसलिए, PRIMES तय करने के लिए आपका एल्गोरिथ्म वास्तव में COMPOSITE तय करने के लिए एक जानवर-बल एल्गोरिथ्म था।
आपके अंतिम प्रश्न को संबोधित करने के लिए, हमें कमी लाने की आवश्यकता है । कटौती सैद्धांतिक कंप्यूटर विज्ञान की एक बहुत शक्तिशाली अवधारणा है। एक समस्या को मूल रूप से कम करना दूसरी समस्या को हल करने के माध्यम से एक समस्या को हल करना है।
चलो Σ एक वर्णमाला है और A और B Σ से अधिक की भाषाएँ हैं । एक है बहुपद समय में कई-एक कम करने योग्य करने के लिए बी यदि वहां मौजूद एक समारोह च : Σ * → Σ * निम्नलिखित गुणों के साथ।
- डब्ल्यू ∈ एक ⇔ च ( डब्ल्यू ) ∈ बी सभी के लिए डब्ल्यू ∈ Σ * ।
- समारोह च हर इनपुट के लिए एक ट्यूरिंग मशीन द्वारा गणना की जा सकती डब्ल्यू एक बहुपद में से घिरा कई कदम में | w |
इस मामले में, हम लिखते हैं एक ≤ पी बी ।
उदाहरण के लिए, A एक ऐसी भाषा है जिसमें सभी ग्राफ़ होते हैं (आसन्न मैट्रिक्स के रूप में एन्कोडेड) जिसमें एक त्रिकोण होता है। (एक त्रिभुज 3. लंबाई का एक चक्र है।) आगे B को वह भाषा बताएं जिसमें सभी शून्य-शून्य ट्रेस वाले सभी मैट्रिसेस हों। (मैट्रिक्स का ट्रेस इसके मुख्य विकर्ण तत्वों का योग है।) तब A बहुपद-समय कई-एक reducible to B है । यह साबित करने के लिए, हमें एक उपयुक्त परिवर्तन फ़ंक्शन f खोजने की आवश्यकता है । इस स्थिति में, हम आसन्न मैट्रिक्स की 3 rd शक्ति की गणना करने के लिए f सेट कर सकते हैं । इसके लिए दो मैट्रिक्स-मैट्रिक्स उत्पादों की आवश्यकता होती है, जिनमें से प्रत्येक में बहुपद जटिलता होती है।
यह तुच्छ सच है कि एल ≤ पी एल । (क्या आप इसे औपचारिक रूप से साबित कर सकते हैं?)
हम इसे अभी एनपी पर लागू करेंगे ।
एक भाषा एल है एनपी -हार्ड यदि और केवल यदि एल '≤ पी एल हर भाषा के लिए एल ' ∈ एनपी ।
एक एनपी -हार्ड भाषा एनपी में ही हो सकती है या नहीं भी हो सकती है।
एक भाषा L , केवल और यदि है तो NP- अपूर्ण है
- एल ∈ एनपी और
- L , NP -hard है।
सबसे प्रसिद्ध एनपी- अपूर्ण भाषा SAT है। इसमें सभी बूलियन सूत्र शामिल हैं जो संतुष्ट हो सकते हैं। उदाहरण के लिए, ( a ∨ b ) ∧ ( ∨ a ¬ ∈ b )। SAT। एक वैध गवाह है { a = 1, b = 0} है। सूत्र ( एक ∨ ख ) ∧ (¬ एक ∨ ख ) ∧ ¬ ख ∉ बैठ गया। (आप यह कैसे साबित करेंगे?)
यह दिखाना मुश्किल नहीं है कि SAT । एनपी । SAT के NP -hardness को दिखाने के लिए कुछ काम है लेकिन यह 1971 में स्टीफन कुक द्वारा किया गया था ।
एक बार जब एक एनपी- अपूर्ण भाषा जानी जाती थी, तो कमी के माध्यम से अन्य भाषाओं की एनपी- अपूर्णता दिखाना अपेक्षाकृत सरल था । यदि भाषा ए को एनपी -हार्ड के रूप में जाना जाता है , तो यह दर्शाना कि ए ≤ पी बी शो कि बी है एनपी हार्ड, भी ( "≤ की संक्रामिता के माध्यम से पी ")। 1972 में रिचर्ड कार्प ने 21 भाषाओं की एक सूची प्रकाशित की जो वे दिखा सकते थे कि वे एनपी हैंSAT के माध्यम से (सकर्मक) कमी को पूरा करें। (इस उत्तर में केवल यही एक पेपर है जिसे मैं वास्तव में आपको पढ़ने की सलाह दूंगा। दूसरों के विपरीत, यह समझना मुश्किल नहीं है और यह बहुत अच्छा विचार देता है कि एनपी -कंपनी को कम करने वाले कार्यों के माध्यम से कैसे साबित किया जाए ।)
अंत में, एक संक्षिप्त सारांश। हम NPH और NPC प्रतीकों का उपयोग करेंगे की कक्षाओं को निरूपित करने के एनपी -हार्ड और एनपी क्रमशः -Complete भाषाओं।
- पी ⊆ एनपी
- एनपीसी ⊂ एनपी और एनपीसी ⊂ एनपीएच , वास्तव में एनपीसी = एनपी ∩ एनपीएच परिभाषा के द्वारा
- ( एक ∈ एनपी ) ∧ ( बी ∈ एनपीएच ) ⇒ एक ≤ पी बी
ध्यान दें कि एनपीसी ⊂ एनपी शामिल करने के मामले में भी उचित है कि पी = एनपी । इसे देखने के लिए, अपने आप को स्पष्ट करें कि किसी भी गैर-तुच्छ भाषा को एक तुच्छता में नहीं घटाया जा सकता है और पी में तुच्छ भाषा के साथ-साथ एनपी में गैर-तुच्छ भाषाएं भी हैं । यह एक (बहुत दिलचस्प नहीं) कोने का मामला है, हालांकि।
परिशिष्ट
भ्रम की अपनी प्राथमिक स्रोत होने के लिए है कि आप "के बारे में सोच रहे थे लगता n " में " हे ( एन ↦ च ( एन ))" के रूप में व्याख्या एक एल्गोरिथ्म के इनपुट की है जब यह वास्तव में के लिए संदर्भित करता लंबाई इनपुट के। यह एक महत्वपूर्ण अंतर है क्योंकि इसका मतलब है कि एल्गोरिथ्म की असममित जटिलता इनपुट के लिए उपयोग किए जाने वाले एन्कोडिंग पर निर्भर करती है ।
इस हफ्ते, सबसे बड़े मर्सन प्राइम के लिए एक नया रिकॉर्ड हासिल किया गया। वर्तमान में ज्ञात सबसे बड़ी अभाज्य संख्या 2 74 207 281 है - 1. यह संख्या इतनी बड़ी है कि यह मुझे सिरदर्द देती है इसलिए मैं निम्नलिखित उदाहरण में एक छोटे से एक का उपयोग करूँगा: 2 31 - 1 = 2 147 483 647. यह कर सकते हैं। अलग-अलग तरीकों से इनकोडिंग करें।
- दशमलव संख्या के रूप में इसके मेरसेन प्रतिपादक द्वारा:
31
(2 बाइट्स)
- दशमलव संख्या के रूप में:
2147483647
(10 बाइट्स)
- असमान संख्या के रूप में:
11111…11
जहां …
2 147 483 640 अधिक 1
s (लगभग 2 GiB) द्वारा प्रतिस्थापित किया जाना है
ये सभी तार एक ही नंबर को एन्कोड करते हैं और इनमें से किसी को भी, हम आसानी से एक ही नंबर के किसी भी अन्य एन्कोडिंग का निर्माण कर सकते हैं। (आप चाहें तो दशमलव एन्कोडिंग को बाइनरी, ऑक्टल या हेक्साडेसिमल से बदल सकते हैं। यह केवल एक स्थिर कारक द्वारा लंबाई बदलता है।)
मौलिकता का परीक्षण करने के लिए भोली एल्गोरिथ्म केवल एकात्मक एनकोडिंग के लिए बहुपद है। अक्स primality परीक्षण दशमलव (या किसी अन्य आधार के लिए बहुपद है ख ≥ 2)। लुकास-लेह्मर primality परीक्षण Mersenne के लिए सबसे अच्छा ज्ञात एल्गोरिथ्म primes है एम पी के साथ पी एक अजीब प्रधानमंत्री लेकिन यह अभी भी घातीय Mersenne प्रतिपादक के द्विआधारी कूटबन्धन की लंबाई में है पी में (बहुपद पी )।
यदि हम एक एल्गोरिथ्म की जटिलता के बारे में बात करना चाहते हैं, तो यह बहुत महत्वपूर्ण है कि हम बहुत स्पष्ट हैं कि हम किस प्रतिनिधित्व का उपयोग करते हैं। सामान्य तौर पर, कोई यह मान सकता है कि सबसे कुशल एन्कोडिंग का उपयोग किया जाता है। यही है, पूर्णांक के लिए द्विआधारी। (ध्यान दें कि प्रत्येक अभाज्य संख्या एक Mersenne प्राइम नहीं है इसलिए Mersenne घातांक का उपयोग करना सामान्य एन्कोडिंग योजना नहीं है।)
सैद्धांतिक क्रिप्टोग्राफी में, कई एल्गोरिदम को औपचारिक रूप से पहले पैरामीटर के रूप में k की पूरी तरह से बेकार स्ट्रिंग पास किया 1
जाता है। एल्गोरिथ्म इस पैरामीटर को कभी नहीं देखता है, लेकिन यह इसे औपचारिक रूप से k में बहुपद होने की अनुमति देता है , जो कि प्रक्रिया की सुरक्षा को ट्यून करने के लिए उपयोग किया जाने वाला सुरक्षा पैरामीटर है।
कुछ समस्याओं के लिए जिनके लिए द्विआधारी एन्कोडिंग में निर्णय भाषा एनपी- अपूर्ण है, यदि एंबेडेड संख्याओं के एन्कोडिंग को स्विच करने के लिए निर्णय भाषा अब एनपी- अपूर्ण नहीं है । अन्य समस्याओं के लिए निर्णय भाषा तब भी एनपी- पूर्ण रहती है । उत्तरार्द्ध दृढ़ता से एनपी- पूर्ण कहलाते हैं । सबसे अच्छा ज्ञात उदाहरण बिन पैकिंग है ।
यह भी (और शायद अधिक) दिलचस्प है यह देखने के लिए कि इनपुट संकुचित होने पर एल्गोरिथ्म की जटिलता कैसे बदल जाती है । मर्सेन के अपराधों के उदाहरण के लिए, हमने तीन एन्कोडिंग देखे हैं, जिनमें से प्रत्येक लॉगरिदमिक रूप से अपने पूर्ववर्ती की तुलना में अधिक संकुचित है।
1983 में, हाना गैल्परिन और एवी विगडरसन ने कॉमन ग्राफ एल्गोरिदम की जटिलता के बारे में एक दिलचस्प पेपर लिखा है जब ग्राफ़ के इनपुट एन्कोडिंग को लघुगणकीय रूप से संकुचित किया जाता है। इन इनपुट्स के लिए, ऊपर से त्रिकोण (जहां यह स्पष्ट रूप से पी में था ) वाले ग्राफ़ की भाषा अचानक एनपी बन जाती है पूर्ण ।
और ऐसा इसलिए है क्योंकि पी और एनपी जैसी भाषा कक्षाएं भाषा के लिए परिभाषित की जाती हैं , समस्याओं के लिए नहीं ।