जाने का स्पष्ट तरीका गतिशील प्रोग्रामिंग है: उन दो अक्षरों को संग्रहित करें, जिनके लिए का एक फिबोनाची शब्द स्थिति से शुरू होता है , और और गणना करता है। । इसमें समय सबसे अधिक लगता है, क्योंकि केवल लॉगरिदमिक रूप से कई संभावित मान हैं ।F(i,j)ijF(i−2,j)F(i−1,j+fib(i))O(nlogn)i
लेकिन मुझे संदेह है कि केवल पद हो सकते हैं, जिसके लिए नॉनमेप्टिक है (अर्थात जब एक ही लंबाई के दो फाइबोनैचि शब्द मौजूद हों तो वे केवल हो सकते हैं) उनकी लंबाई के बजाय उनकी लंबाई के निरंतर अंश तक ओवरलैप)। गैर-रिक्त स्थान केवल वे हैं जिनके लिए आपको लिए (निरंतर समय) गणना करने की आवश्यकता है । तो अगर मेरे संदेह सच है तो आप इसे करने के लिए तेजी लाने सकता के प्रत्येक मान के लिए अरिक्त पदों की एक सूची का ट्रैक रखने से और के लिए सूची का उपयोग कर के लिए सूची की गणना तेजी लाने के लिए ।O(n/fib(i))F(i−2,j)F(i−2,j)F(i,j)O(n)ii−2i
यदि आप को किसी ऐरे स्टोर में रखते हैं तो स्पीडअप के बाद भी स्पेस लेकिन इसके बजाय हैशटेबल का उपयोग करके इसे बेहतर बनाया जा सकता है। या वैकल्पिक रूप से आप को -bit शब्दों के साथ एक बिट-पैक वाले सरणी में स्टोर कर सकते हैं (अवलोकन का उपयोग करके जिसे आपको केवल यह जानना है कि क्या यह खाली है या नहीं; आप प्रत्येक विकल्प के लिए दो वर्णों को ढूंढकर देख सकते हैं; इनपुट स्ट्रिंग में इसके पहले दो पदों पर)।FO(nlogn)FO(n) logn