एक स्ट्रिंग को अनशफल करना कितना कठिन है?


117

प्रत्येक तार के पात्रों को क्रम में रखते हुए, दो तारों का एक फेरबदल पात्रों को एक नई स्ट्रिंग में बदलकर बनाया जाता है। उदाहरण के लिए, MISSISSIPPIका फेरबदल है MISIPPऔर SSISI। अगर यह दो समान तारों का फेरबदल है, तो मुझे एक स्ट्रिंग स्क्वायर बुलाएं । उदाहरण के लिए, ABCABDCDवर्ग है, क्योंकि यह ABCDऔर का फेरबदल है ABCD, लेकिन स्ट्रिंग ABCDDCBAवर्ग नहीं है।

क्या यह निर्धारित करने के लिए एक तेज एल्गोरिथ्म है कि क्या एक स्ट्रिंग चौकोर है, या क्या यह एनपी-हार्ड है? स्पष्ट गतिशील प्रोग्रामिंग दृष्टिकोण काम नहीं करता है।

यहां तक ​​कि निम्नलिखित विशेष मामले कठिन प्रतीत होते हैं: (1) तार जिसमें प्रत्येक वर्ण अधिकतम चार छह बार दिखाई देता है , और (2) केवल दो अलग-अलग वर्णों के साथ तार। जैसा कि ऑस्टरिन नीचे बताते हैं, विशेष मामला जहां प्रत्येक चरित्र चार बार होता है, उसे 2SAT तक कम किया जा सकता है।


अद्यतन: इस समस्या का एक और सूत्रीकरण है जो एक कठोरता प्रमाण को आसान बना सकता है।

एक ग्राफ जी पर विचार करें, जिसके कोने एन के माध्यम से पूर्णांक 1 हैं; प्रत्येक छोर को उसके समापन बिंदु के बीच वास्तविक अंतराल से पहचानें। हम कहते हैं कि जी के दो किनारों को घोंसला दिया जाता है यदि एक अंतराल ठीक से दूसरे में होता है। उदाहरण के लिए, किनारों (1,5) और (2,3) नेस्टेड हैं, लेकिन (1,3) और (5,6) नहीं हैं, और (1,5) और (2,8) नहीं हैं। यदि किनारों की कोई जोड़ी नहीं है, तो जी में मेल नॉन-नेस्टेड है। क्या यह निर्धारित करने के लिए एक तेज एल्गोरिथ्म है कि क्या जी में एक गैर-नेस्टेड परिपूर्ण मिलान है, या क्या यह समस्या एनपी-हार्ड है?

  • एक स्ट्रिंग को अनशफ्लिंग करना गैर-नेस्टेड परफेक्ट मेल को समान करने के लिए है जो असंतुष्ट संघों के बीच के मेलों में है (प्रत्येक वर्ण के बीच किनारों के साथ)। विशेष रूप से, एक द्विआधारी स्ट्रिंग को अनशफल करना एक गैर-नेस्टेड दो मिलान के एक असंतुष्ट संघ में परिपूर्ण मिलान खोजने के बराबर है । लेकिन मुझे यह भी नहीं पता कि यह समस्या सामान्य रेखांकन के लिए कठिन है, या रेखांकन के किसी भी दिलचस्प वर्गों के लिए आसान है।

  • परफेक्ट नॉन- क्रॉसिंग मैचिंग को खोजने के लिए एक आसान बहुपद-समय एल्गोरिथ्म है ।


अद्यतन (जून 24, 2013): समस्या हल हो गई है! अब दो स्वतंत्र प्रमाण हैं कि वर्ग तारों की पहचान एनपी-पूर्ण है।

एक सरल प्रमाण यह भी है कि 2009 में शुआई चेंग ली और मिंग ली के कारण नॉन-नेस्टेड परफेक्ट मैचिंग का पता लगाना मुश्किल है। " 2-अंतराल पैटर्न की दो खुली समस्याओं पर देखें ", सैद्धांतिक कंप्यूटर विज्ञान 410 (24-25) ): 2410–2423, 2009


2
क्या अनुक्रम केवल A000984 नहीं है, "2 बिट के संभावित मानों की संख्या * बिट बाइनरी संख्या जिसके लिए आधे बिट चालू हैं और आधे बंद हैं"?
ट्रैविस ब्राउन

5
@Travis, जब तक मुझे गलतफहमी न हो: n = 4 के लिए, 10000111 एक 2 * n बिट बाइनरी संख्या है, जिसके लिए आधे बिट्स चालू हैं और आधे बंद हैं, लेकिन जो एक वर्ग नहीं है, जैसा कि परिभाषित किया गया है। उस तर्क के बाद, चूंकि वर्ग A000984 उत्पन्न करने वाले सेट का एक सख्त उपसमूह है, बाइनरी वर्णमाला पर वर्गों के लिए मान अनुक्रम के माध्यम से समान सूचकांकों पर कम होना चाहिए - नहीं?
डैनियल अपॉन

