अंतरंगता से निपटना: एनपी-पूर्ण समस्याएं


43

मान लें कि मैं एक प्रोग्रामर हूं और मुझे एक एनपी-पूर्ण समस्या है जिसे मुझे हल करने की आवश्यकता है। एनपीसी समस्याओं से निपटने के लिए कौन से तरीके उपलब्ध हैं? क्या इस विषय पर एक सर्वेक्षण या कुछ समान है?


4
यह बताना उपयोगी होगा कि आपको कौन सी समस्या है।
डेव क्लार्क

2
यह प्रश्न किसी विशिष्ट समस्या के बारे में नहीं है। मैं तकनीकों को जानना चाहता हूं ताकि जरूरत पड़ने पर मैं उन्हें भविष्य में लागू कर सकूं।
अनाम

1
यह पूछने जैसा ही है: मैं सामान्य रूप से बहुपद में किसी समस्या का समाधान कैसे कर सकता हूं? समस्याओं के क्षेत्र हैं और प्रत्येक का अपना विशेष समाधान है।
डेव क्लार्क

3
@DaveClarke: स्थापित तकनीकें हैं, इसलिए मुझे लगता है कि सवाल एक वैध है; एक अधिक फोकस्ड प्रश्न हालांकि बेहतर हो सकता है।
राफेल

जवाबों:


54

अच्छी तरह से अध्ययन की गई कई रणनीतियाँ हैं; जो आपके आवेदन में सबसे अच्छा है वह परिस्थिति पर निर्भर करता है।

  • सबसे खराब स्थिति में सुधार करें
    समस्या-विशिष्ट अंतर्दृष्टि का उपयोग करके, आप अक्सर भोले एल्गोरिथ्म में सुधार कर सकते हैं। उदाहरण के लिए,[1] केसाथ Vertex Cover के लिएएल्गोरिदम हैं; यहभोले-भालेपरएक बहुत बड़ा सुधार है और उदाहरण के लिए आपके ट्रैक्टेबल के लिए प्रासंगिक हो सकता है।< 1.3 Ω ( 2 n )O(cn)c<1.3Ω(2n)

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

  • समस्या को प्रतिबंधित करें
    यदि आप अपने इनपुट पर अधिक अनुमान लगा सकते हैं, तो समस्या आसान हो सकती है।

    • संरचनात्मक गुण
      आपके इनपुट में ऐसे गुण हो सकते हैं जो समस्या को हल करने को सरल बनाते हैं, उदाहरण के लिए योजनाबद्धता, द्विदलीयता या रेखांकन के लिए एक नाबालिग लापता। ग्राफ़ कक्षाओं के कुछ उदाहरणों के लिए यहाँ देखें जिसके लिए CLIQUE आसान है।
    • इनपुट के बाउंडिंग फ़ंक्शंस
      देखने के लिए एक और चीज़ है जो कि जटिलता जटिलता है ; कुछ समस्याओं का समय पर व्याख्या करने योग्य हैं के लिए कुछ उदाहरण पैरामीटर (अधिकतम नोड डिग्री, अधिकतम बढ़त वजन, ...) और निरंतर। यदि आप अपनी सेटिंग में में एक polylogarithmic फ़ंक्शन द्वारा को बाध्य कर सकते हैं , तो आपको बहुपद एल्गोरिथ्म मिलते हैं। सईद अमीरी अपने जवाब में विवरण देता है ।k m k nO(2knm)kmkn
    • इनपुट मात्रा को बाउंड
      करना इसके अलावा, कुछ समस्याएँ एल्गोरिदम को स्वीकार करती हैं जो छद्म-बहुपद समय में चलती हैं , यह उनका रनटाइम एक बहुपद फ़ंक्शन द्वारा एक संख्या में बाध्य होता है जो इनपुट का हिस्सा होता है; भोली प्राणशक्ति जाँच एक उदाहरण है। इसका मतलब यह है कि यदि आपके उदाहरणों में एन्कोडेड मात्रा का उचित आकार है, तो आपके पास सरल एल्गोरिदम हो सकते हैं जो आपके लिए अच्छा व्यवहार करते हैं।
  • परिणाम को कमजोर करें
    इसका मतलब है कि आप गलत या अधूरे परिणाम को सहन करते हैं। दो मुख्य स्वाद हैं:

    • संभाव्य एल्गोरिदम
      आप केवल कुछ संभाव्यता के साथ सही परिणाम प्राप्त करते हैं। कुछ वेरिएंट हैं, जिनमें सबसे उल्लेखनीय मोंटे-कार्लो और लास-वेगास एल्गोरिदम हैं। एक प्रसिद्ध उदाहरण मिलर-राबिन परिमाण परीक्षण है
    • अनुमान एल्गोरिदम
      अब आप इष्टतम समाधान नहीं बल्कि लगभग इष्टतम देख रहे हैं। कुछ एल्गोरिदम रिश्तेदार को स्वीकार करते हैं ("कोई भी इष्टतम से दोगुना नहीं है"), अन्य निरपेक्ष (" अधिक इष्टतम नहीं" त्रुटि पर सीमा)। कई समस्याओं के लिए यह खुला है कि उन्हें कितनी अच्छी तरह लगाया जा सकता है। कुछ ऐसे हैं जिन्हें बहुपद समय में मनमाने ढंग से ठीक किया जा सकता है, जबकि दूसरों को इसकी अनुमति नहीं देने के लिए जाना जाता है; बहुपद-समय सन्निकटन योजनाओं के सिद्धांत की जाँच करें ।5

