Palabras de Fibonacci

11

Me encontré con el siguiente problema en mi antiguo libro de texto de algoritmo checo, lamentablemente no tuve pistas ni solución.

"Definimos las palabras de Fibonacci como , F 1 = b , F n + 2 = F n F n + 1 , donde a y b son letras generales. Cómo en una cadena dada (sobre un alfabeto potencialmente grande) puede encuentra la sub-palabra de Fibonacci más larga en tiempo lineal? "F0=aF1=bFn+2=FnFn+1ab

Conozco una solución en tiempo cuadrático, pero no puedo reducirla a lineal. ¿Alguien puede señalarme en la dirección correcta?

Fanda
fuente
3
¿Cuál es el nombre de este antiguo libro de texto de algoritmo checo ;-)
Saeed
¿Se requiere que las subpalabras sean contiguas (es decir, factores) en este libro?
Klaus Draeger

Respuestas:

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

FO(nlogn)FO(n) logn

David Eppstein
fuente
¿Puede decirme por qué pensó que la programación dinámica sería la mejor opción para este problema? ¿Dónde enfrentaremos problemas si usamos alguna programación estática como C ?
tarit goswami
1
La programación dinámica es una técnica de diseño de algoritmos, no una clase de lenguajes de programación.
David Eppstein