यह तय करना कि एक वाइल्डकार्ड स्ट्रिंग एक सेट में दूसरे वाइल्डकार्ड स्ट्रिंग द्वारा पूरी तरह से मेल खाता है


9

यहाँ एक समस्या है जो मुझे कुछ समय से परेशान कर रही है। मान लीजिए कि एक स्ट्रिंग 1s और 0s का अनुक्रम है, और वाइल्डकार्ड स्ट्रिंग 1, 0, और s का अनुक्रम है। सभी स्ट्रिंग्स और वाइल्डकार्ड स्ट्रिंग्स की लंबाई समान होती है। ये मानक UNIX वाइल्डकार्ड हैं; 10 ?? 1 मैच 10011, 10111, आदि - ए? उस स्थिति में 1 या 0 से मेल खाता है। अगरv तथा w वाइल्डकार्ड स्ट्रिंग्स हैं, फिर हम लिखते हैं vw अगर हर तार से मेल खाता है v द्वारा भी मिलान किया जाता है w

समस्याओं : एक सेट दियाS वाइल्डकार्ड स्ट्रिंग्स, और एक क्वेरी v (भी एक वाइल्डकार्ड स्ट्रिंग), वहाँ मौजूद है एक wS ऐसा है कि vw? और यदि नहीं, तो क्या हम जोड़ सकते हैंv सेवा S कुशलतापूर्वक?

यहाँ स्पष्ट है O(kmn) समाधान (कहां) k तार का आकार है, mRAM का शब्द आकार (आमतौर पर 32 या 64)) है: सूची के प्रत्येक तत्व के माध्यम से जाएं और स्थिति का परीक्षण करें (जो कि बिट-ट्विडलिंग का उपयोग करके 2 या 3 ऑपरेशन में किया जा सकता है)। इसके अलावा अगर परीक्षण करेंvw किसी भी आइटम के लिए रखती है wजब हम स्कैन कर रहे हैं। अगरv हमारे परीक्षण में विफल रहता है, फिर जोड़ें v सेट करने के लिए, और निकालें wहमने चिह्नित किया है।

लेकिन यह काफी तेज नहीं है। यह वास्तव में अच्छा होगा अगर वहाँ एक थाO(logn) समाधान, या, एक आदर्श दुनिया में, मूलांक वृक्ष के समान जटिलता (O(k))। प्रश्नों का लगभग सही होना भी ठीक है : अर्थात्vw, तो हाँ या ना पर वापस लौटें; लेकिन अगर शर्त नहीं है तो निश्चित रूप से रिटर्न नं।

यद्यपि यह सबसे खराब स्थिति जटिलता में मदद नहीं करता है, आप यह मान सकते हैं कि सभी तत्व Sवाइल्डकार्ड स्ट्रिंग द्वारा बंधे हैं; वह है, कुछ मौजूद हैv ऐसे सभी के लिए wS, vw

विचार मैंने कोशिश की है

  • वाइल्डकार्ड के तार एक जुड़ाव-अर्धविराम का निर्माण करते हैं। हमारे पास एक एन-एरी ट्री हो सकता है जो वाइल्डकार्ड स्ट्रिंग्स रखता है; पत्ते वाइल्डकार्ड स्ट्रिंग्स होंगे, और शाखाएं सभी बच्चों के शामिल होने का प्रतिनिधित्व करेंगी। यदि क्वेरी और ज्वाइन अतुलनीय हैं, तो हमें उस शाखा के सभी बच्चों के साथ तुलना करने के लिए समय बर्बाद करने की आवश्यकता नहीं है। इसके अलावा, अगर हम एक अपडेट करते हैं, और अपडेट एक जॉइन से अधिक होता है, तो हम पूरी शाखा को हटा सकते हैं। दुर्भाग्य से, यह अभी भी हैO(n) सबसे खराब स्थिति में, और हम हमेशा तत्वों को जोड़ने के लिए पेड़ से स्कैन करते समय बनाने के लिए "सबसे अच्छा" जोड़ नहीं पाते हैं।
  • एक का मूलांक तीन बन सकता है S। हम जानते हैं किSकुछ वाइल्डकार्ड स्ट्रिंग द्वारा बाध्य किया गया है; मान लें कि यह है? 0? 0। फिर तीनों की सभी शाखाओं को केवल स्ट्रिंग्स के पहले और तीसरे छोर पर होना चाहिए। यदि वर्तमान बिट हम क्वेरी पर शाखाओं में बँट रहे हैं, तो क्या हमें जाँच करनी है? और 1 शाखाएं; अगर यह 0 है, तो हम जाँच करते हैं? और 0 शाखाएं; अगर यह है?, हम केवल जाँच? डाली। क्योंकि हमें संभावित रूप से कई शाखाएँ लेनी हैं, यह बहुत अच्छा नहीं लगता है (इसी कारण से ट्राइ को अपडेट करना कठिन है)। चूंकि मिलान एक बहुत ही त्वरित ऑपरेशन है, यह एक पेड़ में बहुत सारे ट्रैवर्सिंग करने के लिए भोले की रणनीति की तुलना में दर्द होता है (संकेत का एक गुच्छा कुछ ओआरएस और एंड्स करने की तुलना में बहुत अधिक महंगा है)।

