पी बनाम एनपी बनाम एनपी पूरा बनाम एनपी हार्ड को समझने की कोशिश कर रहा है


38

मैं इन वर्गीकरणों को समझने की कोशिश कर रहा हूं और वे क्यों मौजूद हैं। क्या मेरी समझ सही है? यदि नहीं, तो क्या?

  1. P बहुपद जटिलता है, या कुछ गैर-नकारात्मक वास्तविक संख्या , जैसे , आदि। यदि कोई समस्या P से संबंधित है, तो कम से कम एक एल्गोरिथ्म मौजूद है जो इसे बहुपद समय में खरोंच से हल कर सकता है। उदाहरण के लिए मैं हमेशा यह पता लगा सकता हूं कि यदि कुछ पूर्णांक विभाजित है और विभाजित होने पर प्रत्येक चरण पर जाँच करके मुख्य है ।O(nk)kO(1), O(n1/2), O(n2), O(n3)n2 <= k <= sqrt(n)kn

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

  3. एनपी-कम्पलीट मुझे बिल्कुल भी समझ में नहीं आता है, लेकिन ट्रैवलिंग सेल्समैन समस्या को इसके उदाहरण के रूप में उद्धृत किया गया है। लेकिन मेरी राय में टीएसपी समस्या सिर्फ एनपी हो सकती है, क्योंकि अगर आपको सामने का रास्ता दिया जाता है तो यह सत्यापित करने के लिए कुछ लेता है ।O(2n n2) time to solve, but O(n)

  4. एनपी-हार्ड मुझे लगता है कि सिर्फ अज्ञात से भरा है। सत्यापित करना कठिन, हल करना कठिन।


4
क्या आपने CS.SE पर प्रश्न पढ़ा है कि P, NP, NP-complete और NP-hard की परिभाषा क्या है? ?

मैंने वह लिंक अभी तक नहीं देखा है, नहीं। मैं इसे
पढ़ूंगा

1
वह CS.SE उत्तर काफी विस्मयकारी है, लेकिन मुझे लगता है कि इन शब्दों का लगभग इतना विस्तार से जाने के बिना बहुत संक्षिप्त और गैर-भ्रामक विवरण देना संभव है। @ नाकोनो को एक छोटी, "टू द पॉइंट" उत्तर में दिलचस्पी होगी या क्या सीएसएसई पोस्ट आपकी समस्या का समाधान करती है?
Ixrec

@ मिचेल्ट मैंने उस लिंक के माध्यम से पढ़ा और पाया कि यह वास्तव में क्रिया है और कई बिंदुओं पर स्पष्ट नहीं है। मुझे ऐसा लगता है कि इसने मुझे जवाबों से ज्यादा सवाल दिए।
नाकानो

1
"गैर-नियतात्मक" के रूप में व्याख्या की जा सकती है "एक विकल्प जिसे कंप्यूटर हर बार सही विकल्प चुनता है"।
थोरबजर्न रावन एंडरसन

जवाबों:


39

आप मूल रूप से P और NP के बारे में सही हैं, लेकिन NP-hard और NP-complete के बारे में नहीं।

शुरुआत के लिए, यहां प्रश्न में चार जटिलता वर्गों की सुपर-संक्षिप्त परिभाषाएं हैं:

  • P निर्णय की समस्याओं का वर्ग है जिसे एक नियतात्मक ट्यूरिंग मशीन द्वारा बहुपद समय में हल किया जा सकता है।

  • एनपी निर्णय की समस्याओं का वर्ग है जिसे गैर-नियतात्मक ट्यूरिंग मशीन द्वारा बहुपद समय में हल किया जा सकता है। समान रूप से, यह समस्याओं का वर्ग है जिसे एक नियतात्मक ट्यूरिंग मशीन द्वारा बहुपद समय में सत्यापित किया जा सकता है

  • एनपी-हार्ड निर्णय की समस्याओं का वर्ग है जिसमें एनपी की सभी समस्याओं को एक नियतकालीन इलाज मशीन द्वारा बहुपद समय में कम किया जा सकता है।

  • एनपी-पूरा एनपी-हार्ड और एनपी का चौराहा है। समान रूप से, एनपी-पूर्ण एनपी में निर्णय की समस्याओं का वर्ग है, जिसमें एनपी की सभी समस्याओं को नियतात्मक ट्यूरिंग मशीन द्वारा बहुपद समय में कम किया जा सकता है।

