एक इष्टतम आदेश प्राप्त करें


9

मैं इस समस्या को लेकर आया था और इसके लिए एक रास्ता खोजने के लिए संघर्ष कर रहा हूं। किसी भी विचार की बहुत सराहना की जाएगी!

मान लें कि हमें एक मैट्रिक्स दिया गया है , उदाहरण के लिए,{1,0,1}n × k

[1010110001011011101110001]

हर एक क्रमपरिवर्तन की कोशिश किए बिना, स्तंभों का एक क्रम खोजें जो उन पंक्तियों की संख्या को अधिकतम करता है जिनके लिए पहला गैर-शून्य तत्व ।ci1

ऊपर दिए गए उदाहरण के लिए, ऐसा एक आदेश (यह अद्वितीय नहीं है!) , अर्थात(c3,c4,c1,c2,c5)

[1010100101100110111100101]

यहाँ, के लिए से बाहर पंक्तियों को पहले गैर शून्य तत्व है ।451


आपने किस एल्गोरिथम दृष्टिकोण की कोशिश की? आपने इस समस्या का सामना कहाँ किया? क्या आप मूल स्रोत को श्रेय दे सकते हैं? क्या आप संदर्भ या प्रेरणा के बारे में कुछ भी साझा कर सकते हैं? आपको यह पृष्ठ आपके प्रश्न को बेहतर बनाने में सहायक हो सकता है ।
DW

1
मैं एक प्रीप्रोसेसिंग चरण का सुझाव देना चाहता हूं: केवल 0s और 1s के साथ एक सेमी-पॉजिटिव कॉलम (रिस्पांस रो) एक कॉलम (रिस्पांस) हो। सुझाव सभी अर्ध-सकारात्मक स्तंभों को हटाने के लिए है, और एक अर्ध-सकारात्मक स्तंभ में 1 के साथ पंक्तियों को भी। आपके उदाहरण में, जो 1, 3 और 4 पंक्तियों को हटा देगा। अब आप उन पंक्तियों और स्तंभों से बचे हैं जिनमें सभी -1 हैं। मदद नहीं कर सकता है, लेकिन इसके बारे में तर्क करना सरल हो सकता है।
पाएल जीडी

क्या हम मान सकते हैं कि पंक्तियों की संख्या स्तंभों की संख्या से बहुत कम है? इससे समस्या आसान हो सकती है।
एंजेला प्रिटोरियस

1
@ Pål, समान प्रीप्रोसेसिंग उन पंक्तियों और स्तंभों के साथ संभव है जिनमें कोई 1s नहीं है। हालाँकि, मुझे नहीं लगता कि यह इसके बारे में तर्क करना आसान बनाता है: बस छोटा।
पीटर टेलर

1
FWIW यह एक क्रॉस-पोस्ट है । हाइजो, यदि आपको एक स्टैक पर जवाब नहीं मिलता है और लगता है कि कोई अन्य बेहतर हो सकता है तो आप इसे फ्लैग कर सकते हैं और माइग्रेशन का अनुरोध कर सकते हैं। क्रॉस-पोस्टिंग अच्छा शिष्टाचार नहीं है क्योंकि उत्तरदाताओं को उन उत्तरों के बारे में पता नहीं होता है जो आप दूसरी साइट पर प्राप्त कर सकते हैं और उन्हें दोहराने में अपना समय बर्बाद कर सकते हैं।
पीटर टेलर

जवाबों:


4

यह समस्या, जिसे मैं CO को कॉलम ऑर्डरिंग के लिए कॉल करूंगा, NP- हार्ड है । यहां एनपी-हार्ड समस्या वर्टेक्स कवर (वीसी) से इसमें कमी आई है:

कुलपति और सीओ के निर्णय की समस्या

इनपुट वीसी इंस्टेंस होने दें । यह प्रश्न का प्रतिनिधित्व करता है: "ग्राफ को देखते हुए है, यह अधिक से अधिक का एक सेट का चयन करने के लिए संभव है से कोने ऐसी है कि हर बढ़त कम से कम एक चुने हुए शिखर पर घटना है?" हम CO के एक उदाहरण का निर्माण करेंगे जो प्रश्न का प्रतिनिधित्व करता है: "मैट्रिक्स को तत्वों के साथ देखते हुए , क्या यह संभव है कि के स्तंभों की अनुमति दी जाए जैसे कि 1 कम से कम पंक्तियों पर -1 से पहले दिखाई देता है ? " निर्णय समस्या में ये दो समस्याएं बताई गई हैं(V,E,k)(V,E)kVE(A,k)A{1,0,1}Akफार्म, जिससे प्रत्येक का उत्तर हां या नहीं: औपचारिक रूप से बोल रहा है, यह एनपी-पूर्ण (या नहीं) एक समस्या का रूप है। यह देखना बहुत मुश्किल नहीं है कि ओपी के प्रश्न में कहा गया अधिक प्राकृतिक अनुकूलन समस्या रूप जटिलता के संदर्भ में लगभग बराबर है: निर्णय समस्या सॉल्वर का उपयोग करके अनुकूलन समस्या को हल करने के लिए दहलीज पैरामीटर पर द्विआधारी खोज का उपयोग किया जा सकता है, जबकि एक ऑप्टिमाइज़ेशन प्रॉब्लम सॉल्वर का इन्वॉल्वमेंट, उसके बाद एक सिंगल कंपेरिजन, डिसिजन प्रॉब्लम को सॉल्व करने के लिए काफी है।

