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?


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(i−2,j)F(i−1,j+fib⁡(i))O(nlog⁡n)i.

O(n/fib⁡(i))F(i−2,j)F(i−2,j)F(i,j)O(n)ii−2i

FO(nlog⁡n)FO(n) log⁡n


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.