1
अवलोकन: ग्राफ की औपचारिकता का उपयोग करते हुए, 2n को G. के कोने में संख्याओं की संख्या दें। G a को G के रेखा ग्राफ से प्राप्त ग्राफ को G के पंक्तिबद्ध किनारों के बीच किनारों को जोड़कर प्राप्त करें। समस्या पूछती है कि क्या G ′ के पास है आकार का एक स्वतंत्र सेट n। ग्राफ़ के विभिन्न वर्ग हैं जहाँ एक अधिकतम स्वतंत्र सेट को बहुपद समय की गणना की जा सकती है। यदि हम इस मार्ग पर जाते हैं, तो सवाल यह है कि जी? के पास क्या अच्छे गुण हैं? (और अधिक)
Tsuyoshi इतो

2
@Radu: मुझे नहीं लगता कि वर्गों का अंश गैर-वर्गों (द्विआधारी अक्षर से अधिक) 1/3 में परिवर्तित होता है। मैंने कुछ मोंटे-कार्लो सिमुलेशन किए जो कि 1/2 में धीमी गति से अभिसरण का संकेत देते हैं। इसलिए सीमा में अनिवार्य रूप से 0 और 1 की संख्या के साथ सभी बाइनरी स्ट्रिंग्स हैं। यह मेरे लिए आश्चर्यजनक है, और एक एल्गोरिथ्म में शोषक हो सकता है। बड़े अक्षर के लिए वर्गों का अंश तेजी से 0 में परिवर्तित होता है।
मार्टिन बर्गर

8
चूँकि यह प्रश्न आज के ब्लॉग पोस्ट में उल्लिखित है, तो आइए देखें कि क्या हम इस समस्या को हल करने में कुछ नए सिरे से रुचि ले सकते हैं। इस प्रश्न को आगे लाए हुए एक साल हो गया है, और हमने तब से बहुत सारे नए उपयोगकर्ता प्राप्त कर लिए हैं। मैंने सवाल के लिए 100 प्रतिनिधि इनाम रखा है।
एलेक्स दस ब्रिंक

जवाबों:


66

माइकल सॉल्टीज़ और मैं यह साबित करने में सफल रहे हैं कि यह निर्धारित करने की समस्या कि क्या एक स्ट्रिंग को एक वर्ग फेरबदल के रूप में लिखा जा सकता है एनपी पूरा। यह केवल अलग-अलग प्रतीकों के साथ एक महीन वर्णमाला पर भी लागू होता है , हालांकि हमारा प्रमाण 9 प्रतीकों के साथ एक वर्णमाला के लिए लिखा गया है । यह प्रश्न अभी भी छोटे अक्षरों के लिए खुला है, केवल 2 प्रतीकों के साथ कहें । हमने प्रतिबंध के तहत समस्या को नहीं देखा है कि प्रत्येक प्रतीक केवल 6 बार (या, अधिक सामान्यतः, एक स्थिर संख्या) प्रकट होता है ; ताकि सवाल अभी भी खुला हो।7926

प्रमाण -Partition से कमी का उपयोग करता है । यह यहाँ पोस्ट करने के लिए बहुत लंबा है, लेकिन एक प्रीप्रिंट, "एक स्ट्रिंग को अनश्लिंग करना एनपी -हार्ड है ", हमारे वेब पेज से उपलब्ध है:3NP

http://www.math.ucsd.edu/~sbuss/ResearchWeb/Shuffle/

तथा

http://www.cas.mcmaster.ca/~soltys/#Papers

पेपर को कंप्यूटर सिस्टम साइंसेज जर्नल में प्रकाशित किया गया है:

http://www.sciencedirect.com/science/article/pii/S002200001300189X


11
बहुत बढ़िया!! (और मेरी असीम राहत के लिए, गंभीरता से nontrivial।)
जेफ़ '30

15
धन्यवाद। इस प्रश्न के लिए StackExchange हमारा स्रोत था। यह एक महान संसाधन है!
सैम बुस

9
@SamBuss एक छोटा सा अनुरोध: जब आप जेफ के प्रश्न का हवाला देते हैं, तो आप केवल पाठ में प्रति ऑस्टिन के समाधान का उल्लेख करते हैं। यदि आप उत्तरों को देखते हैं, तो उत्तर के लिए एक औपचारिक प्रशस्ति पत्र बनाने के लिए एक तरीका है (शेयर बटन पर क्लिक करें और। उद्धरण ’लिंक पर क्लिक करें)। इस तरह, आप पेर के जवाब के लिए एक उचित उद्धरण भी उत्पन्न कर सकते हैं। मैं केवल इसका उल्लेख करता हूं ताकि साइट पर औपचारिक योगदान देने वाले लोगों को भी औपचारिक मान्यता मिल सके। धन्यवाद ! और इस समस्या को रोकने के लिए बधाई
सुरेश वेंकट

2
@SureshVenkat। टिप के लिए धन्यवाद: यह उपयोगी है। मैंने इसे पेपर के ऑनलाइन संस्करण में जोड़ दिया है।
सैम बुस