कुलपति के एक उदाहरण से सीओ के एक उदाहरण का निर्माण

चलोऔर। हम पंक्तियों और कॉलमों के साथ एक मैट्रिक्स बनाएंगे । शीर्ष पंक्तियाँ पंक्तियों के ब्लॉक से बनेगी, प्रत्येक ब्लॉक एक किनारे का प्रतिनिधित्व करता है जिसे कवर करने की आवश्यकता होती है । नीचे की पंक्तियों में वर्टेक्स "झंडे" होते हैं, जो एक निश्चित लागत को उठाने के लिए एक कॉलम (एक वर्टेक्स के अनुसार) का कारण बनेगा, अगर यह CO समाधान के बाएं-हाथ की तरफ (वर्टेक्स में शामिल किए जा रहे एक वर्टेक्स के अनुरूप) में शामिल है कुलपति समाधान का कवर)।n=|V|m=|E|A(n+1)m+nn+1(n+1)mmn+1n

प्रत्येक शीर्ष , एक कॉलम बनाएं जिसमें:vi

  • शीर्ष के बीच पंक्तियाँ, के मई के ब्लॉक पंक्तियों सब एक +1 शामिल जब किनारे पर घटना है , और 0 अन्यथा, और(n+1)mjn+1ejvi
  • नीचे पंक्तियाँ -th को छोड़कर सभी 0 हैं , जो -1 है।ni

एक और "बाड़" कॉलम बनाएं जिसमें -1 की प्रतियां हों, उसके बाद +1 की प्रतियां हों।(n+1)mn

अंत में, निर्मित CO उदाहरण के लिए थ्रेशोल्ड सेट करें : । दूसरे शब्दों में, हम सबसे पंक्तियों पर अनुमति देते हैं जिसमें -1 +1 से पहले दिखाई देता है। चलो एक सीओ समाधान की "लागत" उल्लंघन पंक्तियों की इस संख्या को कहते हैं।k(n+1)m+nkk

सबूत

CO उदाहरण के समाधान और मूल कुलपति उदाहरण में कोने के सेट के बीच का पत्राचार है: बाड़ के बाईं ओर स्थित प्रत्येक स्तंभ एक वर्टेक्स से संबंधित होता है जो सेट में होता है, और बाड़ के दाईं ओर स्थित प्रत्येक स्तंभ संगत होता है एक शिखर जो नहीं है।

सहज रूप से, "बाड़" कॉलम के शीर्ष में -1 s कॉलम के एक सबसेट के चयन को उसके बाईं ओर रखने के लिए मजबूर करता है जिसमें एक साथ इन सभी पदों में + 1 s होता है - हर कोने पर होने वाले वर्टीकल के उपसमूह के अनुरूप। धार। "बाड़" के बाईं ओर दिखाई देने वाले इन स्तंभों में से प्रत्येक के नीचे पंक्तियों में एक अलग पंक्ति पर -1 है , जिसकी लागत 1 है; "बाड़" के तल में + 1 s यह सुनिश्चित करता है कि सभी स्तंभों को इसके दाईं ओर रखा जाए ऐसी कोई लागत नहीं है।n

जाहिर है ज्यादा से ज्यादा का उपयोग कर एक कुलपति समाधान कोने ज्यादा से ज्यादा लागत के साथ निर्माण किया सीओ उदाहरण के लिए एक समाधान पैदावार : बस आदेश कॉलम मनमाने ढंग से शीर्ष कवर में कोने करने के लिए इसी, बाड़ स्तंभ के बाद, किसी भी क्रम में सभी शेष स्तंभ ।kk

यह दर्शाता है कि अधिकांश पर लागत के साथ सीओ उदाहरण के लिए एक समाधान सबसे कोने के साथ एक शीर्ष कवर से मेल खाती है ।kk

