आयतों द्वारा कवर किया हुआ ग्रिड


15

हमारे पास एक N1×N2 ग्रिड है। हम इस ग्रिड पर आयतों का एक संग्रह हैं तो प्रत्येक आयत के रूप में एक व्यक्त किया जा सकता है N1 -by- बाइनरी मैट्रिक्स । हम उन आयतों के साथ ग्रिड को कवर करना चाहते हैं। आरN2R

क्या इस सेट कवर समस्या का निर्णय संस्करण एनपी-पूर्ण है?

  • इनपुट: संग्रह C={R1,R2,,RL} ग्रिड आयतों के (इनपुट का आकार: N1N2L ), और KN+
  • आउटपुट: सबसेट SC के साथ |S|K और S प्रत्येक कोशिका कम से कम एक आयत यह कवर करने के लिए हैं।

समस्या का दृश्य उदाहरण

मैंने पाया कि 1D केस ( N2=1 ) को डायनेमिक प्रोग्रामिंग द्वारा बहुपद समय में हल किया जा सकता है: कोई भी इष्टतम आवरण संघ के होने वाला है

  • पहले कोशिकाओं को कवर करने के कुछ उपप्रकार के लिए एक इष्टतम आवरण ।N1n1
  • एक 1D आयत, यानी एक अंतराल, शेष कोशिकाओं को कवर करता है।n1

मुझे नहीं लगता कि डीपी 2 डी समस्या के लिए काम कर सकता है: 1 डी समस्या के लिए, आपके पास हल करने के लिए सबप्रोब्लेम्स है, लेकिन 2 डी के लिए आपके पास ( एन 1 + एन 2 है)एन1उपप्रोम्बल (ग्रिड पर उत्तर-पूर्वी जाली पथों की संख्या)।(एन1+एन2एन2)

मुझे लगता है कि समस्या एनपी हो सकती है, लेकिन मुझे यकीन नहीं है (हालांकि यह पी की तुलना में कठिन लगता है), और मैं एनपी-पूर्ण समस्या (3-सैट, वर्टेक्स कवर, ...) से एक बहुपद कमी को खोजने में सफल नहीं हुआ हूं।

किसी भी मदद या संकेत का स्वागत है।


3
संकेत: वर्टेक्स कवर से एक कमी की तलाश करें, जिसमें हम एक द्वारा | वी | ब्लॉक की ग्रिड, जिनमें से प्रत्येक मैट्रिक्स तत्वों के 3 बाय 3 ब्लॉक है। ब्लॉक की प्रत्येक पंक्ति एक किनारे से मेल खाती है, और इसमें 2 विशेष रूप से डिज़ाइन किए गए ब्लॉक होंगे जो इसके समापन बिंदु के अनुरूप होंगे। प्रत्येक शीर्ष के लिए एक ऊँचाई होगी- 3 | | , चौड़ाई -1 आयत जो उस शीर्ष पर स्थित 3-बाय -3 ब्लॉकों के स्तंभ के केंद्र स्तंभ से होकर गुजरती है। आप किसी भी मान्य k -vertex कवर के कुल को कैसे खर्च करने के लिए मजबूर कर सकते हैं | | ( - V | + 3 )|E||V|3|E|k ? (आपको अन्य आयतों की आवश्यकता होगी।)|E|(|V|+3)+k
j_random_hacker

मुझे लगता है कि यह शायद एक होमवर्क व्यायाम है, इसलिए मैं अभी के लिए इससे कहीं अधिक कहने के लिए थोड़ा अनिच्छुक हूं। मैंने जो लागत सूत्र दिया, उसमें कुछ सुराग हैं। ध्यान रखें कि आप कई आयतों में से कम से कम 1 को केवल आयताकार बना सकते हैं जो कुछ मैट्रिक्स तत्व को कवर करते हैं (1 आयत का विशेष मामला भी उपयोगी है)। FWIW, मैंने भी एक का उपयोग करने की कोशिश की -तब- | वी | पहले ग्रिड, जहां एक शीर्ष चुनना एक पंक्ति और इसी कॉलम को "क्रॉसिंग आउट" करने के अनुरूप होगा, लेकिन यह पता नहीं लगा सका कि i -th कॉलम को कैसे चुना जाए जब i -th पंक्ति को चुना जाए या इसके विपरीत। |V||V|ii
j_random_hacker

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