: एक वर्ग फेरबदल को पहचानने की समस्या अब भी एक द्विआधारी वर्णमाला पर कठिन हो करने के लिए दिखाया गया है sciencedirect.com/science/article/pii/S0304397519300258
a3nm

58

जब आप प्रत्येक वर्ण को चार बार प्रकट करते हैं, तो विशेष स्थिति के लिए, 2-SAT में एक सरल कमी है (जब तक कि मुझे कुछ याद नहीं है ...), इस प्रकार है:

महत्वपूर्ण बिंदु यह है कि प्रत्येक चरित्र के लिए, चरित्र की घटनाओं के मिलान के दो वैध तरीके (अधिकतम) हैं (तीसरी संभावना घोंसले के शिकार होंगे)। दो मिलानों में से कौन सा चुना गया है, यह दर्शाने के लिए बूलियन चर का उपयोग करें। अब इन चरों के लिए एक असाइनमेंट स्ट्रिंग के हर भाग के लिए स्ट्रिंग iff का एक वैध अशुद्धि प्रदान करता है जो नस्टेड हैं, दोनों को नहीं चुना गया था। इस स्थिति को वर्णों के एक विघटन (संभवतः उपेक्षित) द्वारा शामिल किए गए दो वर्णों के अनुसार ठीक से वर्णित किया जा सकता है।