एक पूरी तरह से उपचार के लिए Hromkovič द्वारा हार्ड समस्याओं के लिए एल्गोरिथ्म का संदर्भ लें ।


  1. सादगी सुंदरता है: चेन जियानर, इयाद ए। कंज, जीई ज़िया (2005) द्वारा शीर्ष कवर के लिए बेहतर ऊपरी सीमाएं

4
पाठ्यक्रम के एक मोंटे कार्लो या एक लास वेगास एल्गोरिथ्म बहुत एक एनपी कठिन समस्या पर polytime में चलाने के लिए की संभावना नहीं है
Sasho निकोलोव

12

अन्य उत्तरों ने इसे अधिक सैद्धांतिक दृष्टिकोण से संबोधित किया है। यहाँ एक अधिक व्यावहारिक दृष्टिकोण है।


"विशिष्ट" एनपी-पूर्ण निर्णय समस्याओं के लिए ( "क्या कोई ऐसी चीज़ मौजूद है जो इन सभी बाधाओं को संतुष्ट करती है?" ), यह वही है जो मैं हमेशा पहले प्रयास करूंगा:

  1. एक साधारण प्रोग्राम लिखें जो आपकी समस्या उदाहरण को SAT उदाहरण के रूप में बताता है

  2. फिर एक अच्छा सैट सॉल्वर लें , इसे चलाएं (सबसे तेज मल्टी-कोर कंप्यूटर का उपयोग करें जो आपके पास होता है), और देखें कि क्या होता है।

छोटे उदाहरणों के साथ पहले यह जानने की कोशिश करें कि इसमें कितना समय लग सकता है।


हैरानी की बात है अक्सर, इस दृष्टिकोण है ज्यादा अपने वर्तमान समस्या के लिए विशेष रूप से अपने स्वयं के solver लागू करने के लिए कोशिश कर रहा से बेहतर:

  • सैट सॉल्वर बहुत चालाक और अच्छी तरह से अनुकूलित होते हैं। वे आसानी से अपने पीछे के खोज के आपके कार्यान्वयन को बेहतर बनाते हैं (चाहे आप अपने कोड को अनुकूलित करने में कितना समय बर्बाद करते हों)। वे आसानी से कई ऑफ-द-सेल्फ विकल्प जैसे कि पूर्णांक लीनियर प्रोग्रामिंग सॉल्वर को आसानी से समझ लेते हैं।

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


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

