यह चुनौती निम्नलिखित समस्या को हल करने के लिए कोड लिखने के बारे में है।
दो तार ए और बी को देखते हुए, आपके कोड को निम्नलिखित गुणों के साथ ए के विकल्प के प्रारंभ और अंत सूचक का उत्पादन करना चाहिए।
- A के विकल्प में B के कुछ विकल्प से भी मेल खाना चाहिए।
- ए का कोई विकल्प नहीं होना चाहिए जो पहली संपत्ति को संतुष्ट करता है।
उदाहरण के लिए:
A = xxxappleyyyyyyy
B = zapplezzz
सबस्ट्रिंग apple
सूचकांक के साथ 4 8
(1 से का अनुक्रमण) एक वैध उत्पादन होगा।
कार्यक्षमता
आप मान सकते हैं कि इनपुट स्थानीय निर्देशिका में एक फ़ाइल में मानक पर या आपकी पसंद का होगा। फ़ाइल प्रारूप बस दो तार होगा, एक नई लाइन द्वारा अलग किया जाएगा। जवाब एक पूर्ण कार्यक्रम होना चाहिए न कि केवल एक फ़ंक्शन।
मैं अंततः http://hgdownload.cse.ucsc.edu/goldenPath/hg38/chromosomes/ में स्ट्रिंग्स से लिए गए दो सब्सट्रिंग्स पर आपके कोड का परीक्षण करना चाहूंगा ।
स्कोर
यह एक मोड़ के साथ कोड-गोल्फ है। आपका कोड O(n)
समय पर चलना चाहिए , जहां n
इनपुट की कुल लंबाई है।
भाषा और पुस्तकालय
आप किसी भी भाषा का उपयोग कर सकते हैं जिसमें एक स्वतंत्र रूप से उपलब्ध संकलक / दुभाषिया / आदि है। लिनक्स के लिए। आपको केवल इस कार्य को हल करने के लिए डिज़ाइन नहीं किए गए मानक ओपन सोर्स लाइब्रेरीज़ का उपयोग करना चाहिए। विवाद के मामले में, मैं इसे किसी भी पुस्तकालय के रूप में गिना जाऊंगा, जो या तो आपकी भाषा के साथ मानक के रूप में आता है या एक जिसे आप डिफ़ॉल्ट रिपॉजिटरी से एक डिफ़ॉल्ट ubuntu मशीन में स्थापित कर सकते हैं।
उपयोगी जानकारी
रैखिक समय में इस समस्या को हल करने के लिए कम से कम दो तरीके हैं। एक पहले प्रत्यय पेड़ की गणना करना है और दूसरा पहला प्रत्यय सरणी और LCP सरणी की गणना करना है।
- यहाँ एक पूर्ण और (शायद अधिक-) रैखिक समय प्रत्यय वृक्ष निर्माण की विस्तृत व्याख्या है (यह कुछ आंकड़ों को दुर्भाग्य से गड़बड़ कर दिया गया है)। Https://stackoverflow.com/questions/9452701/ukkonens-suffix-tree-algorithm-in-plain-english पर रैखिक समय प्रत्यय वृक्ष निर्माण के बारे में बहुत अच्छा SO उत्तर है । इसमें सोर्स कोड का लिंक भी शामिल है। एक और विस्तृत विवरण यहां पाया जा सकता है , इस बार सी में पूर्ण समाधान दे रहा है।
- Http://www.cs.cmu.edu/~guyb/realworld/papersS04/KaSa03.pdf का खंड 2 एक रैखिक समय प्रत्यय सरणी निर्माण एल्गोरिथ्म देता है और परिशिष्ट A में C ++ स्रोत कोड है। यह उत्तर बताता है कि फिर आप सबसे लंबे समय तक सामान्य विकल्प की गणना कैसे करें https://cs.stackexchange.com/questions/9555/computing-the-longest-common-substring-of-two-strings-use-suffix-arrays । Https://courses.csail.mit.edu/6.851/spring12/scribe/lec16.pdf की धारा 5 जिसमें एक संबद्ध वीडियो व्याख्यान भी है https://courses.csail.mit.edu/6/851/spring12/lectures/L16 .html भी उसी एल्गोरिथम को 1:16:00 से शुरू करता है।
O(n) time
क्या आप सुनिश्चित हैं कि यह संभव है?