अच्छा लगा। एक ही विचार उन स्ट्रिंग्स का सामान्यीकरण करता है जहां प्रत्येक वर्ण अधिकतम छह बार होता है, लेकिन परिणाम 5-SAT का एक उदाहरण है। :-(
जेफ-

2
यह जवाब इनाम जीतने के लिए पसंदीदा है।
जेफ

इसलिए यह साबित होता है कि समस्या एनपीसी है और हमें लंबे सम्मेलन और जर्नल प्रूफ की आवश्यकता क्यों है?
टी ....

@ टर्बो ने बहुत कुछ किया है, लेकिन यह समस्या को एनपीसी साबित नहीं करता है क्योंकि 2-एसएटी एनपीसी नहीं है ; यह पी। में है
स्टीवन स्टडनिक

क्या यह कमी 2-सैट के लिए काम करती है यदि वर्णमाला का आकार अप्रभावित है?
मोहम्मद अल-तुर्किस्टनी

11

यहाँ एक एल्गोरिथ्म है जो सही होने का कुछ मौका हो सकता है हालांकि यह साबित करने के लिए मुश्किल लगता है और मैं इस पर घर की शर्त नहीं लगाऊंगा ...

हमें का कहना है कि चलो रहा है पर्ज अगर के लिए हर बढ़त , वहाँ एक (संभवतः नेस्ट) का सही मिलान मौजूद जी का उपयोग करता है और किसी भी बढ़त में या युक्त निहित का उपयोग नहीं करता GeGee

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

अब विश्वास की छलांग आती है, जो सही हो भी सकती है और नहीं भी: उम्मीद यह है कि एक शुद्ध ग्राफ में, अगर डिग्री के वर्टिकल अभी भी हैं , हम लालची पसंद कर सकते हैं और अपने पहले पड़ोसी से इस तरह के पहले शीर्ष से मेल खा सकते हैं (या समकक्ष, इसके सभी अन्य पड़ोसियों के किनारों को हटा दें)।>1

लालची पसंद के बाद हम ग्राफ को फिर से शुद्ध करते हैं, और इसी तरह, और यह प्रक्रिया तब समाप्त होती है जब ग्राफ एक गैर-घोंसले के शिकार से परिपूर्ण मिलान होता है।

पहले तो मैंने सोचा कि यह मोटे तौर पर लालची एल्गोरिथ्म में एक छोटा-सा लुक-फॉरवर्ड करने जैसा होगा और वास्तव में काम नहीं करेगा, लेकिन मुझे एक प्रतिरूप के साथ आना आश्चर्यजनक रूप से कठिन लगा।


मैं दूसरे लालची चरण के बारे में उलझन में हूँ, लेकिन ग्राफ़ को शुद्ध करना उपयोगी लगता है। मूल स्ट्रिंग संदर्भ में, जहां ग्राफ गुच्छों का तिरस्कार संघ है, क्या आप शुद्ध ग्राफ़ की संरचना के बारे में कुछ कह सकते हैं? क्या यह अभी भी कुलियों का एक संघ है? (दूसरे शब्दों में, क्या आप प्रत्येक वर्ण की घटनाओं को इनपुट स्ट्रिंग में विभाजित कर सकते हैं ताकि विभिन्न भागों में वर्णों का मिलान न हो सके?)
जेफ

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

11

नवंबर 2012 में सैम बुस और मैंने जो समाधान प्रस्तावित किया (जिसमें 3-पार्टिशन से कमी करके एनपी-हार्ड में एक वर्ग को अनशफल करना) अब कंप्यूटर सिस्टम साइंसेज जर्नल में एक प्रकाशित लेख है:

http://www.sciencedirect.com/science/article/pii/S002200001300189X


2
यह वास्तव में सैम बुस के पहले के उत्तर को संपादित करने के लिए एक अलग उत्तर के बजाय होना चाहिए। आप किसी और के उत्तर को संपादित करने का सुझाव देने के लिए "संपादित करें" पर क्लिक कर सकते हैं, और आपके संपादन की समीक्षा साइट के अन्य उपयोगकर्ताओं द्वारा की जाएगी।
डीडब्ल्यू

11

रोमियो रिज्जी और स्टीफन वायलेट ने साबित किया कि सबसे लंबे द्विआधारी बाद की समस्या से कम करके, "2013 में अपने शब्दों को पहचानने वाले शब्द हैं, जो कि फेरबदल के लिए वर्ग हैं "। वे कहते हैं कि द्विआधारी तारों को हटाने की जटिलता अभी भी खुली है।

एक और भी सरल प्रमाण है कि गैर-नेस्टेड परिपूर्ण मिलान ढूंढना एनपी-पूर्ण है शुआई चेंग ली और मिंग ली ने अपने 2009 के पेपर " 2-अंतराल पैटर्न की दो खुली समस्याओं पर " दिया है। हालांकि, वे जैव सूचना विज्ञान से विरासत में मिली शब्दावली का उपयोग करते हैं। "सही गैर-नेस्टेड मिलान" के बजाय, वे इसे "DIS-2-IP- {<,} समस्या" कहते हैं। ब्लिन, फर्टिन और वायलेट द्वारा दो समस्याओं के बीच समानता का वर्णन किया गया है :

2-आईपी डिस {<,} समस्या सामान्य रेखांकन में विवश matchings के मामले में एक तत्काल तैयार करने होते हैं: यह देखते हुए एक ग्राफ G एक रेखीय आदेश के साथ एक साथ π के कोने की G , 2-आईपी डिस {<,} समस्या अधिकतम प्रमुखता मिलान पाने के लिए बराबर है M में G संपत्ति के साथ कि किसी भी दो अलग-अलग किनारों के लिए {u,v} और {u,v} के Mmin{π(u),π(v)}<min{π(u),π(v)} औरmax{π(u),π(v)<max{π(u),π(v)} और न हीmin{π(u),π(v)}<min{π(u),π(v)} औरmax{π(u),π(v)}<max{π(u),π(v)} होते हैं।

अद्यतन (25 फरवरी, 2019): Bulteau और Vialette ने दिखाया कि द्विआधारी स्ट्रिंग को अनशफल करने की निर्णय समस्या उनके पेपर में NP-पूर्ण है, बाइनरी शफल वर्गों को पहचानना NP-hard है


मैं कनेक्शन नहीं देखता, और मैं नहीं देखता कि लेखक कहां दावा करते हैं कि स्ट्रिंग को अनशफल करना उनकी समस्या के बराबर है।
सुरेश वेंकट

2
वे यह नहीं कहते हैं कि यह अनशफलिंग के बराबर है; यह एक सामान्य समस्या है।
जेफ

@ सुरेश वेंकट ने अपना जवाब संपादित किया, मुझे आशा है कि यह स्पष्ट है। मूल रूप से, वे फुटनोट में जो कह रहे हैं वह यह है कि मिलान ( ) में कोई भी दो किनारे गैर-नेस्टेड हैं। M
मोहम्मद अल-तुर्कस्टनी

वास्तविक प्रकाशित संस्करण में, पृष्ठ 320 में बराबरी
मोहम्मद अल-तुर्किस्टानी

संयुक्त राष्ट्र का नेतृत्व करने के लिए संपादित करें ।
जेफ

9

क्या यह मदद करता है?

http://users.soe.ucsc.edu/~manfred/pubs/J1.pdf


7
अच्छा संदर्भ। यह देखना मुश्किल है कि परिणाम मेरी समस्या पर कैसे लागू होंगे, लेकिन शायद तकनीक मदद करेगी। यह बताना आसान है कि क्या एक दिया गया स्ट्रिंग X किसी अन्य दिए गए स्ट्रिंग Y की दो प्रतियों का फेरबदल है। संलग्न कागज यह साबित करता है कि यह निर्धारित करना मुश्किल है कि क्या दिया गया स्ट्रिंग X किसी अन्य स्ट्रिंग स्ट्रिंग Y की किसी भी संख्या की प्रतियों का फेरबदल है । मैं यह जानना चाहता हूं कि क्या एक दिया गया स्ट्रिंग X, SOME
UNKNOWN

5

कभी नहीं, इस उत्तर गलत है। यह इनपुट "एएएएएबी" पर विफल रहता है: पहले दो ए के एक-दूसरे के साथ लालच का मिलान शेष प्रतीकों से मेल करना असंभव बनाता है। मैं इसे हटाने के बजाय इसे छोड़ रहा हूं ताकि दूसरों को एक ही गलती करने से बचाने में मदद मिल सके।

यह मुझे लगता है कि यह माना जाता है कि यह माना जाता है कि एक दूसरे समान वर्ण के लिए लालच के प्रत्येक क्रमिक चरित्र को हमेशा के लिए सुरक्षित करना संभव है, जितनी जल्दी हो सके। यही है, मुझे लगता है कि निम्नलिखित रैखिक समय एल्गोरिथ्म को काम करना चाहिए:

इनपुट स्ट्रिंग में प्रत्येक स्थिति i, 0 = 1, 2, ... n के माध्यम से लूप करें। प्रत्येक स्थिति i के लिए, जांचें कि क्या पहले से ही स्ट्रिंग में कुछ स्थिति के खिलाफ उस स्थिति का मिलान किया जा चुका है। यदि नहीं, तो इसे एक समान वर्ण के खिलाफ मिलाएं जो अंतिम पहले से ही मिलान की स्थिति के बाद आता है और अन्यथा स्ट्रिंग में जितनी जल्दी हो सके। यदि किसी पात्र के लिए मैच नहीं मिला है, तो घोषित करें कि इनपुट एक वर्ग नहीं है; अन्यथा, यह प्रत्येक मैच की पहली जोड़ी में वर्णों का समूह है।

यहाँ यह पायथन में है:

डीआर sqrt (एस):
    मैच = []
    i, j = 0, 0
    जबकि मैं <लेन (एस):
        अगर j <len (माचिस) और मैच [j] [1] == i:
            मैं + = 1
            j + = १
            जारी रखें
        यदि मेल खाता है:
            k = मैच [-1] [1] + १
        अन्य:
            के = १
        जबकि k <len (S) और S [k]! = S [i]:
            के + = १
        अगर k> = len (S):
            अपवाद उठाएं ("एक वर्ग नहीं")
        matches.append ((i, ट))
        मैं + = 1
    वापसी ""। जॉइन (एस [ए] मैचों में बी के लिए)

प्रिंट sqrt ("ABCABDCD")

यहाँ मैं मुख्य लूप वेरिएबल है (जिस स्थिति से हम मिलान करने का प्रयास कर रहे हैं), j, मैचेड जोड़े की सरणी में एक पॉइंटर है जो इस बात की जांच को गति देता है कि क्या मैं पहले से ही मेल खाता हूं या नहीं, और k एक इंडेक्स है जिसकी खोज करने के लिए उपयोग किया जाता है वह चरित्र जो किसी एक की स्थिति से मेल खाता है। यह रैखिक समय है क्योंकि i, j, और k एकरूपता से स्ट्रिंग के माध्यम से बढ़ रहे हैं और प्रत्येक आंतरिक लूप पुनरावृत्ति उनमें से एक को बढ़ाता है।


4
वहाँ गया। हो गया। :-)
जेफ

5

अद्यतन: यह सही मिलान खोजने की कठिनाई के बारे में बात करने के लिए कोई मतलब नहीं है जो गैर-घोंसले के शिकार और गैर-क्रॉसिंग है, जब लेबल 1 से n तक होते हैं, क्योंकि केवल एक ही ऐसा है। (हां, मैं खुद को लात मार रहा हूं।) हालांकि, यह समझ में आता है कि लेबल पर एक बड़ी रेंज दी गई है ... इसलिए मुझे अभी भी कुछ उम्मीद है, लेकिन यह सब के बाद काफी बेकार हो सकता है। मैं निश्चित रूप से कुछ और इस का पालन करना होगा।


मैं सोच सकता हूं कि ऐसा मिलान क्यों करना मुश्किल हो सकता है जो नॉन-नेस्टिंग और नॉन-क्रॉसिंग हो। मुझे ऐसे मेल को एक असंतुष्ट मिलान कहते हैं । निश्चित नहीं है कि यह किस हद तक मदद करता है, लेकिन मुझे तर्क को वैसे भी पेश करने दें। (मुझे यह इंगित करना चाहिए कि मेरा तर्क, जैसा कि यह यहाँ खड़ा है, पूरा नहीं है, और मैं जिस विस्तार को छोड़ता हूं वह संभवतः महत्वपूर्ण है। हालांकि, मुझे लगता है कि यह शुरुआत का कुछ हो सकता है।)

मैं थोड़ी अलग समस्या के साथ शुरू करता हूँ। एक ग्राफ को देखते हुए, जिसके किनारों को k रंग से रंगा जाता है, और कोने 1 से n तक लेबल किए जाते हैं , क्या एक असंगति मिलान होता है जिसमें प्रत्येक रंग का एक किनारा होता है? यह समस्या एनपी-हार्ड प्रतीत होती है (इसके लिए तर्क पूर्ण और सीधा दोनों है - जब तक कि मुझे कुछ याद नहीं है)। कमी एक ग्राफ को बाहर निकालती है जो कि गुटों का एक अलग संघ है।Gk1n

कमी डिस्जॉइंट फैक्टर्स से है , एक एनपी-पूर्ण समस्या जिसे [1] में पेश किया गया है। असंतुष्ट कारकों का एक उदाहरण आकार की एक वर्णमाला पर एक स्ट्रिंग द्वारा दिया जाता है , और सवाल यह है कि क्या k kjoint कारक हैं, जहां एक कारक एक विकल्प है जो एक ही अक्षर से शुरू और समाप्त होता है; और यदि वे स्ट्रिंग में ओवरलैप नहीं करते हैं तो दो कारक असंतुष्ट हैं (ध्यान दें कि 'नेस्टिंग', विशेष रूप से, भी अस्वीकृत है)।kk

मेरे द्वारा निरूपित करते हैं , के तत्वों कश्मीर आकार के जुदा करना के साथ जुड़े वर्णमाला उदाहरण कारक।a1,,akk

nn1nuvai(u,v)i

kkk

रंगों से छुटकारा पाने के लिए और मिलान को सही बनाने के लिए, संभवतः एक बड़ी रेंज पर , इस प्रकार बनाए गए ग्राफ में निम्नलिखित संशोधन करें:

UaaUaA(A2)Ua

Ua

[१] बहुपद गुठली के बिना समस्याओं पर , हैंस एल। बोडलेंडर, रॉडनी जी। डाउनी, माइकल आर। फेलो और डैनी हर्मेलिन, जे। कंपुत। Syst। विज्ञान।


3
मैं उलझन में हूं। क्या (1,2), (3,4), (5,6), ..., (n-1, n) केवल सही असहमति मिलान नहीं है?
जेफ

एक बार जब मैं 'परफेक्ट मैचिंग' परिदृश्य के लिए आगे बढ़ता हूं, तो मैं कंस्ट्रक्शन को संशोधित करता हूं और बहुत सारे नए वर्जन जोड़ देता हूं (ध्यान दें कि मैं जोड़ता हूं। वर्णमाला में प्रत्येक के लिए U_a--2 नया वर्जन)। इस प्रकार, n तदनुसार आकार देगा - लगभग 2n-2k, k- आकार की वर्णमाला के लिए। मुझे आशा है कि मैंने यह स्पष्ट कर दिया है कि यह कमी अधूरी है कि मैंने यह निर्दिष्ट नहीं किया है कि नई संख्याओं को क्या संख्याएँ आवंटित की गई हैं, लेकिन मुझे उम्मीद है कि इसे बहुत अधिक कठिनाई के बिना बढ़ाया जा सकता है। हालाँकि, कुछ और कहने से पहले मुझे निश्चित रूप से इसके बारे में सोचना होगा।
नीलधारा

1
मुझे लगता है कि जेफ़ई की टिप्पणी की बात यह है कि एक पूर्ण मिलान ढूंढना आसान है जो नॉन-नेस्टिंग और नॉन-क्रॉसिंग (या अनुपस्थिति की रिपोर्ट करना) है क्योंकि केवल एक संभावना है।
१२:१३

2
मैं आपके प्रमाण विचार की सामग्री के बारे में बात नहीं कर रहा हूं, लेकिन मैं आपके उत्तर के पहले वाक्य के बारे में बात कर रहा हूं: "मैं सोच सकता हूं कि ऐसा क्यों हो सकता है कि एक परिपूर्ण मिलान जो गैर-घोंसले से रहित और गैर-क्रॉसिंग हो।" जेफ ने जो कारण लिखा है, उसके लिए यह कार्य आसान है।
त्सुयोशी इटो

2
असंगति कारक समस्या (प्रत्येक रंग के अधिकांश एक किनारे पर) द्वारा लगाए गए रंग की बाधा के बिना, अधिकतम विच्छेदन मिलान ढूंढना भी आसान है।
जेफ

1

दृष्टिकोण काम नहीं करता है: दो मिलान पत्र निकालकर एक फेरबदल वर्ग को विघटित करने से परिणाम नहीं मिलता है ... नीचे दी गई राडू की टिप्पणी देखें।


का उपयोग करते हुए एक प्रस्ताव रेंज कड़ी व्याकरण (RCGs, देख http://hal.inria.fr/inria-00073347/en/ ): मैं 'm यह धारणा थी निम्नलिखित सरल RCG स्वीकार करता है कि आपके एक परिमित से अधिक "फेरबदल वर्ग" भाषा वर्णमालाΣ

S(XY)A(X,Y)(1)A(aX1,aX2Y1Y2)A(X1,Y1)A(X2,Y2)(2)A(ε,ε)ε(3)
aΣε

X1Y1Y1X2Y2Y1Y2X1X2

abcabdcd

S(abcabdcd)A(abc,abdcd)(by 1,X=abc,Y=abdcd)A(bc,bdcd)A(ε,ε)(by 2,X1=bc,Y1=bdcd,X2=Y2=ε)A(c,c)A(d,d)A(ε,ε)(by 2)A(ε,ε)A(ε,ε)A(d,d)A(ε,ε)(by 2)A(ε,ε)A(d,d)A(ε,ε)(by 3)A(d,d)A(ε,ε)(by 3)A(ε,ε)A(ε,ε)A(ε,ε)(by 2)3εi.e. success

0011

S(0011)A(0,011)A(ε,ε)A(1,1)A(1,1)ε

अब, Boullier पहले से जुड़ा हुआ कागज RCGs के लिए एक गतिशील प्रोग्रामिंग बहुपद समय एल्गोरिथ्म, जो आपके प्रश्न के उत्तर अगर ऊपर व्याकरण है कि वहाँ में पता चलता है सही थे। विचार यह है कि, हालांकि मैंने चर के उदाहरणों के ऊपर प्रस्तुत किया हैXY स्ट्रिंग के रूप , आदि , वे वास्तव में इनपुट स्ट्रिंग के अंदर अंतराल हैं, जिन्हें ठीक से सारणीबद्ध किया जा सकता है।


ϵ

मुझे ऐसा नहीं लगता।
सर्ज गैसपर्स

ϵ

रिटर्न के लिए धन्यवाद; मैंने व्याकरण को थोड़ा बदल दिया है, और यहां तक ​​कि एक छोटा सा अंतर्ज्ञान भी है जिसमें यह काम कर सकता है।
सिल्वेन

3
ϵ

1

अपडेट: जैसा कि त्सुयोशी इटो टिप्पणियों में बताते हैं, इस एल्गोरिथ्म में घातीय समय चल रहा है।

मूल पोस्ट:

यहाँ मैं वास्तविक दुनिया में यह कैसे कार्यक्रम होगा।

हमें एक स्ट्रिंग S = (S [1], ..., S [n]) दिया जाता है। प्रत्येक उपसर्ग S_r = (S [1], ..., S [r]) के लिए, तार के जोड़े के एक सेट {(T_i, U_i)} है, जैसे कि S_r (Ti, U_i) का फेरबदल है, और T_i U_i का एक उपसर्ग है (यानी U_i 'T_i) से शुरू होता है। S_r अपने आप में एक वर्ग है यदि और केवल अगर इस सेट में T_i = Uii के साथ एक जोड़ी (T_i, U_i) है।

अब, हमें इन सभी जोड़ों को उत्पन्न करने की आवश्यकता नहीं है; हमें बस T_i की प्रति हटाकर प्राप्त प्रत्येक स्ट्रिंग U_i का प्रत्यय V_i उत्पन्न करना होगा। यह अप्रासंगिक डुप्लिकेट की एक (संभवतः घातीय) संख्या को समाप्त कर देगा। अब S_r एक वर्ग है यदि और केवल अगर प्रत्ययों के इस सेट में खाली स्ट्रिंग है। तो एल्गोरिथ्म बन जाता है:

Initialise: SuffixSet = {<empty string>} ; r = 0
Loop: while (r < n) {
  r = r + 1
  NextSuffixSet = {}
  for each V in SuffixSet {
    if (V[1] == S[r]) Add V[2...] to NextSuffixSet // Remove first character of V
    Add V||S[r] to NextSuffixSet // Append character S[r] to V
    }
  SuffixSet = NextSuffixSet
  }
Now S is a square if and only if SuffixSet contains the empty string.

उदाहरण के लिए, यदि S AABAAB है:

r=0: SuffixSet = {<empty string>}
r=1: S[r] = A; SuffixSet = {A}
r=2: S[r] = A; SuffixSet = {<empty string>, AA}
r=3: S[r] = B; SuffixSet = {B, AAB}
r=4: S[r] = A; SuffixSet = {BA, AB, AABA}
r=5: S[r] = A; SuffixSet = {BAA, B, ABA, AABAA}
r=6: S[r] = B; SuffixSet = {AA, BAAB, <empty string>, BB, ABAB, AABAAB}

हम उन सभी प्रत्ययों को छोड़ सकते हैं जो इनपुट स्ट्रिंग के रूप में आधे से अधिक हैं, इसलिए यह सरल है:

r=0: SuffixSet = {<empty string>}
r=1: S[r] = A; SuffixSet = {A}
r=2: S[r] = A; SuffixSet = {<empty string>, AA}
r=3: S[r] = B; SuffixSet = {B, AAB}
r=4: S[r] = A; SuffixSet = {BA, AB}
r=5: S[r] = A; SuffixSet = {BAA, B, ABA}
r=6: S[r] = B; SuffixSet = {AA, <empty string>, BB}

मैंने इसे सी ++ में प्रोग्राम किया है, और यह यहां दिए गए सभी उदाहरणों पर काम करता है। अगर किसी की दिलचस्पी है, तो मैं कोड पोस्ट कर सकता हूं। सवाल यह है: क्या SuffixSet का आकार बहुपद की तुलना में तेजी से बढ़ सकता है?


3
मैंने यह भी कोशिश की, लेकिन प्रयोगों से पता चलता है कि मूल स्ट्रिंग (AB) ^ n है तो SuffixSet का आकार n में तेजी से बढ़ रहा है।
त्सुयोशी इतो

1

EDIT: यह एक गलत उत्तर है।


सिल्वेन ने एक आरसीजी का सुझाव दिया जो दुर्भाग्य से इन "फेरबदल वर्गों" के लिए उपयुक्त नहीं था। हालांकि, मुझे लगता है कि एक है (EDIT: RCG नहीं, नीचे कर्ट की टिप्पणी देखें!) , जो इस प्रकार है:

S(Y)A(ϵ,Y)(1)A(X,ZY)A(XZ,Y)(2)A(aX,aY)A(X,Y) for every aΣ(3)A(ϵ,ϵ)ϵ(4)

aabbabab(1,2)(3)। यदि नहीं, तो हम दाहिने हाथ की ओर के कुछ भाग को बाएं हाथ की ओर स्थानांतरित कर सकते हैं(2) हैं और देख सकते हैं कि बाद की स्थिति में मैच है या नहीं। क्या महत्वपूर्ण है कि यह केवल एक दिशा में अनुमत है!

100110101010

S(100110101010)A(ϵ,100110101010)(1)A(1001,10101010)(2)A(01,101010)(3)A(011,01010)(2)A(1,010)(3)A(10,10)(2)A(ϵ,ϵ)(3)ϵ(4)

मैंने एक औपचारिक प्रमाण पर काम नहीं किया है कि यह व्याकरण वास्तव में "फेरबदल वर्गों" को पकड़ लेता है, लेकिन यह बहुत कठिन नहीं होना चाहिए। सिल्वेन ने पहले ही उल्लेख किया है कि आरसीजी के लिए निर्णय समस्या बहुपद है।


A(x,ϵ)23

5
@ DaniCL, दूसरे विचार पर ... क्या उत्पादन नियमों के आरएचएस में मापदंडों को इनपुट की सन्निहित सीमाएं होना चाहिए? मैंने यह नहीं देखा कि बाउलियर पेपर में परिभाषा में स्पष्ट रूप से कहा गया है, लेकिन यह प्रतीत होता है कि इसका उपयोग कैसे किया जा रहा है। पार्सिंग एल्गोरिथ्म के चल रहे समय के विश्लेषण में, यह कहता है कि खंडों के संभावित तर्कों की संख्या हे (n ^ 2h) है जहां h खंड की अधिकतम समता है और n इनपुट लंबाई है। आपके व्याकरण में, सामान्य रूप से XZ मूल इनपुट में सन्निहित नहीं होगा।
कर्ट

3
@ कर्ट, मुझे लगता है कि आपको दोष मिला है। एक अन्य पेपर में ("चीनी संख्या, MIX, स्क्रैचिंग, और रेंज कॉन्टेनेशन ग्रामर"), बाउलियर स्पष्ट रूप से कहते हैं: "निश्चित रूप से, केवल लगातार रेंज को नई रेंज में समेटा जा सकता है। किसी भी PRCG में, खंड, चर और तर्क एक खंड में हैं। एक प्रतिस्थापन तंत्र द्वारा सीमाओं के लिए बाध्य होना चाहिए। " इसका शायद यह मतलब है कि मेरा व्याकरण एक मान्य RCG नहीं है, कि राडू का संदेह उचित था, और यह दृष्टिकोण भी काम नहीं करता है।
DaniCL

2
@ कर्ट सही है। आकस्मिक प्रतिबंध के बिना, मुझे पूरा यकीन है कि मैं उत्पादन नियमों का एक सेट बना सकता हूं जो एनपी-पूर्ण भाषा UNARY 3PARTITION को पहचानता है। गैर-नकारात्मक पूर्णांक के किसी भी सेट को भाषा में एक स्ट्रिंग (1 * 0) ^ * द्वारा एकात्मक में एनकोड किया जा सकता है। UNARY 3PARTITION ऐसी सभी स्ट्रिंग्स का सेट है, जिनके एन्कोडेड सेट को 3-एलिमेंट सबसेट में विभाजित किया जा सकता है, सभी एक ही राशि के साथ। ( En.wikipedia.org/wiki/3-partition_problem देखें ।)
जेफε

1
यूनेरी के लिए व्याकरण 3PARTITION: S (X0Y0Z) -> A (e, X0, Y0, Z); एक (डब्ल्यू, 1X, वाई, जेड), एक (डब्ल्यू, एक्स, 1Y, जेड), एक (डब्ल्यू, एक्स, वाई, 1Z) -> एक (W1 X, Y, जेड); एक (डब्ल्यू, 0x, 0Y, 0z) -> बी (डब्ल्यू, XYZ); बी (डब्ल्यू, ई) -> ई; बी (डब्ल्यू, X0Y0Z) -> सी (डब्ल्यू, डब्ल्यू, X 0 Y0, जेड); सी (डब्ल्यू, 1V, 1X, वाई, जेड), सी (डब्ल्यू, 1V, एक्स, 1Y, जेड), सी (डब्ल्यू, 1V, पहला, दूसरा, 1Z) -> सी (डब्ल्यू, वी, पहला, दूसरा, जेड); C (W, e, X, Y, Z) -> B (W, XYZ)
रादु GRIGore
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.