एक स्ट्रिंग में सबसे लंबे समय तक दोहराया पैटर्न का पता लगाएं


9

मैं एक स्ट्रिंग में सबसे लंबे समय तक दोहराया पैटर्न को खोजने के लिए एक कुशल एल्गोरिथ्म की तलाश कर रहा हूं।

उदाहरण के लिए, निम्नलिखित संख्याओं पर विचार करें:

5431428571428571428571428571427623874534

जैसा कि आप देख सकते हैं, 142857142857सबसे लंबा पैटर्न है जो इस स्ट्रिंग में कुछ समय (कम से कम दो बार) के लिए दोहराया जाता है।

बार-बार होने वाले स्ट्रिंग में किसी भी विचार को जानवर-बल के बजाय फिर से नहीं होना चाहिए?


3
आपने परिभाषित नहीं किया कि "एक दो बार" का क्या मतलब है, लेकिन अगर "दो बार" को "एक दो बार" के रूप में गिना जाता है, तो 142857यह सबसे लंबा नहीं है क्योंकि 142857142857यह लंबा है। मुझे लगता है कि आपको "दोहराए गए पैटर्न" से क्या मतलब है यह स्पष्ट करने के लिए प्रश्न को संपादित करना चाहिए।
अक्टूबर को त्सुयोशी इतो

बहुत अच्छी बात है। मैं सवाल अपडेट करूंगा।

8
क्या आपको पैटर्न के घटने की आवश्यकता है एक दूसरे से असहमति की? क्योंकि यदि नहीं, तो 142857142857 अभी भी सबसे लंबी पुनरावृत्ति नहीं है; 142857142857142857142 दो बार होता है। किसी भी मामले में, इस तरह के सवालों का सामान्य जवाब "प्रत्यय पेड़" है।

जवाबों:


15

समस्या आश्चर्यजनक रूप से गैर-तुच्छ है। सबसे पहले, दो जानवर बल एल्गोरिदम। एक वर्ग ("दोहराया पैटर्न") इसकी लंबाई द्वारा दिया गया है और स्थिति पी, और समय लगता है हे()जांचना। अगर हम सब खत्म हो जाएं तथा पी, हम एक प्राप्त करते हैं हे(n3)कलन विधि। हम पहले लूपिंग ओवर करके उस पर सुधार कर सकते हैं, और फिर कुछ दूरी पर दो रनिंग पॉइंटर्स के साथ स्ट्रिंग को स्कैन करना । इस तरह, कोई सत्यापित कर सकता है कि लंबाई का एक वर्ग2 रैखिक समय में मौजूद है, कुल चलने का समय देता है हे(n2)

कोलपकोव और कुचेरोव ने समय में एक शब्द में सभी अधिकतम दोहराता खोजने के लिए एक एल्गोरिदम विकसित कियाहे(n) [१], और उनके एल्गोरिथ्म का उपयोग समय में सभी अधिकतम वर्गों को खोजने के लिए किया जा सकता है हे(n)। एक पुनरावृत्ति फॉर्म का एक सबवॉर्ड हैwएक्स, कहाँ पे 2 तथा एक्स का एक उचित उपसर्ग है w। उस दोहराव में निहित सबसे बड़ा वर्ग है(w/2)2। इस फार्मूले का उपयोग करते हुए, एक शब्द में सभी अधिकतम दोहराता है (जिनमें से केवल वहीं हैंहे(n) कई), सबसे बड़ा वर्ग पा सकते हैं।


[१] कोलपाकोव, आर।, और कुचेरोव, जी। (१ ९९९)। रैखिक समय में एक शब्द में अधिकतम दोहराव ढूँढना । में कंप्यूटर विज्ञान, 1999 40 वीं वार्षिक संगोष्ठी की नींव (पीपी। 596-604)। आईईईई।

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