फाइबोनैचि शब्द


11

मैं अपने पुराने चेक एल्गोरिथ्म पाठ्यपुस्तक में निम्नलिखित समस्या के साथ आया, दुख की बात है कि कोई संकेत या समाधान नहीं आया।

"हम फिबोनाची शब्दों को , , रूप में परिभाषित करते हैं , जहां और सामान्य अक्षर हैं। कैसे दिए गए। स्ट्रिंग (संभावित रूप से बड़े वर्णमाला के ऊपर) क्या आप रैखिक समय में सबसे लंबे फाइबोनैचि उप-शब्द पा सकते हैं? "F0=aF1=bFn+2=FnFn+1ab

मैं द्विघात समय में एक समाधान जानता हूं, लेकिन इसे रैखिक में कम नहीं कर सकता। क्या कोई मुझे सही दिशा की ओर इशारा कर सकता है?


3
इस पुराने चेक एल्गोरिथ्म का नाम क्या है ;-)
सईद

क्या इस पुस्तक में उप-शब्दों को सन्निहित (अर्थात कारक) होना आवश्यक है?
क्लॉस ड्रेगर

जवाबों:


12

जाने का स्पष्ट तरीका गतिशील प्रोग्रामिंग है: उन दो अक्षरों को संग्रहित करें, जिनके लिए का एक फिबोनाची शब्द स्थिति से शुरू होता है , और और गणना करता है। । इसमें समय सबसे अधिक लगता है, क्योंकि केवल लॉगरिदमिक रूप से कई संभावित मान हैं ।F(i,j)ijF(i2,j)F(i1,j+fib(i))O(nlogn)i

लेकिन मुझे संदेह है कि केवल पद हो सकते हैं, जिसके लिए नॉनमेप्टिक है (अर्थात जब एक ही लंबाई के दो फाइबोनैचि शब्द मौजूद हों तो वे केवल हो सकते हैं) उनकी लंबाई के बजाय उनकी लंबाई के निरंतर अंश तक ओवरलैप)। गैर-रिक्त स्थान केवल वे हैं जिनके लिए आपको लिए (निरंतर समय) गणना करने की आवश्यकता है । तो अगर मेरे संदेह सच है तो आप इसे करने के लिए तेजी लाने सकता के प्रत्येक मान के लिए अरिक्त पदों की एक सूची का ट्रैक रखने से और के लिए सूची का उपयोग कर के लिए सूची की गणना तेजी लाने के लिए ।O(n/fib(i))F(i2,j)F(i2,j)F(i,j)O(n)ii2i

यदि आप को किसी ऐरे स्टोर में रखते हैं तो स्पीडअप के बाद भी स्पेस लेकिन इसके बजाय हैशटेबल का उपयोग करके इसे बेहतर बनाया जा सकता है। या वैकल्पिक रूप से आप को -bit शब्दों के साथ एक बिट-पैक वाले सरणी में स्टोर कर सकते हैं (अवलोकन का उपयोग करके जिसे आपको केवल यह जानना है कि क्या यह खाली है या नहीं; आप प्रत्येक विकल्प के लिए दो वर्णों को ढूंढकर देख सकते हैं; इनपुट स्ट्रिंग में इसके पहले दो पदों पर)।FO(nlogn)FO(n) logn


क्या आप मुझे बता सकते हैं, आपने क्यों सोचा कि गतिशील प्रोग्रामिंग इस समस्या के लिए सबसे अच्छा विकल्प होगा? यदि हम सी जैसी किसी भी स्थिर प्रोग्रामिंग का उपयोग करते हैं तो हमें समस्या का सामना करना पड़ेगा ?
गोस्वामी

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