Dados dos símbolos y , definamos la -ésima cadena de Fibonacci de la siguiente manera:b k
con denotando concatenación de cadenas.
Así tendremos:
- ...
Dada una cadena formada por n símbolos, definimos una subcadena de Fibonacci como cualquier subcadena de S que también es una cadena de Fibonacci para una elección adecuada de a y b .
El problema
Dado , queremos encontrar su subcadena de Fibonacci más larga.
Un algoritmo trivial
Para cada posición de la cadena S , suponga que F ( 2 ) comienza allí (es suficiente para verificar que los símbolos i -th e ( i + 1 ) -th son distintos). Si ese es el caso, verifique si se puede extender a F ( 3 ) , luego a F ( 4 ) , y así sucesivamente. Después de eso, comience nuevamente desde la posición i + 1 . Repita hasta llegar a la posición n .
Debemos mirar cada símbolo al menos una vez, por lo que es . Solo hay dos para los bucles involucrados, por lo que además podemos decir que es O ( n 2 ) .
Sin embargo (como era de esperar), este ingenuo algoritmo funciona mucho mejor que los algoritmos cuadráticos habituales (si hace mucho trabajo en la posición -ésima, no hará mucho trabajo en las siguientes posiciones).
¿Cómo puedo usar las propiedades de Fibonacci para encontrar límites más ajustados para el tiempo de ejecución de este algoritmo?