यदि आप इसे आसानी से निर्णय की समस्या में बदल सकते हैं ( "क्या आकार 4 की कोई चीज़ मौजूद है जो इन सभी बाधाओं को संतुष्ट करती है?" , "आकार 3 के बारे में क्या?" ), महान, निर्णय समस्याओं के साथ ऊपर के रूप में उसी दृष्टिकोण का पालन करें।

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

  1. अपनी समस्या को एक (भारित) MAX-SAT उदाहरण के रूप में एन्कोड करें ।

  2. UBCSAT पैकेज से अनुमानी सॉल्वर का उपयोग करें । Heuristic solvers तुच्छ रूप से समानांतर करते हैं; सैकड़ों कंप्यूटरों के साथ एक कंप्यूटर क्लस्टर खोजने का प्रयास करें। जब तक आप चाहते हैं आप सॉल्वरों को चला सकते हैं, और फिर सबसे अच्छा समाधान ले सकते हैं जो आपने अब तक पाया है।


8

पैरामीट्रीजेड जटिलता

अव्यवस्था पर हमला करने का एक तरीका पैरामीरिज्ड जटिलता के संदर्भ में समस्या के बारे में सोच रहा है।

में parametrized जटिलता हम कुछ पैरामीटर (जैसे कि फिक्सिंग से समस्या का समाधान )। यदि हम समय में कुछ समस्या को हल करने में सक्षम हैं , तो हम कहते हैं कि समस्या में निर्धारित पैरामीटर ट्रैक्टेबल है । यहाँ केवल कुछ कम्प्यूटेबल फंक्शन है। एनपी-हार्ड समस्याएं बहुत हैं जो एफपीटी हैं, हालांकि, एनपी में कई समस्याएं हैं जो माना जाता है कि तय पैरामीटर ट्रैक्टेबल नहीं हैं।f ( k ) p ( n ) k f ( k )kf(k)p(n)kf(k)

यदि कुछ पैरामीटर को ठीक करके हम समय में एक समस्या को हल कर सकते हैं , तो इस समस्या को XP में कहा जाता है। हम मानते हैं कि XP ​​FPT के बराबर नहीं है (जिस तरह हम P NP मानते हैं )। लेकिन इन दोनों (FPT और XP) के बीच बहुत सी समस्याएं हैं, और हमने एक पदानुक्रम (वास्तव में कई) को परिभाषित किया है, उनमें से एक डब्ल्यू-पदानुक्रम है। डब्ल्यू पदानुक्रम में आपके पास एनपी-पूर्ण कक्षाओं में कटौती जैसी कमी है, इसके अलावा, हम पॉलिटाइम कटौती की तलाश नहीं कर रहे हैं, हमें बस एफपीटी कटौती की आवश्यकता है। कक्षा W [0] वर्ग FPT है।O(nf(k))

डब्ल्यू पदानुक्रम के विभिन्न वर्गों में ये कुछ नमूने हैं:

  1. वर्टेक्स कवर एफपीटी है (इसलिए अप्रत्यक्ष रेखांकन पर वर्टेक्स डिसऑर्डर पथ है)
  2. स्वतंत्र सेट और Clique दोनों W [1] -complete हैं
  3. डोमिनेटिंग सेट W [2] -Complete है।

ये एनपी समस्याओं को और अधिक सटीक तरीके से वर्गीकृत करने के लिए जटिलताओं का एक और स्तर है और यदि आप अधिक चाहते हैं तो आप पेरीमीकृत सर्किट कॉम्प्लेक्सिटी और डब्ल्यू हेयार्की द्वारा डाउनी एट अल (1998) को देख सकते हैं।

और यदि आप और भी अधिक चाहते हैं कि फ्लम और ग्रोह के परिमित जटिलता सिद्धांत को पढ़ना अच्छा है ।

और अंत में:

पैरामीटर एल्गोरिदम बनाम स्वीकृति एल्गोरिदम:

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

इसके अलावा कुछ मामलों में हम कुछ अलग मापदंडों को ठीक कर सकते हैं, उदाहरण के लिए: ग्राफ़ में सबसे लंबे पथ की लंबाई बंधी हुई है और एक समाधान का आकार बाध्य है (उदाहरण के लिए प्रतिक्रिया शीर्ष सेट), ...

नमूना व्यावहारिक उपयोग:

