给定两个符号和b,我们如下定义第k个斐波那契字符串:
与表示字符串连接。
因此,我们将拥有:
- ...
给定由n个符号形成的字符串,我们将Fibonacci子字符串定义为S的任何子字符串,对于a和b的适当选择,它也是Fibonacci字符串。
问题
给定,我们想找到其最长的斐波那契子串。
一个简单的算法
对于字符串S的每个位置,假设F (2 )从此处开始(检查第i个和第(i + 1 )个符号是否足够就足够了)。如果是这样,请检查它是否可以扩展为F (3 ),然后扩展为F (4 ),依此类推。在此之后,从位置重新开始我+ 1。重复直到到达位置n。
我们必须至少一次查看每个符号,所以它是。仅涉及两个for循环,因此我们可以说它是O (n 2)。
但是,(很奇怪的是)这种天真的算法比通常的二次算法要好得多(如果它在第个位置上做很多工作,那么在下一个位置上就不会做很多工作)。
如何使用斐波那契属性为该算法的执行时间找到更严格的界限?