और यहाँ विकिपीडिया का एक यूलर डायग्राम इन चार वर्गों के बीच के रिश्तों को दिखा रहा है (यह मानते हुए कि P, NP के बराबर नहीं है):

यहाँ छवि विवरण दर्ज करें

जिस भाग को मैं मानता हूं कि आप सबसे अधिक अपरिचित या भ्रमित हैं, वह समस्या "X से Y तक" बहुपद समय में कमी की धारणा है। X से Y तक की कमी केवल एक एल्गोरिथ्म है जो कुछ का उपयोग करके X को हल करता है। अन्य एल्गोरिथ्म बी जो समस्या को हल करता है। इस कमी को "बहुपद समय में कमी" कहा जाता है यदि B के अलावा A के सभी भागों में बहुपद समय की जटिलता हो। एक तुच्छ उदाहरण के रूप में, एक सरणी में सबसे छोटे तत्व को खोजने की समस्या निरंतर-समय के लिए छँटाई समस्या के लिए है, क्योंकि आप सरणी को सॉर्ट कर सकते हैं और फिर सॉर्ट किए गए सरणी के पहले तत्व को वापस कर सकते हैं।

एनपी-हार्ड परिभाषा के बारे में एक बात याद रखना आसान है कि कमी एनपी समस्याओं से एनपी-हार्ड समस्या तक जाती है, लेकिन जरूरी नहीं कि यह बहुत ही महत्वपूर्ण है । इसका मतलब यह है कि एनपी-हार्ड समस्याएं एनपी में हो सकती हैं, या बहुत अधिक जटिलता वर्ग में (जैसा कि आप यूलर आरेख से देख सकते हैं), या वे भी निर्णायक समस्याएं नहीं हो सकती हैं। इसलिए लोग अक्सर इस सामान को अनौपचारिक रूप से समझाने की कोशिश करते समय "एनपी-हार्ड का मतलब कम से कम एनपी जितना कठिन" जैसा कुछ कहते हैं।

हॉल्ट समस्या एनपी-हार्ड समस्या का एक अच्छा उदाहरण है जो स्पष्ट रूप से एनपी में नहीं है, जैसा कि विकिपीडिया बताते हैं :

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


3
@Nakano सहज रूप से, यह "कमी" इस अर्थ में है कि एक समस्या को किसी अन्य समस्या का एक उपप्रकार बनाया जा रहा है। यह तथ्य यह है कि इनमें से कुछ कटौती "सबप्रोब्लेम" की खराब पसंद के माध्यम से घटने के बजाय जटिलता को बढ़ाती है, इसका सीधा सा मतलब है कि आप कभी भी किसी वास्तविक विश्व कोड में इन कटौती का उपयोग नहीं करेंगे। हालांकि ईमानदार होने के लिए एनपी-हार्ड मुझे एक अजीब और बहुत दिलचस्प वर्ग के रूप में हड़ताल नहीं करता है; इसे नजरअंदाज करना ज्यादा फायदेमंद हो सकता है और एनपी के बारे में सिर्फ इतना सोचें कि एनपी की समस्या का एक सेट हो जो अन्य सभी एनपी समस्याओं को कम कर दे।
Ixrec

1
@Nakano stackoverflow.com/questions/12637582/… मेरा मानना ​​है कि संक्षिप्त उत्तर यह है कि जब लोग पूर्णांक कारक के एनपी होने की बात करते हैं तो वे आम तौर पर वास्तव में बहुत बड़े पूर्णांक के बारे में बात करते हैं, जिसके लिए आप आम तौर पर अपने बड़े-ओ प्रमाण के अनुसार काम करना शुरू करते हैं। "बिट्स की संख्या पूर्णांक मेमोरी में ले जाती है" इसके बजाय "फ़ंक्शन में आपके पास पूर्णांक की संख्या"।
Ixrec

