कोई जादू की गोली नहीं है; एनपी-कठोरता प्रमाण कठिन हैं। हालांकि, ऐसे सभी सबूतों के लिए एक सामान्य ढांचा है। कई छात्र जो एनपी-कठोरता प्रमाण के साथ संघर्ष करते हैं , वे उलझन में हैं कि वे क्या करने वाले हैं, जो स्पष्ट रूप से यह पता लगाना असंभव बनाता है कि यह कैसे करना है। तो यहाँ क्या करना है एक समस्या एनपी कठिन साबित करने के लिए।
पहला, जब तक आप सिर्फ होमवर्क नहीं कर रहे हैं, आपको यह तय करना होगा कि आपकी समस्या को कम करने के लिए कौन सी एनपी-कठिन समस्या है । यह काफी हद तक "गंध" का सवाल है। यदि समस्या कथन में कहीं भी संख्या 3 दिखाई देती है, तो या या से कम करने का प्रयास करें । (हां, मैं गंभीर हूं।) यदि आपकी समस्या में एक इष्टतम या क्रमपरिवर्तन या पथ शामिल है, तो या से कम करने का प्रयास करें । यदि आपकी समस्या एक निश्चित संपत्ति के साथ सबसे छोटी सबसेट के लिए पूछती है, तो C l i q u e का प्रयास करें3 सी ओ एल ओ आर 3 पी एक आर टी मैं टी मैं ओ एन एच एक मीटर मैं एल टी ओ एन मैं एक एन सी वाई सी एल ई एच एक मीटर मैं एल टी ओ एन मैं एक एन पी एक टी ज3SAT3Color3PartitionHamiltonianCycleHamiltonianPathClique; अगर यह एक निश्चित संपत्ति के साथ सबसे बड़ा सबसेट के लिए पूछता है, कोशिश । आपकी समस्या को विमान में कुछ कर रही शामिल है, की कोशिश पी एल एक एन एक आर सी मैं आर सी यू मैं टी एस ए टी या पी एल एक एन एक आर टी एस पी । और इसी तरह। यदि आपकी समस्या कुछ भी "गंध" नहीं है, तो 3 एस ए टीIndependentSetPlanarCircuitSATPlanarTSP3SATया शायद आपकी सबसे अच्छी शर्त है।CircuitSAT
जाहिर है, आपको पहले से ही ठीक से पता होना चाहिए कि इन सभी समस्याओं को कैसे परिभाषित किया जाता है , और जिस समस्या को आप कम करते हैं, वह बेहतर है। तो परिणाम अंत में लग सकता है के रूप में शांत रूप में, मैं से कम करने की सलाह नहीं देते Minesweeper या Tetris या OneCheckersMove या SuperMarioBros ।
दूसरा, वास्तविक कमी। समस्या X को कम करने के लिए (जिसको आप जानते हैं वह एनपी-हार्ड है) को समस्या वाई (आप जिसे साबित करने की कोशिश कर रहे हैं वह एनपी-हार्ड है, आपको एक एल्गोरिथ्म का वर्णन करने की आवश्यकता है जो एक्स के एक मनमाने उदाहरण को वाई के कानूनी उदाहरण में बदल देती है। कमी एल्गोरिथ्म को एक्स-इंस्टेंस के प्रत्येक "फ़ीचर" के साथ कुछ विशिष्ट करने की आवश्यकता है, प्रत्येक "फ़ीचर" के लिए आउटपुट के हिस्से को आमतौर पर एक गैजेट कहा जाता है ।
लेकिन एक विशेषता क्या है? यह समस्या X पर निर्भर करता है। उदाहरण के लिए:
की आवृत्ति को बदलने के लिए , आपको प्रत्येक चर के लिए एक गैजेट और इनपुट सूत्र में प्रत्येक खंड के लिए एक गैजेट की आवश्यकता होगी। प्रत्येक चर गैजेट में दो "राज्य" होने चाहिए जो "सच्चे" और "झूठे" के अनुरूप हों। प्रत्येक क्लॉज़ गैजेट में एकाधिक "स्टेट्स" भी होने चाहिए, जिनमें से प्रत्येक किसी न किसी तरह से कम से कम एक शाब्दिक रूप से उस क्लॉज़ को सच करने के लिए मजबूर करता है। (राज्य कमी एल्गोरिदम के आउटपुट का हिस्सा नहीं हैं।)3SAT
की एक आवृत्ति को बदलने के लिए , आपको प्रत्येक ग्राफ के लिए एक गैजेट और इनपुट ग्राफ के प्रत्येक किनारे और तीन रंगों को परिभाषित करने के लिए एक अन्य गैजेट की आवश्यकता होगी।3Color
का एक उदाहरण को बदलने के लिए , तो आप और इनपुट सर्किट में प्रत्येक गेट के लिए प्रत्येक इनपुट के लिए एक गैजेट, प्रत्येक तार के लिए की आवश्यकता होगी,।PlanarCircuitSat
गैजेट का वास्तविक रूप समस्या वाई, एक आप को कम कर रहे हैं पर निर्भर करता है के लिए । उदाहरण के लिए, यदि आप ग्राफ़ के बारे में किसी समस्या को कम कर रहे हैं, तो आपके गैजेट छोटे सबग्राफ होंगे; विकिपीडिया लेख देखें। यदि आप शेड्यूलिंग के बारे में किसी समस्या को कम कर रहे हैं, तो प्रत्येक गैजेट शेड्यूल की जाने वाली नौकरियों का एक समूह होगा। यदि आप मारियो के बारे में एक समस्या को कम कर रहे हैं , तो प्रत्येक गैजेट ब्लॉक और ईंटों और कोपों का एक सेट होगा।
यह भ्रमित हो सकता है अगर दोनों समस्याओं में एक ही तरह की वस्तु शामिल हो। उदाहरण के लिए, यदि X और Y दोनों ग्राफ़ के बारे में समस्याएँ हैं, तो आपका एल्गोरिथ्म एक ग्राफ़ (X का उदाहरण) को भिन्न ग्राफ़ (Y का एक उदाहरण) में बदलने जा रहा है। अपने अंकन को बुद्धिमानी से चुनें, ताकि आप इन दो रेखांकन को भ्रमित न करें। मैं स्याही के कई रंगों का उपयोग करने की दृढ़ता से सलाह देता हूं।
अंत में, आपके कमी एल्गोरिदम को तीन गुणों को पूरा करना होगा:
यह बहुपद समय में चलता है। (यह आमतौर पर आसान है।)
यदि आपके कमी एल्गोरिदम को इनपुट के रूप में एक्स का एक सकारात्मक उदाहरण दिया जाता है, तो यह आउटपुट के रूप में वाई का एक सकारात्मक उदाहरण पैदा करता है ।
यदि आपकी कमी एल्गोरिदम आउटपुट के रूप में वाई का एक सकारात्मक उदाहरण उत्पन्न करती है , तो इसे इनपुट के रूप में एक्स का एक सकारात्मक उदाहरण दिया गया होगा ।
यहाँ एक महत्वपूर्ण सूक्ष्मता है। आपका कमी एल्गोरिथ्म केवल, एक ही दिशा में काम करता है से एक्स के उदाहरण के लिए वाई के उदाहरण है, लेकिन एल्गोरिथ्म सही साबित दोनों दिशाओं में परिवर्तन के बारे में तर्क की आवश्यकता है। आपको यह भी याद रखना चाहिए कि आपकी कमी एल्गोरिथ्म यह नहीं बता सकती है कि क्या एक्स का एक दिया गया उदाहरण सकारात्मक है या नकारात्मक है - जिसे बहुपद समय में एनपी-हार्ड समस्या को हल करने की आवश्यकता होगी!
बस यही बात है । कैसे सिर्फ अभ्यास के साथ आता है।