मैं इस सवाल में दिलचस्पी रखता हूं कि कंप्यूटर विज्ञान की बड़ी कंपनियों को एनपी-पूर्णता कैसे सिखाना है। विशेष रूप से, क्या हमें इसे करप कटौती या ट्यूरिंग कटौती का उपयोग करके सिखाना चाहिए?
मुझे लगता है कि एनपी-पूर्णता और कटौती की अवधारणाएं कुछ ऐसी हैं जो प्रत्येक कंप्यूटर विज्ञान प्रमुख को सीखना चाहिए। हालांकि, एनपी-पूर्णता सिखाते समय, मैंने देखा है कि कार्प की कटौती के उपयोग में कुछ गिरावट है।
सबसे पहले, कार्प की कटौती कुछ छात्रों के लिए अनावश्यक रूप से भ्रमित करने वाली लगती है। एक कमी की सहज धारणा है "अगर मेरे पास समस्या एक्स को हल करने के लिए एक एल्गोरिथ्म है, तो मैं इसे समस्या वाई को हल करने के लिए भी उपयोग कर सकता हूं,"। यह बहुत सहज है - लेकिन यह करप कटौती की तुलना में ट्यूरिंग कटौती के लिए बहुत बेहतर है। नतीजतन, मैं उन छात्रों को देखता हूं जो एनपी-पूर्णता को साबित करने की कोशिश कर रहे हैं वे अपने अंतर्ज्ञान से भटक जाते हैं और एक गलत प्रमाण बनाते हैं। दोनों प्रकार की कटौती को सिखाने की कोशिश करना और करप कटौती के इस पहलू पर जोर देना कभी-कभी अनावश्यक औपचारिकता की तरह थोड़ा महसूस होता है और एक अनावश्यक तकनीकी विस्तार की तरह लगता है कि अनावश्यक कक्षा के समय और छात्र का ध्यान खींचता है; यह स्व-स्पष्ट नहीं है कि हम कटौती की इस अधिक प्रतिबंधित धारणा का उपयोग क्यों करते हैं।
मैं करप कटौती और ट्यूरिंग (कुक) कटौती के बीच अंतर को समझता हूं, और वे एनपी-पूर्णता के विभिन्न धारणाओं को कैसे आगे बढ़ाते हैं। मुझे एहसास हुआ कि कार्प की कटौती हमें जटिलता वर्गों के बीच अंतर की बारीक बारीकियों को देती है। इसलिए, जटिलता सिद्धांत के गंभीर अध्ययन के लिए, कार्प में कटौती स्पष्ट रूप से सही उपकरण है। लेकिन कंप्यूटर विज्ञान के छात्रों के लिए जो केवल यह सीख रहे हैं और कभी भी जटिलता सिद्धांत में नहीं जा रहे हैं, मैं अनिश्चित हूं कि क्या यह बेहतर अंतर महत्वपूर्ण है उनके लिए उजागर किया जाना महत्वपूर्ण है।
अंत में, एक छात्र के रूप में, मुझे याद है कि जब मैं "टॉटोलॉजी" जैसी समस्या से घबरा गया था - उदाहरण के लिए, एक बूलियन फॉर्मूला दिया, तो जांचें कि क्या यह एक टॉटोलॉजी है। क्या भ्रामक था कि यह समस्या स्पष्ट रूप से कठिन है: इसके लिए कोई भी बहुपद-काल एल्गोरिदम का अर्थ होगा कि ; और इस समस्या को हल करना स्पष्ट रूप से कठिन है क्योंकि टॉटोलॉजी समस्या को हल करना। हालाँकि, भले ही सहज रूप से टॉटोलॉजी संतोषजनकता के समान कठिन हो, लेकिन टॉटोलॉजी एनपी-हार्ड नहीं है। हां, मुझे आज समझ में आया कि यह मामला क्यों है, लेकिन उस समय मुझे याद आया कि इससे हैरान हूं। (आखिरकार मुझे समझ में आने के बाद मेरे सिर से क्या गुजर रहा था: हम एनपी-हार्ड और को-एनपी-हार्ड के बीच इस अंतर को क्यों खींचते हैं, वैसे भी? यह कृत्रिम लगता है और अभ्यास से बहुत अच्छी तरह से प्रेरित नहीं है। हम एनपी पर ध्यान केंद्रित क्यों करते हैं? सह-एनपी की तुलना में; वे समान रूप से स्वाभाविक लगते हैं। व्यावहारिक दृष्टिकोण से, सह-एनपी-कठोरता अनिवार्य रूप से एनपी-कठोरता के समान ही व्यावहारिक परिणाम हैं, इसलिए हम सभी को इस अंतर पर क्यों लटका दिया जाता है? हां, मुझे पता है? जवाब, लेकिन एक छात्र के रूप में, मुझे याद है कि इसने इस विषय को और अधिक रहस्यमय और खराब रूप से प्रेरित महसूस किया।)
तो मेरा सवाल ये है। जब हम छात्रों को एनपी-पूर्णता सिखाते हैं, तो क्या कार्प कटौती या ट्यूरिंग कटौती का उपयोग करना सिखाना बेहतर है? किसी ने ट्यूरिंग कटौती का उपयोग करते हुए एनपी-पूर्णता की अवधारणा को पढ़ाने की कोशिश की है? यदि हां, तो यह कैसे चली गई? यदि हम ट्यूरिंग कटौती का उपयोग करके अवधारणाओं को पढ़ाते हैं, और करप कटौती से जुड़े वैचारिक मुद्दों को छोड़ दें तो क्या कोई गैर-स्पष्ट नुकसान या नुकसान होगा?
संबंधित: यहां और यहां देखें , जिसमें उल्लेख किया गया है कि इस कारण से कि हम साहित्य में करप कटौती का उपयोग करते हैं क्योंकि यह हमें एनपी-कठोरता और सह-एनपी-कठोरता के बीच अंतर करने में सक्षम बनाता है। हालाँकि, यह किसी भी उत्तर को देने के लिए नहीं लगता है, जो कि शैक्षणिक क्षमता के एल्गोरिदम वर्ग के सीखने के उद्देश्यों के लिए महत्वपूर्ण है, जो कि प्रत्येक सीएस प्रमुख द्वारा लिया जाना चाहिए। यहां देखें cstheory.SE पर , जिसकी इसी तरह की चर्चा है।