1
@ नाकोनो शायद इस पूर्णांक कारक के बारे में विशेष रूप से एक नया प्रश्न पूछने के लायक होगा यदि एसओ प्रश्न मैं जुड़ा हुआ था और मेरी टिप्पणी आपके लिए उस मुद्दे को हल करने के लिए पर्याप्त नहीं थी।
Ixrec

2
@ नाकोनो: बिग-ओ नोटेशन में, nइनपुट के आकार (तत्वों की संख्या, बाइट्स, अंक आदि) के लिए एक माप है, न कि इनपुट का मूल्य।
बार्ट वैन इनगेन शनाउ

2
@Nakano संक्षिप्त उत्तर यह है कि आप बिलकुल ठीक हैं, और यही कारण है कि जब समय जटिलता एनालिसिस करते हैं तो आपको हमेशा यह निर्दिष्ट करने की आवश्यकता होती है कि इसका क्या मतलब है । दावा है कि n "इनपुट का आकार है" केवल एक संक्षिप्त सारांश है कि हम आमतौर पर n को कैसे परिभाषित करते हैं। यह बड़े-ओ अंकन या समय की जटिलता की कठोर परिभाषाओं का हिस्सा नहीं है। मेरा मानना ​​है कि जब एन इनपुट का मान होता है तो आप यह कहना सही समझते हैं कि पूर्णांक गुणनखंडन O (sqrt (n)) है । यह सिर्फ इतना होता है कि जटिलता का परिणाम होता है जहां n का मतलब आकार आमतौर पर अभ्यास में बहुत अधिक उपयोगी होता है जहां n का अर्थ है मूल्य।
Ixrec

7

पूर्णांक कारक को एनपी के उदाहरण के रूप में उद्धृत किया जाता है, लेकिन मुझे समझ में नहीं आता है कि यह पी क्यों नहीं है, व्यक्तिगत रूप से, चूंकि परीक्षण कारक ओ (sqrt (n)) समय लेता है।

जटिलता कक्षाओं के प्रयोजनों के लिए, nइनपुट की लंबाई है। इसलिए यदि आप पूर्णांक को कारक बनाना चाहते हैं k, लेकिन nयह नहीं है , तो संख्याओं को लिखने के लिए बिट्स (या जो भी) की संख्या होती है। तो पूर्णांक कारककरण जैसा कि आप कहते हैं, लेकिन यह वह है जो है ।klog kO(sqrt(k))O(sqrt(2n))O(2(n/2))

एनपी-हार्ड मुझे लगता है कि सिर्फ अज्ञात से भरा है। सत्यापित करना कठिन, हल करना कठिन।

एनपी-हार्ड केवल एक समस्या को हल करने के लिए कितना कठिन है।

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

एनपी-पूरा मुझे बिल्कुल समझ में नहीं आता है

एनपी-कम्पलीट का मतलब है कि एक समस्या एनपी और एनपी-हार्ड दोनों है। इसका मतलब है कि हम किसी समाधान को जल्दी से (एनपी) सत्यापित कर सकते हैं, लेकिन कम से कम एनपी (एनपी-हार्ड) में सबसे कठिन समस्या है।

मैं वास्तव में यह नहीं जानता कि इसके गैर-नियतात्मक होने का क्या मतलब है।

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


तो यह $ O (n ^ k) $ समय एल्गोरिदम के लिए एनपी समस्या होने के लिए संभव है?
नैकानो

kएक निरंतर वास्तविक संख्या है? हाँ। सभी P समस्याएं भी NP समस्याएँ हैं। जाहिर है, बहुपद समय में आप जो कुछ भी हल कर सकते हैं, वह भी बहुपद समय में सत्यापित किया जा सकता है।
विंस्टन एवर्ट