हो सकता है कुछ लोगों का मानना ​​है कि व्यवहार में पैराट्राइज्ड जटिलता बेकार है। लेकिन यह गलत है। कई पैरामीरिज्ड एल्गोरिदम एक वास्तविक दुनिया अनुप्रयोगों में खोजे जाते हैं, जब आप कुछ मापदंडों को ठीक कर सकते हैं, तो यहां एक उदाहरण है:

  1. पैरामीरिज्ड जटिलता में एक मुख्य प्रमेय में से एक, कोर्टेल के लिए है, वह चल रहे समय के पैरामीट्रिक समस्याओं के कुछ वर्गों के लिए एक एल्गोरिथ्म प्रदान करता है। के टावरों की संख्या है , जिसके लिए साधन , असंभव है। लेकिन, एक समूह ने अपने एल्गोरिथ्म को कुछ विशेष मामलों पर कुछ संशोधनों के साथ लागू किया, और उन्हें वर्टेक्स कवर के लिए बेहद तेज एल्गोरिदम मिला, जो वर्तमान में जर्मनी के कुछ मेट्रो स्टेशनों में उपयोग किया जाता है।2 ( के ) के = 102...2O(n)2O(k)k=10

  2. टीएसपी के लिए सबसे तेज़ और सटीक ह्यूरिस्टिक एल्गोरिदम में से एक है: टूर मर्जिंग और शाखा अपघटन , जो समस्या के पैरामीरिज़ेशन का उपयोग करता है (सीधे नहीं, लेकिन शाखा अपघटन और उनके द्वारा उपयोग किए जाने वाले गतिशील प्रोग्रामिंग दृष्टिकोण कुछ अच्छी धारणाओं पर आधारित है)।


5

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

यह देखने पर विचार करें कि क्या बूलियन सैटिस्फैबिलिटी या इंटेगर लीनियर प्रोग्रामिंग जैसे उपलब्ध सॉल्वरों के साथ आपकी समस्या से एक कुशल कमी है।


4

आपके पास सामान्य रूप से तीन विकल्प हैं: पहला आपकी समस्या के विशेष मामलों पर विचार करना है । कुछ विशेष मामलों में, आपकी समस्या व्याख्या करने योग्य polynomially जैसे निर्धारित करने से एक सरल रास्ता वहाँ मौजूद है या नहीं हो सकता है को को एक मनमाना निर्देशित ग्राफ में एनपी पूरा है लेकिन यह बहुपद हो जाएगा (लीनियर) जब कम करने योग्य है। दूसरा विकल्प अपनी समस्या को हल करने के लिए एक अच्छा अनुमान एल्गोरिथ्म का उपयोग करना है। अनुमान एल्गोरिदम आपकी समस्या के निकट-इष्टतम उत्तर प्रदान करते हैं। यदि आप पिछले विकल्पों का उपयोग नहीं कर सकते हैं, तो केवल शेष तरीका होगा: घातीय समय में अपनी समस्या को हल करने के लिए एक सहनीय एल्गोरिथ्म का उपयोग करनाv j v k G GvivjvkGG। घातीय एल्गोरिदम के बीच, उनमें से कुछ का रनिंग टाइम सहनीय हो सकता है जब आपकी समस्या का इनपुट आकार किसी विशिष्ट मान से कम हो।


2

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

व्यवहार में आने वाले उदाहरण "सबसे खराब स्थिति" नहीं हैं।

विसंगति का एक और कारण है:

औपचारिक रूप से अनुमानी एल्गोरिदम का विश्लेषण करना मुश्किल है।

व्यवहार में, आप अपनी एनपी-पूर्ण समस्याओं को हल करने के लिए अनुमानी एल्गोरिदम का उपयोग करते हैं, और सर्वोत्तम के लिए आशा करते हैं। परिणाम अक्सर आश्चर्यजनक होते हैं।

अन्य उत्तर में छुआ गया एक और मुद्दा है:

कभी-कभी घातीय एल्गोरिदम काफी तेज होते हैं।

वह समस्या पर निर्भर करता है। जब बड़ा डेटा शामिल होता है, तो हमारे पास इसके विपरीत अधिकतम होता है:

कभी-कभी एकमात्र संभव एल्गोरिदम quasilinear होते हैं।


मुझे डर है कि यहाँ भीड़ सैद्धांतिक रूप से झुकी हुई है। आपको मुख्य स्टैकएक्सचेंज साइट पर बेहतर उत्तर मिल सकते हैं।

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