वाटसन-क्रिक पलिंड्रोम्स को पहचानने की अंतरिक्ष जटिलता


10

मुझे निम्नलिखित एल्गोरिथम समस्या है:

वॉटसन-क्रिक पलिंड्रोम्स जो डीएनए स्ट्रिंग्स को पहचानने की जटिलता को निर्धारित करते हैं।

वाटसन-क्रिक पैलिंड्रोम्स तार होते हैं जिनका उलटा पूरक मूल स्ट्रिंग है। पूरक परिभाषित किया गया है पत्र के लिहाज से, डीएनए से प्रेरित: एक टी के पूरक है और सी है ACGT एक WC-विलोमपद के लिए जी एक साधारण उदाहरण के पूरक है।

मैं इसे हल करने के दो तरीके लेकर आया हूं।

एक को स्थान की आवश्यकता है।O(n)

  • एक बार मशीन इनपुट पढ़ने के बाद किया जाता है। इनपुट टेप को कार्य टेप में रिवर्स ऑर्डर में कॉपी किया जाना चाहिए।
  • मशीन फिर बाईं ओर से इनपुट और कार्य टेप पढ़ेगी और कार्य टेप में सेल को सत्यापित करने के लिए प्रत्येक प्रविष्टि की तुलना इनपुट में सेल की प्रशंसा है। इसके लिए स्थान की आवश्यकता होती है।O(n)

दूसरे के लिए स्थान आवश्यक है।O(logn)

  • इनपुट पढ़ते हुए। इनपुट टेप पर प्रविष्टियों की संख्या की गणना करें।
  • जब इनपुट टेप रीडिंग किया जाता है
    • कार्य टेप पर पत्र के पूरक की प्रतिलिपि बनाएँ
    • अक्षर एल को काम टेप के अंत में कॉपी करें
  • (लूप पॉइंट) यदि काउंटर = 0, कार्यपत्रक को साफ़ करें और हां लिख दें, तो रुक जाएं
  • यदि इनपुट टेप एल पढ़ता है
    • काउंटर द्वारा इंगित समय की संख्या से इनपुट सिर को बाईं ओर ले जाएं (दूसरे काउंटर की आवश्यकता होती है)
  • यदि इनपुट टेप आर पढ़ता है
    • काउंटर द्वारा इंगित समय की संख्या से इनपुट सिर को दाईं ओर ले जाएं (दूसरे काउंटर की आवश्यकता होती है)
  • यदि कार्यपत्र पर मान रखने वाली सेल इनपुट टेप पर वर्तमान सेल से मेल खाती है
    • काउंटर को दो से घटाएं
    • आर या एल क्रमशः कार्यपत्रक पर निर्भर करता है, तो एक को बाईं या दाईं ओर ले जाएं
    • वर्तमान L या R के स्थान पर कार्यस्थान पर L या R के पूरक को कॉपी करें
    • लूप जारी रखें
  • यदि मान मेल नहीं खाते हैं, तो कार्यपत्रक को साफ़ करें और लिखें नहीं, तो रोकें

यह दोनों काउंटर, वर्तमान पूरक और मान L या R को संग्रहीत करने के लिए लगभग स्थान पर आता है ।2logn+2

मेरा मुद्दा

पहले वाले को रैखिक समय और स्थान दोनों की आवश्यकता होती है। दूसरे वाले को समय और स्थान की आवश्यकता होती है। मुझे उद्धरण से समस्या दी गई थी और मैं इन दोनों दृष्टिकोणों के साथ आया था, लेकिन मुझे नहीं पता कि किसके साथ जाना है। मुझे सिर्फ समस्या की जगह जटिलता देने की जरूरत है। लॉगएनn22logn

कारण मैं भ्रमित हूँ

मैं कहना चाहूंगा कि दूसरा सबसे अच्छा विकल्प है क्योंकि यह समय के लिहाज से बेहतर है, लेकिन यह जवाब केवल मेरे लिए भाग्यशाली है और एक एल्गोरिथ्म के साथ आ रहा है। ऐसा लगता है कि अगर मैं किसी चीज़ की जगह की जटिलता देना चाहता हूं, तो उसे सही एल्गोरिदम के साथ आने में भाग्य की आवश्यकता नहीं होगी। क्या मैं कुछ भूल रहा हूँ? क्या मुझे अंतरिक्ष की जटिलता का जवाब देने के लिए समस्या का समाधान भी करना चाहिए?


मुझे लगता है कि यदि आप एल्गोरिदम के लिए छद्म कोड देते हैं तो सवाल और भी बेहतर होगा। फ़ॉर्मेटिंग में मदद के लिए यहां देखें ।
राफेल

जवाबों:


8

