2010-03-10 32 views
8

में सामान्य सबस्ट्रिंग खोजने के लिए एल्गोरिदम मैं 2 तारों के लिए एलसीएस एल्गोरिदम से परिचित हूं। 2. स्ट्रिंग्स में सामान्य सबस्ट्रिंग खोजने के लिए सुझाव ढूंढ रहे हैं। प्रत्येक जोड़ी में कई सामान्य सबस्ट्रिंग हो सकते हैं। तारों के सबसेट में अलग-अलग सामान्य सबस्ट्रिंग हो सकते हैं।एन स्ट्रिंग्स

तार: (ABCDEFGHIJKL) (DEF) (ABCDEF) (BIJKL) (FGH)

आम तार:

1/2 (DEF) 
1/3 (ABCDEF) 
1/4 (IJKL) 
1/5 (FGH) 
2/3 (DEF) 

सबसे लंबे समय तक आम तार:

1/3 (ABCDEF) 

सबसे आम तार:

1/2/3 (DEF) 
+0

क्या यह एक एसीएम प्रतियोगिता समस्या है जिसके लिए कुछ प्रदर्शन के साथ एल्गोरिदम की आवश्यकता होती है? – Roman

+1

क्या सबस्ट्रिंग 'एफ' सबसे आम नहीं होगा, क्योंकि यह चार तारों में दिखाई देता है? – interjay

+0

हमें यह बताने का एक अच्छा विचार होगा कि आपको इसकी आवश्यकता क्यों है, इसलिए हम समझ सकते हैं कि हम कहां समझौता कर सकते हैं और कहां नहीं। –

उत्तर

6

इस सोर डीएनए अनुक्रम विश्लेषण में हर समय चीज की जाती है। आप इसके लिए विभिन्न एल्गोरिदम पा सकते हैं। एक उचित संग्रह here सूचीबद्ध है। प्रत्येक में एक एन-ary पेड़ फार्म (N = 26 अक्षर के लिए, ASCII के लिए 256):

वहाँ भी हर सबस्ट्रिंग का बना तालिकाओं के जानवर बल पहुंच दी गई है (यदि आप केवल छोटे लोगों में रुचि रखते हैं) स्तर, और प्रत्येक नोड पर गिनती के स्टोर हिस्टोग्राम। यदि आप छोटे-छोटे नोड्स (मेमोरी आवश्यकताओं को उचित रखने के लिए) को छीनते हैं, तो आप एक एल्गोरिदम के साथ समाप्त होते हैं जो लंबाई के इनपुट के लिए एन * एम^2 * लॉग (एम) समय जैसे एम में लम्बाई के सभी बाद के मापनों को पाता है। एन। यदि आप इसे अलग-अलग तारों में विभाजित करते हैं, तो आप पेड़ की संरचना का निर्माण कर सकते हैं और पेड़ के माध्यम से एक ही पास में जवाब (उत्तर) को पढ़ सकते हैं।

+4

यह काफी कहने के लिए आया था, कि यह हर समय गणना जीवविज्ञान में प्रयोग किया जाता है। हालांकि, "substring/afterence" की परिभाषा अक्सर संदिग्ध होती है (जानबूझकर गैर-एल्गोरिदमिस्ट के लिए) और मुझे लगता है कि इस मामले में, उनकी समस्या के लिए उन्हें संगत होने की आवश्यकता है। – Larry

1

सफ़िक्स पेड़ उत्तर हैं जब तक कि आपके पास वास्तव में बड़े स्ट्रिंग नहीं होते हैं जहां स्मृति एक समस्या बन जाती है। एक अच्छा कार्यान्वयन के लिए स्ट्रिंग में प्रति चरित्र स्मृति उपयोग के 10 ~ 30 बाइट की अपेक्षा करें। कुछ खुले स्रोत कार्यान्वयन भी हैं, जो आपके काम को आसान बनाते हैं।

अन्य, अधिक succint एल्गोरिदम भी हैं, लेकिन वे लागू करने के लिए कठिन हैं ("संपीड़ित प्रत्यय पेड़" के लिए देखो)।

संबंधित मुद्दे