Palavras de Fibonacci

11

Me deparei com o seguinte problema no meu antigo livro didático de algoritmo tcheco, que infelizmente não apresentava dicas ou soluções.

"Definimos palavras de Fibonacci como , F 1 = b , F n + 2 = F n F n + 1 , onde a e b são letras gerais. Como em uma determinada string (sobre um alfabeto potencialmente grande) você pode encontrar a sub-palavra mais longa de Fibonacci no tempo linear? "F0=aF1=bFn+2=FnFn+1ab

Conheço uma solução em tempo quadrático, mas não posso reduzi-la a linear. Alguém pode me indicar a direção certa?

Fanda
fonte
3
Qual é o nome desse velho algoritmo livro Checa ;-)
Saeed
As subpalavras devem ser contíguas (isto é, fatores) neste livro?
Klaus Draeger

Respostas:

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
fonte
Você pode me dizer por que pensou que a programação dinâmica seria a melhor escolha para esse problema? Onde enfrentaremos problemas se usarmos alguma programação estática como C ?
tarit goswami
1
A programação dinâmica é uma técnica de design de algoritmo, não uma classe de linguagens de programação.
David Eppstein