इसके विपरीत मान लीजिए कि CO के लिए एक समाधान मौजूद है जिसमें अधिकांश पर लागत है जो +1 के पहले -1 पंक्तियों के साथ कुछ पंक्तियाँ छोड़ता है । यह पंक्ति एक विशेष किनारे अनुरूप पंक्तियों के एक ब्लॉक से संबंधित है । मूल उदाहरण में इस ब्लॉक में हर पंक्ति निर्माण से समान है; अनुमति देने वाले कॉलम इन पंक्तियों को बदल सकते हैं, लेकिन इस तथ्य को प्रभावित नहीं करते हैं कि वे समान हैं। इस प्रकार इन समरूप पंक्तियों में से प्रत्येक में +1 से पहले समाधान में कम से कम की लागत होती है । लेकिन : विरोधाभास।k(n+1)m(n+1)uvAn+1n+1kn<n+1

में से प्रत्येक के बाद से शीर्ष में पंक्तियों की ब्लॉक है जो: पंक्तियों है एक -1 से पहले एक +1, इसी किनारों में से प्रत्येक के एक शीर्ष बाड़ के लिए छोड़ दिया करने के लिए एक स्तंभ के लिए इसी से आच्छादित है , कोने के सबसेट एक शीर्ष कवर का गठन किया। चूंकि शीर्ष पंक्तियों में से कोई भी +1 से पहले +1 नहीं है, एकमात्र स्थान जहां समाधान में लागत आ सकती है, नीचे पंक्तियों में है, बाड़ के बाईं ओर रखे गए स्तंभों से। इस तरह के प्रत्येक कॉलम की कीमत ठीक 1 है, इसलिए यह देखते हुए कि लागत अधिकांश , ऐसे कॉलम में अधिकांश पर होना चाहिए , और इसलिए कवर में अधिकांश कोने पर हैं।m(n+1)m(n+1)mnkkk

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


जब भी ऐसा कोई अच्छा जवाब होता है, तो यह मुझे आश्चर्यचकित करता है कि क्या "हॉट नेटवर्क प्रश्न" को "मूल्यवान नेटवर्क उत्तर" जैसी किसी चीज़ से प्रतिस्थापित या शामिल किया जाना चाहिए।
जॉन एल।

क्या आप इस बारे में कुछ प्रकाश डाल सकते हैं कि आपको इसका उत्तर कैसे मिलेगा? यह जवाब से भी अधिक ज्ञानवर्धक होना चाहिए।
जॉन एल।

1
@ Apass.Jack: धन्यवाद! :) मेरे पास एक विशेष रणनीति नहीं है, और लंबे समय तक गलत दिशा में भटकने में खर्च कर सकते हैं। उदाहरण के लिए, यहां मैंने यह सोचने में लंबा समय बिताया कि मैं हैमिल्टनियन साइकिल से कम कर सकता हूं (जो कि तत्वों को क्रमबद्ध करने के समान है) यह महसूस करने से पहले कि मेरा निर्माण सबटॉर्स के अनुरूप कॉन्फ़िगरेशन की अनुमति देगा, और इस तरह काम नहीं करेगा। एक नियम के रूप में, मैं हमेशा वर्टेक्स कवर या विभाजन से कटौती की कोशिश करता हूं, फिर शायद क्लिक्स। "मूल्यवान नेटवर्क उत्तर" एक महान विचार की तरह लगता है :)
j_random_hacker

1
@ Apass.Jack: एक उपयोगी सामान्य विचार यह है कि आप अपने उत्तर को बदले बिना लक्ष्य समस्या के उदाहरण को "स्केल" कैसे कर सकते हैं - उदाहरण के लिए यदि लक्ष्य समस्या (जिसे हम कठिन साबित करने की कोशिश कर रहे हैं) है, तो वह कोई भी सकारात्मक बना सकता है। पूर्णांक ग्राफ़ की प्रतियों को असम्बद्ध करता है और को थ्रेशोल्ड को गुणा करके उत्तर को अपरिवर्तित छोड़ देता है। अक्सर आप कुछ निश्चित उल्लंघनों (लक्ष्य समाधान जो वैध स्रोत समाधानों के अनुरूप नहीं होते हैं) को कुछ अन्य लोगों पर "हावी" करना चाहते हैं, और उस स्थिति में आप उन गैजेट्स को "गुणा" कर सकते हैं जो अधिक महत्वपूर्ण उल्लंघन के अनुरूप हैं। rkr
13:15 पर j_random_hacker

1
मेरे उत्तर में कमी के लिए, हम एक समस्या का एक उदाहरण देना चाहते हैं जहां दो "ताकतें" हों: सभी किनारों को कवर करने की कोशिश करें, और जितना संभव हो उतने कोने का उपयोग करने का प्रयास करें। पहले वाला यहां अधिक महत्वपूर्ण है, इसलिए मैंने किनारों के अनुरूप पंक्तियों को "गुणा" किया: अब एक ही किनारे के उल्लंघन की लागत , जिसका अर्थ है कि सभी छोरों को शामिल करने की तुलना में एक भी बढ़त को याद करना बदतर है। और मुझे अभी पता चला है कि मुझे यह स्पष्ट करने के लिए उत्तर को संपादित करना चाहिए कि हम इन दो समस्याओं के निर्णय समस्या संस्करणों के साथ काम कर रहे हैं , जिसमें थ्रेसहोल्ड पैरामीटर समस्या उदाहरण का हिस्सा हैं ...n+1
j_random_hacker

