एक स्ट्रिंग में सबसे लंबे समय तक दोहराया (बिखरे हुए) परिणाम


26

अनौपचारिक समस्या कथन:

एक स्ट्रिंग को देखते हुए, उदाहरण के लिए, ACCABBAB , हम कुछ अक्षरों को लाल और कुछ अक्षरों को नीला (और कुछ को बिल्कुल नहीं) रंगना चाहते हैं, जैसे कि बाएं से दाएं केवल लाल अक्षरों को पढ़ने से पढ़ने के समान परिणाम मिलते हैं। केवल नीले अक्षर।

उदाहरण में हम उन्हें इस तरह से रंग सकते हैं: ACCABBAB

इसलिए, हम कहते हैं कि A C C A B B A B कीCAB एक दोहराया जाने वाली प्रक्रिया है । यह सबसे लंबे समय तक दोहराए जाने वाला परिणाम है (जो जांचना आसान है)।ACCABBAB

क्या हम कुशलता से सबसे लंबे समय तक दोहराया अनुवर्ती गणना कर सकते हैं?

औपचारिक प्रश्न:

क्या एक स्ट्रिंग और कुछ लिए निर्णय लेना कठिन है k, क्या लंबाई की बार-बार आवश्यकता kस्ट्रिंग में मौजूद है?

  • यदि हां: तो इस समस्या को किस समस्या में कम किया जा सकता है?
  • यदि नहीं: क्या एक कुशल एल्गोरिथ्म है? (स्पष्ट रूप से, इस एल्गोरिथ्म का उपयोग सबसे लंबे समय तक दोहराए जाने वाले कंप्यूटर की गणना करने के लिए किया जा सकता है)

बोनस प्रश्न:

क्या उनकी हमेशा लंबाई की दोहराई जाने वाली अनुवर्तीता होगी n/2o(n)यदि वर्णमाला का आकार एक स्थिरांक से घिरा होता है?

(यह द्विआधारी अक्षर के लिए सच माना जाता है।)

संपादन 2: बोनस प्रश्न का नकारात्मक उत्तर पहले से ही कम से कम आकार के अक्षर के लिए जाना जाता है । आकार के अक्षर के लिए वास्तव में , वहाँ केवल की लंबाई की सबसे लंबी दोहराया subsequences के साथ तार कर रहे हैं । इसे दिखाने के लिए रैंडम स्ट्रिंग्स पर्याप्त हैं। परिणाम पहले से ही मौजूद था, लेकिन मैंने इसे अनदेखा कर दिया।5ΣO(n·Σ1/2)

संपादित करें: नोट:

कुछ लोगों का अर्थ है "प्रतिस्थापन" जब वे कहते हैं "बाद में"। मैं नही। यह दो बार एक substrings खोजने की समस्या नहीं है।


