Étant donné deux symboles et , nous allons définir les -ème chaîne de Fibonacci comme suit:
avec dénotant la concaténation de chaînes.
Ainsi nous aurons:
- ...
Étant donné une chaîne formée de symboles, nous définissons une sous-chaîne de Fibonacci comme toute sous - chaîne de qui est également une chaîne de Fibonacci pour un choix approprié de et .
Le problème
Étant donné , nous voulons trouver sa plus longue sous-chaîne de Fibonacci.
Un algorithme trivial
Pour chaque position de la chaîne , supposons que commence là (il suffit de vérifier que les symboles -th et -th sont distincts). Si tel est le cas, vérifiez s'il peut être étendu à , puis à , et ainsi de suite. Après cela, recommencez à partir de la position . Répétez jusqu'à ce que vous atteigniez la position .
Nous devons regarder chaque symbole au moins une fois, c'est donc . Il n'y en a que deux pour les boucles impliquées, nous pouvons donc dire en plus que c'est .
Cependant (sans surprise) cet algorithme naïf fonctionne bien mieux que les algorithmes quadratiques habituels (s'il fait beaucoup de travail sur la ème position, il ne fera pas beaucoup de travail dans les positions suivantes).
Comment puis-je utiliser les propriétés de Fibonacci pour trouver des limites plus strictes pour le temps d'exécution de cet algorithme?