लंबाई / आकार वास्तव में यहाँ कैसे परिभाषित किया गया है? उदाहरण के लिए, मैं एक बड़े आधार में $ n $ लिख सकता था और जब लिखा जाता है तो इसकी लंबाई कम कर सकता है। उन समस्याओं के बारे में जो पूर्णांक के साथ स्पष्ट रूप से सौदा नहीं करते हैं, लेकिन $ V $ वर्टिस और $ E $ किनारों के साथ ग्राफ़ कहते हैं, आदि
Nakano

@ नैनो, वास्तव में एक बड़ा आधार इसे नहीं बदलेगा, क्योंकि यह केवल एक स्थिर कारक अंतर होगा। इसलिए यह बहुपद बनाम गैर-बहुपद में प्रभाव नहीं डालेगा। हालांकि, यदि आपने संख्या को एकात्मक में लिखा है, तो यह इसे बदल देगा।
विंस्टन एवर्ट

2
@ नाकोनो, हम्म ... मैं पाँच साल की जटिलता वर्गों को समझाने की कोशिश नहीं करूंगा। : पी
विंस्टन एवर्ट

5

समझने वाली पहली बात यह है कि पी और एनपी भाषाओं का वर्गीकरण करते हैं , समस्याओं का नहीं । यह समझने के लिए कि इसका क्या अर्थ है, हमें पहले कुछ अन्य परिभाषाओं की आवश्यकता है।

एक वर्णमाला प्रतीकों का एक गैर-रिक्त परिमित सेट है।

{ 0, 1} एक वर्णमाला है जैसा कि ASCII वर्ण सेट है। {} यह वर्णमाला नहीं है क्योंकि यह खाली है। एन (पूर्णांक) एक वर्णमाला नहीं है क्योंकि यह परिमित नहीं है।

आज्ञा देना alp एक वर्णमाला है। से प्रतीकों की एक सीमित संख्या का एक आदेश दिया संयोजन Σ एक कहा जाता है शब्द से अधिक Σ

स्ट्रिंग 101वर्णमाला { 0, 1} पर एक शब्द है । खाली शब्द (अक्सर के रूप में लिखा ε ) किसी भी वर्णमाला के ऊपर एक शब्द है। स्ट्रिंग penguinASCII वर्णों वाले वर्णमाला के ऊपर एक शब्द है। संख्या π की दशमलव संकेतन वर्णमाला पर एक शब्द नहीं है { ., 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 |) एक समारोह के लिए चरणों का टीहे ( nn कश्मीर )।