डिस्क्लेमर : निम्न एल्गोरिथ्म सबलाइनर स्पेस कॉम्प्लेक्सिटी ( WP देखें : DSPACE ) के लिए मानक मॉडल का उपयोग नहीं करता है , क्योंकि यह इनपुट टेप को लिखता है। इसके अलावा (वाटसन-क्रिक) । फिर भी, यह कई व्यावहारिक उद्देश्यों (जैसे कि यदि प्रत्येक अक्षर C में है) के लिए एक जगह पर समाधान है ।DSPACE(O(1))=REGchar

यह दिखाने के लिए कि एक समस्या में एक विशिष्ट स्थान जटिलता है, आम तौर पर एक एल्गोरिथ्म के साथ आने की आवश्यकता होती है जिसमें उस स्थान की जटिलता होती है। इसके लिए परीक्षण और त्रुटि की आवश्यकता हो सकती है, लेकिन एक बेहतर तरीका यह है कि जिस समस्या को आप देख रहे हैं उसकी एक अच्छी समझ और एल्गोरिदम और जटिलता में अनुभव की एक अच्छी मात्रा है।

इस विशेष उदाहरण के लिए, एक तीसरा एल्गोरिथ्म है जिसे किसी अतिरिक्त स्थान की आवश्यकता नहीं है और इसके लिए समय जटिलता की आवश्यकता है। यह एल्गोरिथ्म निरंतर स्थान होगा।O(n2)

संकेत: अतिरिक्त स्थान का उपयोग क्यों करें, जब आप इनपुट के कब्जे वाले स्थान का उपयोग कर सकते हैं?

संकेत: एक समय में एक चरित्र की जाँच करने वाले स्ट्रिंग में आगे-पीछे ज़िप करें - ट्यूरिंग मशीन की स्थिति का उपयोग करके याद रखें कि आप किस चरित्र की जाँच कर रहे हैं और उन पात्रों को मिटा दें जिन्हें आपने पहले ही जाँच लिया है।


मेरा दूसरा एल्गोरिथ्म क्या करता है। एक स्ट्रिंग में आगे और पीछे जाने के लिए आपको काउंटरों की आवश्यकता होती है। एक लंबाई इनपुट के लिए आपको काउंटर स्टोर करने के लिए लॉग एन स्पेस की आवश्यकता होती है। जब तक मुझे गलतफहमी न हो, लेकिन ऐसा लगता है जैसे आप उस हिस्से पर नज़र रखे बिना स्ट्रिंग के आगे-पीछे नहीं जा सकते, जिसकी तुलना की गई है
justrr

3
आपको एक काउंटर स्टोर करने की आवश्यकता क्यों है?
डेव क्लार्क

यदि मैं इनपुट के अंत तक पहुँचता हूँ और यह 10 वर्ण लंबा है। मुझे 10 वर्णों को वापस जाने और इनपुट पर अंतिम वर्ण को बचाने की आवश्यकता है। एक बार जब मैं शुरुआत करता हूं तो मैं तुलना करता हूं और दूसरे चरित्र की नकल करता हूं और सही 7 बार घूमता हूं और सत्यापित करता हूं कि दूसरा चरित्र 9 वें से मेल खाता है। मुझे कैसे पता चलेगा कि यह 7 बार है जब तक मैं इसके साथ नहीं रहूं?
जस्ट 11r12

1
सिर केवल एक समय में टेप पर एक ही स्थान पर हो सकता है, लेकिन टीएम की स्थिति याद रख सकती है कि सिर ने क्या देखा है, और कोई अन्य पात्रों के साथ टेप को चिह्नित कर सकता है यह इंगित करने के लिए कि टेप के किन हिस्सों का दौरा किया गया है ( एल्गोरिथ्म के कुछ चरणों में)।
डेव क्लार्क

1
मैं नहीं देखता कि तुम्हारा क्या मतलब है। यदि आप इनपुट स्ट्रीम में (उसी चिह्न के साथ) वर्णों को मिटा या चिह्नित कर रहे हैं, तो आप आसानी से यह निर्धारित कर सकते हैं कि आपने इनपुट स्ट्रिंग को संसाधित करना समाप्त कर लिया है क्योंकि आप इनपुट स्ट्रिंग से बाहर निकलते हैं।
डेव क्लार्क

3

जिस तरह से सवाल पूछा जाता है, आपको एक ऊपरी सीमा के साथ आना चाहिए और अंतरिक्ष जटिलता पर एक कम बाध्य होना चाहिए ।

O(logn)

alb2lallω(1)O(logn)

cΓs(n)nΓs(n)Ω(logn)


ध्यान दें कि आपको अक्षरों के पूरक के बारे में ध्यान रखने की आवश्यकता नहीं है क्योंकि यह ऑपरेशन तुच्छ है, इसलिए साधारण palindromes के लिए काम करने वाली हर चीज को आपकी समस्या को हल करने के लिए कुछ और राज्यों के साथ संशोधित किया जा सकता है।


0

SΩ(n2/S)

Time×Space=Ω(n2).
TS=Θ(n2)TS=Θ(n2logn)Ω(logn)O(n2/logn)SΩ(n2/S)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.