Dati due simboli e B , definiamo il k -esimo stringa Fibonacci come segue:
con indica la concatenazione di stringhe.
Quindi avremo:
- ...
Data una stringa formata da n simboli, definiamo una sottostringa di Fibonacci come qualsiasi sottostringa di S che è anche una stringa di Fibonacci per una scelta adatta di a e b .
Il problema
Dato , vogliamo trovare la sua sottostringa Fibonacci più lunga.
Un banale algoritmo
Per ogni posizione della stringa S , supponiamo che F ( 2 ) inizi lì (è sufficiente verificare che i simboli i -th e ( i + 1 ) -th siano distinti). In tal caso, controlla se può essere esteso a F ( 3 ) , quindi F ( 4 ) e così via. Successivamente, ricominciare dalla posizione i + 1 . Ripetere fino a raggiungere la posizione n .
Dobbiamo guardare ogni simbolo almeno una volta, quindi è . Ci sono solo due per i loop coinvolti, quindi possiamo anche dire che è O ( n 2 ) .
Tuttavia (in qualche modo non sorprende) questo ingenuo algoritmo esegue molto meglio dei soliti algoritmi quadratici (se fa molto lavoro -esima posizione, non farà molto lavoro nelle posizioni successive).
Come posso usare le proprietà di Fibonacci per trovare limiti più stretti per il tempo di esecuzione di questo algoritmo?