संबंधित कार्य

  • नेटवर्किंग समुदाय में, यह समस्या "पैकेट वर्गीकरण" के रूप में प्रकट होती है, यहां एल्गोरिदम और डेटा संरचनाओं का एक अच्छा सर्वेक्षण है । दुर्भाग्य से, यह धारणा लगभग हमेशा बनी हुई है कि वाइल्डकार्ड स्ट्रिंग्स केवल उपसर्गों से मेल खाते हैं, और क्वेरी ऐसे स्ट्रिंग्स का एक टपल है। बेशक, हम हमेशा इन मानदंडों को पूरा करने के लिए एक सामान्य वाइल्डकार्ड स्ट्रिंग बदल सकते हैं: 1? 00? 1 ?? है (१,;, ०, ० ;, १,?,?)। हालांकि यह कुशल नहीं होगा। अन्य धारणा यह है कि ये ट्यूपल्स एक "रंग" से जुड़े हैं, और क्वेरी को रंग वापस करना चाहिए (न कि यह मेल खाता है)। यह समस्या को बहुत कठिन बना देता है, क्योंकि हमें टुपल्स का आदेश देना होता है (या यह अस्पष्ट है कि कौन से (0;?) और (,, 1) मैच (0, 1) हैं।

  • एल्गोरिदम समुदाय में मुझे "न परवाह" के साथ मेल खाने वाले सबस्ट्रिंग को खोजने से संबंधित बहुत सारे परिणाम मिले हैं। यह काफी कठिन समस्या है, और मैं वास्तव में किसी भी तकनीक का उपयोग नहीं कर सकता।

निष्कर्ष के तौर पर

किसी भी मदद के लिए धन्यवाद!


1
तार कितने बड़े होने की अनुमति है? और आप जटिलता में उनकी लंबाई का हिसाब क्यों नहीं दे रहे हैं? जाहिर है आपको स्ट्रिंग्स की जरूरत हैΩ(logn) अन्यथा आप बस नहीं होता nसाथ काम करने के लिए अलग तार। यह भी सहज ज्ञान युक्त लगता है कि यदि आप अनुमति देते हैंO(n)-लिफ्टिंग स्ट्रिंग्स, तो आपको सबसे खराब स्थिति में अपनी डेटा संरचना में अपने सभी स्ट्रिंग्स को देखना होगा ... क्या स्ट्रिंग की लंबाई पर कोई सीमा है? पॉली-लघुगणक?o(n)?
Artem Kaznatcheev

क्षमा करें यदि मैं स्पष्ट नहीं था। तार हैंO(1)आकार; सभी इरादों और उद्देश्यों के लिए, आप उन्हें 32 वर्णों के लंबे होने के रूप में सोच सकते हैं। "स्ट्रिंग" बस समस्या को हल करने के लिए एक सुविधाजनक अमूर्त था - वे वास्तव में (पूर्णांक, बिटमस्क) ट्यूपल्स के रूप में प्रतिनिधित्व करते हैं, ताकि मैं शामिल होने की गणना कर सकूंvwकेवल कुछ मशीन संचालन में। (बेशक, समस्या स्वाभाविक रूप से पूर्णांक और बिटमास्क फ़ील्ड की संख्या में वृद्धि करके बड़े निरंतर आकार के तारों तक बढ़ाई जा सकती है)।
क्रिस्टोफर मोनसेंटो

मेरी उपरोक्त टिप्पणी शायद एक जटिलता तर्क के लिए सहायक नहीं है :(। अगर आप स्ट्रिंग्स के आकार को अलग-अलग होने की अनुमति देते हैं, तो वास्तव में स्ट्रिंग्स के आकार और सेट के आकार के बीच कोई संबंध नहीं है। यदि है होने के बारे में सच है O(n)सबसे बुरा मामला जो दुर्भाग्यपूर्ण है, लेकिन, मुझे वैसे भी औसत-मामले (या सन्निकटन) में बहुत अधिक दिलचस्पी है।
क्रिस्टोफर मोनसेंटो

जवाबों:


3

कैसे एक परिमित राज्य automaton का उपयोग कर के बारे में? भाषाSपरिमित है और इसलिए नियमित है। नीचे के परिवर्तनों के बाद भी यह नियमित रहेगा। इसलिए नियमित अभिव्यक्ति को एक नियत परिमित-राज्य ऑटोमेटन में बदलने के सामान्य चरणों के बाद, आपके पास जो आप चाहते हैं उसके लिए एक पहचानकर्ता होगाO(k)समय। उम्मीद है कि यह विचार अभी भी काम करने योग्य होगा यदि नीचे प्रस्तावित में बग हों।

शिकन वाइल्डकार्ड ऑपरेटर से कैसे निपटना है:? वाइल्डकार्ड स्ट्रिंग में एक वाइल्डकार्ड एक टेस्ट स्ट्रिंग में 0 या 1 से मेल खाता है। लेकिन जब से हम वाइल्डकार्ड स्ट्रिंग्स को पहचानने की कोशिश कर रहे हैं, वाइल्डकार्ड स्ट्रिंग वाइल्डकार्ड 0, 1, या? एक और वाइल्डकार्ड स्ट्रिंग में। यह सेट अभी भी नियमित है, इसलिए हम हर घटना को बदल देते हैं? नियमित अभिव्यक्ति के लिए (0 | 1 |?) जहां ऊर्ध्वाधर बार सामान्य प्रत्यावर्तन संचालक है। तो अगर आपका पूरा सेटS है {१० ?? १, ०? १; ०}, परिणामी नियमित अभिव्यक्ति होगी (१० (० | १ | १); ० (० | १ | १)) १ | ० (० | १ | १)? १ (०) 1 |?) 0)

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

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


मैंने आटोमेटा पर विचार किया था, हाँ (मैं तिकड़ी के साथ जो कर रहा था वह उसी तरह था जैसे कोई आटोमेटा के साथ एक स्ट्रिंग को स्वीकार करेगा)। हालाँकि, मैंने ऐसा काम नहीं किया था, जो कि क्रमागत रूप से निर्माण पर काम करता है। मैं जाँच करूँगा कि पॉइंटर शायरसन के लिए धन्यवाद।
क्रिस्टोफर मोनसेंटो

मैंने Daciuk, et al paper का हवाला दिया क्योंकि यह आपको प्राप्त करने के लिए सबसे करीबी लग रहा था। लेकिन मुझे लगता है कि यह ध्यान देने योग्य है कि समस्या को हाल ही में कैरास्को और फोर्काडा द्वारा अपने पेपर "इनक्रिमल कंस्ट्रक्शन एंड मेंटीनेंस ऑफ मिनिमल फ़िनिट
शियरर्सन

ठीक है, मुझे नहीं लगता कि मुझे इस विषय से बहुत कुछ मिलेगा, इसलिए मैं आपके उत्तर को स्वीकार कर रहा हूं। धन्यवाद!
क्रिस्टोफर मोनसैंटो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.