चूंकि हे ( एन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 है। इसमें सभी बूलियन सूत्र शामिल हैं जो संतुष्ट हो सकते हैं। उदाहरण के लिए, ( ab ) ∧ ( ∨ 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 अधिक 1s (लगभग 2 GiB) द्वारा प्रतिस्थापित किया जाना है

ये सभी तार एक ही नंबर को एन्कोड करते हैं और इनमें से किसी को भी, हम आसानी से एक ही नंबर के किसी भी अन्य एन्कोडिंग का निर्माण कर सकते हैं। (आप चाहें तो दशमलव एन्कोडिंग को बाइनरी, ऑक्टल या हेक्साडेसिमल से बदल सकते हैं। यह केवल एक स्थिर कारक द्वारा लंबाई बदलता है।)

मौलिकता का परीक्षण करने के लिए भोली एल्गोरिथ्म केवल एकात्मक एनकोडिंग के लिए बहुपद है। अक्स primality परीक्षण दशमलव (या किसी अन्य आधार के लिए बहुपद है ≥ 2)। लुकास-लेह्मर primality परीक्षण Mersenne के लिए सबसे अच्छा ज्ञात एल्गोरिथ्म primes है एम पी के साथ पी एक अजीब प्रधानमंत्री लेकिन यह अभी भी घातीय Mersenne प्रतिपादक के द्विआधारी कूटबन्धन की लंबाई में है पी में (बहुपद पी )।

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

सैद्धांतिक क्रिप्टोग्राफी में, कई एल्गोरिदम को औपचारिक रूप से पहले पैरामीटर के रूप में k की पूरी तरह से बेकार स्ट्रिंग पास किया 1जाता है। एल्गोरिथ्म इस पैरामीटर को कभी नहीं देखता है, लेकिन यह इसे औपचारिक रूप से k में बहुपद होने की अनुमति देता है , जो कि प्रक्रिया की सुरक्षा को ट्यून करने के लिए उपयोग किया जाने वाला सुरक्षा पैरामीटर है।

कुछ समस्याओं के लिए जिनके लिए द्विआधारी एन्कोडिंग में निर्णय भाषा एनपी- अपूर्ण है, यदि एंबेडेड संख्याओं के एन्कोडिंग को स्विच करने के लिए निर्णय भाषा अब एनपी- अपूर्ण नहीं है । अन्य समस्याओं के लिए निर्णय भाषा तब भी एनपी- पूर्ण रहती है । उत्तरार्द्ध दृढ़ता से एनपी- पूर्ण कहलाते हैं । सबसे अच्छा ज्ञात उदाहरण बिन पैकिंग है

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

1983 में, हाना गैल्परिन और एवी विगडरसन ने कॉमन ग्राफ एल्गोरिदम की जटिलता के बारे में एक दिलचस्प पेपर लिखा है जब ग्राफ़ के इनपुट एन्कोडिंग को लघुगणकीय रूप से संकुचित किया जाता है। इन इनपुट्स के लिए, ऊपर से त्रिकोण (जहां यह स्पष्ट रूप से पी में था ) वाले ग्राफ़ की भाषा अचानक एनपी बन जाती है पूर्ण ।

और ऐसा इसलिए है क्योंकि पी और एनपी जैसी भाषा कक्षाएं भाषा के लिए परिभाषित की जाती हैं , समस्याओं के लिए नहीं ।


यह उत्तर शायद पूछने वाले के समझने के स्तर के लिए उपयोगी नहीं है। अन्य उत्तरों को पढ़ें और देखें कि नानको क्या संघर्ष कर रहा है। क्या आपको लगता है कि यह उत्तर उसकी / उसकी मदद करेगा?
एंड्रेस एफ।

यह उत्तर ओपी की मदद नहीं कर सकता है, लेकिन निश्चित रूप से अन्य पाठकों (स्वयं शामिल) में मदद करता है।
गेब्रियल

4

मैं आपको उसी के लिए कम अनौपचारिक परिभाषा देने की कोशिश करूंगा।

पी समस्याएं: ऐसी समस्याएं जिन्हें बहुपद समय में हल किया जा सकता है। समस्याओं को हल करता है जो कुशलता से हल किया जा सकता है।

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

अब, पी बनाम एनपी वास्तव में पूछता है कि क्या कोई समस्या जिसका समाधान जल्दी से सही होने के लिए जाँच की जा सकती है, तो वहाँ हमेशा इसे हल करने का एक तेज़ तरीका है। इस प्रकार गणितीय रूप से लिखना: एनपी पी का सबसेट है या नहीं?

अब पूरी तरह से एनपी पर वापस आ रहे हैं: ये वास्तव में एनपी की समस्याओं के कठिन हैं। इसलिए यदि एनपी को हल करने का एक तेज़ तरीका है तो एनपी पूरा पी बन जाता है और एनपी समस्याएं पी में गिर जाती हैं।

एनपी हार्ड: बहुपद समय में जिन समस्याओं की जाँच भी नहीं की जा सकती है वे एनपी हार्ड हैं। उदाहरण के लिए, शतरंज में सर्वश्रेष्ठ चाल चुनना उनमें से एक है।

यदि कुछ अस्पष्ट रहता है, तो इस वीडियो को देखने का प्रयास करें: https://www.youtube.com/watch?v=YX40hbAHx3s

मुझे उम्मीद है कि यह कुछ धुंधला समोच्च प्रदान करेगा।

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