क्या सभी सामान्य पदार्थों को खोजने के लिए Suffix के पेड़ों का उपयोग किया जा सकता है?


10

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


यह एक दिलचस्प सवाल है। समस्या यह है कि अगर हमारे पास है और हमने पाया है कि बीटा wrt LCS है टी , हम नहीं आसानी से "निकालें" कर सकते हैं बीटा प्रत्यय पेड़ से (या प्रत्यय सरणी, जो कुछ भी)। हम की तरह कुछ करना चाहते हैं एस ' = α $ γ पहला कदम के बाद, है ना? S=αβγβTβS=α$γ
दिमित्रो कोर्डुबन

जवाबों:


3

हां, सभी सामान्य पदार्थों को खोजने के लिए प्रत्यय के पेड़ों का उपयोग किया जा सकता है। मैं इसके बजाय एक प्रत्यय सरणी का उपयोग करने के लिए कहूंगा, लेकिन यदि आपके पास पहले से ही एक प्रत्यय का पेड़ है, तो प्रत्यय के पेड़ से एक प्रत्यय सरणी का निर्माण डीएफएस द्वारा रैखिक समय लेता है। तो मेरे बाकी जवाब मान लेंगे कि हम एक प्रत्यय सरणी के साथ काम कर रहे हैं।

एक पाठ , S के लिए एक प्रत्यय सरणी, रेंज 0 के एन के पूर्णांक का एक सरणी है , जो स्ट्रिंग S $ के n + 1 प्रत्यय के शाब्दिक क्रम को निर्दिष्ट करता है।S=s1,...,snS0nn+1S

हम जोड़ी के साथ प्रत्यय सरणी चाहते , सबसे लंबे समय तक आम उपसर्गों। हम की सरणी का निर्माण कर सकते एल सी पी एस के रूप में उल्लेख रैखिक समय में Kasai एट अल द्वारा अखबार में । प्रत्यय सरणियों और उनके LCP सरणियों एक साथ लाइन अप एक तरीका है कि LCP सरणी कहते हैं में एक सूचकांक दी में एल सी पी [ कश्मीर ] जहां कश्मीर इंडेक्स नंबर होता है, तो है एक [ कश्मीर ] आम का एक उदाहरण के शुरू हो जाएगा सबस्ट्रिंग और एस एक [ कश्मीर - 1 ]LCPsLCPslcp[k]ksa[k]sa[k1]दूसरे उदाहरण का प्रारंभ सूचकांक होगा। लंबाई निश्चित रूप से lcp सरणी में मान है।


3

मेरे पास एक विचार है जो काम कर सकता है। हम अनुक्रम और टी के लिए एक सामान्यीकृत प्रत्यय पेड़ से शुरू करते हैं । इसके उपरी भाग में S और T दोनों के प्रत्ययों के साथ प्रत्येक आंतरिक नोड अनुक्रम के कुछ सामान्य विकल्प से मेल खाता है। आइए हम ऐसे नोड्स को गैर-तुच्छ कहते हैं। सामान्य विकल्प अधिकतम है, यदि संबंधित नोड में कोई गैर-तुच्छ बच्चे नहीं हैं। यदि नोड v गैर-तुच्छ है, तो हम उसके उप-भाग में l c s ( v ) के रूप में एक गैर-तुच्छ नोड की सबसे बड़ी स्ट्रिंग-गहराई संग्रहीत करते हैं । यदि r रूट है, तो l c s ( r )STSTvlcs(v)rlcs(r) और टी के सबसे लंबे आम सबस्ट्रिंग की लंबाई है ।ST

अनुक्रम में से एक से एक विकल्प को हटाने के बाद पेड़ को अद्यतन करना बहुत कठिन नहीं होना चाहिए। हम पहले हटाए गए प्रत्ययों के अनुरूप पत्तियों को हटाते हैं, जब आवश्यक हो तो अपने पूर्वजों को अपडेट करते हैं। फिर हम हटाए गए सबस्ट्रिंग से पहले प्रत्ययों को संसाधित करना शुरू करते हैं। चलो वर्तमान पत्ती के निम्नतम गैर तुच्छ पूर्वज हो। यदि प्रत्यय की लंबाई k है (हम विलोपन से k कदम हैं ) और k < l c s ( v ) , हमें प्रत्यय को पेड़ में उसकी उचित स्थिति में ले जाना होगा, आवश्यकता पड़ने पर पूर्वजों को अद्यतन करना। अगर कश्मीर एल सी एस ( v )vkkk<lcs(v)klcs(v), हम किया जाता है, के रूप में हम तुच्छ जड़ों के साथ उपशीर्षक में कोई दिलचस्पी नहीं है।

समग्र एल्गोरिथ्म बार-बार और टी के सबसे लंबे सामान्य विकल्प को ढूंढता है और दोनों अनुक्रमों से इसकी घटनाओं को हटाता है, जब तक कि एलसीएस की लंबाई काफी बड़ी हो जाती है।ST

कुछ तकनीकी हैं, लेकिन सामान्य विचार से काम करना चाहिए।


0

संक्षिप्त पाठ S $ T से शुरू करें , जहां $ * या T में कहीं भी नहीं होता है । इस पाठ से एक प्रत्यय वृक्ष / सरणी का निर्माण करें। अब इस प्रत्यय डेटा संरचना को पार करना आसान है ताकि सभी सही अधिकतम दोहराए जा सकें। बाएं संदर्भ की जांच करके, गैर-बाएँ अधिकतम दोहराता फ़िल्टर करें। यह बाईं ओर की फ़िल्टरिंग बुर्ज-व्हीलर टेबल का उपयोग करते हुए लागू की जा सकती है जैसा कि अबूल्होदा एट अल में है, हालांकि मुझे विश्वास नहीं है कि यह आवश्यक है। केवल S या केवल T में दोहराता हैक्या इस बिंदु पर ओलसो को समाप्त कर दिया जाना चाहिए। जिन रिपीट को समाप्त नहीं किया गया है, उन्हें प्राथमिकता कतार में रखा जाता है, जिसमें लंबाई द्वारा प्राथमिकता दी जाती है। ट्रैवर्सल के बाद, जैसा कि रिकॉर्ड किए गए दोहराव को प्राथमिकता से हटा दिया जाता है, अंतिम फ़िल्टरिंग (प्रतिस्थापन के लिए) को बाहर किया जा सकता है। हालांकि, अधिकतम वाक्यांशों के उपयोग को देखते हुए, मुझे संदेह है कि इस फ़िल्टरिंग में से बहुत कम आवश्यक होगा।

यह एल्गोरिथम मेरा अपना आविष्कार है। मैं इसे बहुत चालाक के रूप में वर्गीकृत नहीं करूंगा, लेकिन इसे काम करना चाहिए।


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