2

मुझे नहीं पता कि क्या वास्तव में एक बहुपद समाधान है। फिर भी Pål GD की टिप्पणी के आधार पर, आप एक सरलीकरण फ़ंक्शन का निर्माण कर सकते हैं। जब आप आउटपुट अनुक्रम का निर्माण करते हैं तो प्रारंभिक मैट्रिक्स को सरल बना दिया जाता हैS

function simplification:
while(true)
    if any row i$ has no 1 or no -1 left, remove it
    if any column j has no -1 then,
       remove it and put j on the leftmost available position in S,
       remove all rows where column j has 1.
    if any column j has no 1 then, 
       remove it and put j on the rightmost available position in S.
    if no modification has been done on this loop, break

फिर आपको फंक्शन पिक का उपयोग करके कॉम्बिनेटरिक्स का पूरा अन्वेषण करना होगा:

function pick(k):
    put column k on the leftmost available position in S
    remove any row where column k is -1 or 1

प्रत्येक पिक के बाद आप संभवतः अन्वेषण की संभावनाओं को कम करने के लिए एक सरलीकरण कर सकते हैं। मेरा सुझाव है कि कम -1 वाले कॉलम के साथ लालच का पता लगाने की शुरुआत करें, इस प्रकार आप एक स्टॉप मानदंड बनाने वाली कम सीमा तक पहुंच सकते हैं।

दिए गए उदाहरण पर, पहला सरलीकरण देता है (जैसा कि Pål GD ने टिप्पणी में समझाया है)

  • S[0]=c3, r1, r3 निकालें
  • S[1]=c4, r4 निकालें
  • S[2]=c2 यह आपको एक सरल मैट्रिक्स के साथ पता लगाने देता है।
    [1111]

मुझे लगता है कि इस विधि को काफी हद तक बनाने वाले एक मैट्रिक्स के पास ठीक एक 1, और एक -1 प्रति पंक्ति / कॉलम, कुछ ऐसा होगा

[110000110000001100001100000011000011]

फिर भी, सरलीकरण अभी भी आधा अन्वेषण कदम के बारे में अतिरिक्त। और मैट्रिक्स के इस प्रकार कई स्वतंत्र उप मैट्रिक्स में विभाजित किया जा सकता।


1
@ Apass.Jack मैंने अधिक सटीक होने के लिए संपादन किया। हां, मेरा मतलब था कि आउटपुट अनुक्रम में कॉलम की स्थिति।
ऑप्टिआड

सरलीकरण कदम के रूप में व्यावहारिक उद्देश्यों के लिए काफी अच्छा हो सकता है (जैसे ऑनलाइन प्रोग्रामिंग अभ्यास?)।
जॉन एल।

धन्यवाद, वास्तव में मैं amortized समय लागत का अनुमान लगाने के लिए इच्छुक था लेकिन मुझे वास्तव में नहीं पता कि कैसे करना है। क्या यह संभव है ? या यह बहुत समस्या पर निर्भर है?
ऑप्टिआड

2
मैंने परिशोधित-समय विश्लेषण की कोशिश की थी, जो कठिन लगता है। मुझे एनपी- अपूर्णता पर संदेह है । दूसरी ओर, सरलीकरण कदम अधिक सामान्य हो सकता है। कॉलम के लिएi तथा j ऐसा है कि उनमें से साझा नॉनजरो हिस्सा नॉनजेरो पार्ट है i, कॉलम j यदि अतिरिक्त नॉनजरो भाग को हटाया जा सकता है j 1 और कॉलम शामिल नहीं है i यदि अतिरिक्त नॉनजरो भाग को हटाया जा सकता है jशामिल नहीं है -1।
जॉन एल।

1
एक और प्रभुत्व नियम है: जब भी आपके पास दो कॉलम हों i तथा j ऐसा है कि जहां कम से कम 1 पंक्ति है i -1 और j +1 है, और वहाँ कोई पंक्ति जहां है i है +1 और j -1 है, रखने का कोई फायदा नहीं है iप्रथम। चलिए बताते हैंj हावी iइस मामले में। आप इसे पिक के अंदर लागू कर सकते हैं (k) जाँच करके कि क्या kपहले से ही रखे गए किसी भी कॉलम पर हावी है: यदि हां, तो आप खोज ट्री की इस शाखा को प्रून कर सकते हैं।
13:15 पर j_random_hacker
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.