सेक्ती, धन्यवाद। आप सही हैं: मेरी पहली टिप्पणी गलत थी; मैंने अब इसे हटा दिया है। दूसरी ओर, मेरी शेष टिप्पणी है गैर-निरंतर subsequences बारे में बात कर। यदि को ठीक किया जाता है, तो समय या इतने पर आपकी समस्या को हल करने का एक तरीका है (गैर-सन्निहित बाद में, गैर-अतिव्यापी होना अनिवार्य है । प्रत्येक डीपी उपप्रोजेम लाल अक्षरों के सभी और अब तक चुने गए सभी नीले अक्षरों के सूचकांकों का ट्रैक रखता है। यह शायद निर्बाध है, क्योंकि यह हमें नहीं बताता कि क्या होता है जब इनपुट का हिस्सा होता है। kO(n2k+2)k
DW

@ डीडब्ल्यू औपचारिक प्रश्न का उत्तर लंबे समय तक सामान्य के इस संशोधन के साथ कुशलतापूर्वक क्यों नहीं दिया जा सकता है ? शायद मुझे कुछ याद आ रहा है और कोई मेरे लिए स्पष्ट कर सकता है।
ब्रायस किल

@BryceKille, मुझे नहीं पता; शायद यह हो सकता है। यदि आपको पता है कि यह कैसे करना है तो मुझे आशा है कि आप एक उत्तर लिखेंगे!
डीडब्ल्यू

जवाबों:


-2

इसमें हल किया जा सकता है बहुपदी समय फलनएक ग्राफ निर्माण करके जहां प्रत्येक नोड कुछ दोहराया बाद में एक बिंदु का प्रतिनिधित्व करता है जैसे कि । नोड्स और बीच के किनारे का अर्थ है कि को द्वारा लंबाई 2 के दोहराए जाने के बाद जारी रखा जा सकता है ।G(i,j)SS[i]=S[j]uvuv

1. नोड्स का पता लगाएं। यह प्रत्येक वर्ण लिए सूचकांकों की क्रमबद्ध सूची का निर्माण करके समय में किया जा सकता है , और फिर अद्वितीय युग्मों की गणना की जा सकती है। नोड्स से अधिक नहीं हैं।O(n2)cm=n2

2. किनारों का पता लगाएं। यह जांचने के लिए समय लगता है कि क्या नोड को नोड द्वारा जारी रखा जा सकता है , इसलिए सभी जोड़े पर विचार करके यह चरण समय लेता है ।O(1)uv(u,v)O(m2)

3. ध्यान दें कि में सबसे लंबा रास्ता वैध दोहराया अनुवर्ती नहीं हो सकता है। पथ और पर विचार करें । वहाँ मौजूद है, तो एक बढ़त तो लंबाई 3. इसलिए का एक मान्य दोहराया परिणाम को यह लेता है समय सामान्य स्थिति में लंबाई 3. के सभी दोहराया subsequences को खोजने के लिए यह है कि क्या दो वैध पथ की जाँच करने के रैखिक समय लगता है लंबाई को लंबाई मान्य पथ में जोड़ा जा सकता है ।GabbcacabcO(m4)nn+1

4. जब तक कोई रास्ता नहीं मिल जाता है, तब तक चरण 3 को मिटा दें।


हम्म। कुछ ज्यादा जल्दी। चरण 3 में विचार करने के लिए बाद की संख्या बड़ी और बड़ी हो जाती है। तो यह बहुपद नहीं है।
नोपलॉजिस्ट

1
CS.SE में आपका स्वागत है, और इस समस्या को हल करने के लिए धन्यवाद! मुझे डर है कि मुझे आपके एल्गोरिथ्म की समझ नहीं है। चरण 3 क्या है? सभी मैं "3." में देखता हूं कुछ घोषणात्मक कथन / अवलोकन हैं, लेकिन मुझे एल्गोरिथ्म क्या करना है, इसका एक प्रक्रियात्मक विनिर्देश नहीं दिखता है। इसके अलावा, मैं यह नहीं देखता कि चरण 3 को पुनरावृत्त करने का क्या मतलब है, या आपके दावे के लिए तर्क है कि पर्याप्त है। आपकी बाद की टिप्पणी यह ​​ध्वनि देती है जैसे आप मानते हैं कि आपका उत्तर सही नहीं है। यदि हां, तो भ्रम से बचने के लिए उत्तर को हटाना बेहतर हो सकता है। O(nnm2)
डीडब्ल्यू

यदि आप बाद में उत्तर का पता लगाते हैं, तो आप हमेशा एक उत्तर दे सकते हैं या एक नया उत्तर पोस्ट कर सकते हैं।
डीडब्ल्यू

DW, धन्यवाद। चरण 3 पर इनपुट लंबाई n के सभी दोहराए जाने वाले परिणाम हैं, और आउटपुट सभी लंबाई n + 1 के बाद के दोहराए गए हैं। मेरा मानना ​​है कि एल्गोरिथ्म सही है लेकिन यह एक बहुपद समय एल्गोरिथ्म नहीं है। मैंने अब उन दावों को चिह्नित किया है जिन्हें मैं गलत मानता हूं।
noplogist

धन्यवाद। मै समझता हुँ। दुर्भाग्य से, उन संशोधनों के साथ, मुझे डर है कि यह उत्तर उस प्रश्न का उत्तर नहीं देता है जो पूछा गया था। सवाल था: क्या यह एनपी-हार्ड है? क्या एक कुशल एल्गोरिदम है? यह दिखाते हुए कि एक घातांक-समय एल्गोरिथ्म मौजूद है, उन सवालों के जवाब देने में मदद नहीं करता है। वास्तव में, यह देखने के लिए पहले से ही तुच्छ है कि किसी भी फैंसी तकनीकों को लागू किए बिना समस्या के लिए एक घातीय-समय एल्गोरिथ्म है। मैं आपके प्रयास की सराहना करता हूं।
DW
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.