1
हाँ, यह लगभग बिल्कुल कमी है जो मेरे मन में थी! :) मैंने आपके "टाइप 4" आयतों को एक छोर पर थोड़ा लंबा कर दिया: जहाँ आपका एक ब्लॉक के भीतर 2 कोशिकाओं पर कब्जा है, मेरा सभी पर कब्जा है 3. विशेष के बजाय "टाइप 3" आयतों के लिए एन्डब्लॉक्स, मैं पूरी शीर्ष पंक्ति का उपयोग करता हूँ, बस की तरह के लिए आयतों "2 टाइप" । अंत में मेरे पास प्रत्येक बाएं एंडब्लॉक के भीतर केंद्र-बाएं और नीचे-बाएं कक्षों पर एक आयत है (प्रत्येक दाएं एंडब्लॉक के लिए क्षैतिज रूप से फ़्लिप)। तो आप सभी ब्लॉक की निचली 2 पंक्तियों को कवर कर सकते हैं जिसमें एंडब्लॉक के बीच या पैटर्न का उपयोग करना शामिल है । a<j<|==|
j_random_hacker

1
मुझे आपकी पसंद -तब- | वी | विचार में कमी। इसके साथ, 3 के विपरीत | | -तब- | वी | कमी, ऐसे न्यूनतम-लागत समाधान हो सकते हैं जो वर्टेक्स कवर के अनुरूप नहीं होते हैं - लेकिन ऐसे सभी समाधानों को समान (ly न्यूनतम) में बदल दिया जा सकता है-जो कि आपके अंतिम बुलेट पॉइंट में समान तर्क का उपयोग करते हैं, इसलिए यह नहीं है कमी के लिए एक समस्या :)|E|3|V|3|E|3|V|
j_random_hacker

जवाबों:


4

J_random_hacker के संकेत के लिए धन्यवाद, मैंने ग्रिड समस्या को वर्टेक्स कवर को कम करने के लिए एक समाधान पाया है:

हम एक -तब- | वी | 3-बाय -3 ब्लॉक का ग्रिड, अर्थात 3 | | -तब- | वी | ग्रिड, साथ कोने स्तंभों के रूप में आदेश दिया { v 1 , ... , वी एन 1 } और किनारों पंक्तियों के रूप में आदेश दिया { 1 , ... , एन 2 } । हम इस ग्रिड पर आयतों का निर्माण करेंगे (नीचे दी गई ड्राइंग इस्तेमाल की गई विभिन्न आयतों को समझने में बहुत मदद करेगी)|E||V|3|E|3|V|{v1,,vN1}{e1,,eN2}

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

|V|

(ei,vj)ei=(va,vb)

  • j<ab<j
  • j=aj=b
  • a<j<b

|E||V|

(ei,va)(ei,vb)

  • (ei,va)(ei,vb)

2|E|

अब, प्रत्येक किनारे के लिए हम टाइप 4 के आयतों का निर्माण करते हैं, एंडब्लॉक के बीच, दूसरी पंक्ति के लिए हमारे पास दो आयतें हैं:

  • एक पहले ब्लॉक के केंद्रीय वर्ग से दूसरे ब्लॉक के केंद्रीय-बाएं वर्ग से जा रहा है।
  • एक पहले ब्लॉक के केंद्रीय-दाएं वर्ग से दूसरे ब्लॉक के केंद्रीय वर्ग से जा रहा है।
  • और तीसरी पंक्ति के लिए वही दो आयतें।

4|E|

तो अब, ग्रिड को कवर करने के लिए:

  • |E|(|V|+2)|V|+4|E|

दिए गए किनारे के लिए कवर करने के लिए, किनारे के बीच का हिस्सा अभी तक कवर नहीं किया गया है (ब्लॉक की पंक्ति की दूसरी और तीसरी पंक्तियाँ), हम या तो उपयोग कर सकते हैं:

  • चार प्रकार के चार आयत।
  • टाइप 1 की एक आयत और टाइप 4 की दो आयतें।

ध्यान दें कि किसी भी मामले में, हमें टाइप 4 के कम से कम दो आयतों की आवश्यकता है।

|E|(|V|+4)+k

  • |E|(|V|+2)

  • |E|(|V|+4)+k|E|(|V|+4)+k

तो वर्टेक्स कवर को ग्रिड कवर तक कम किया जा सकता है। और ग्रिड समस्या उदाहरण द्वारा एन्कोड किया जा सकता है||(|वी|+6)+|वी| के साथ एक ग्रिड पर शामिल किया गया 9|वी||| तत्वों, इसलिए कमी बहुपद है और ग्रिड समस्या एनपीसी है।

पुनश्च: मैंने इस उत्तर को लिखने के बाद पाया कि बहुत सारी आयतें वास्तव में बेकार हैं और एक का उपयोग करके बहुत सरल कमी की जा सकती है ||-द्वारा-3|वी| के साथ ग्रिड |वी|+4|| कवर, लागत समारोह का उपयोग 3||+

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