Wenn zwei Symbole und sind, definieren wir die te Fibonacci-Zeichenfolge wie folgt:b k
mit bezeichnet die Verkettung von Zeichenfolgen.
So haben wir:
- ...
Bei einer durch Symbole gebildeten Zeichenfolge definieren wir eine Fibonacci-Teilzeichenfolge als eine beliebige Teilzeichenfolge von die auch eine Fibonacci-Zeichenfolge für eine geeignete Auswahl von und .na b
Das Problem
Mit wollen wir den längsten Fibonacci-Teilstring finden.
Ein trivialer Algorithmus
Angenommen, für jede Position der Zeichenfolge beginnt dort (es reicht aus, um zu überprüfen, ob das te und das -te Symbol unterschiedlich sind). Wenn dies der Fall ist, prüfen Sie, ob es auf , dann auf usw. erweitert werden kann. Beginnen Sie danach erneut an der Position . Wiederholen, bis Sie die Position .S F ( 2 ) i ( i + 1 ) F ( 3 ) F ( 4 ) i + 1 n
Wir müssen jedes Symbol mindestens einmal betrachten, also ist es . Es sind nur zwei for-Schleifen beteiligt, daher können wir weiterhin sagen, dass es .O ( n 2 )
(Etwas wenig überraschend) ist dieser naive Algorithmus jedoch viel besser als übliche quadratische Algorithmen (wenn er viel an der ten Position arbeitet, wird er an den nächsten Positionen nicht viel arbeiten).
Wie kann ich Fibonacci-Eigenschaften verwenden, um engere Grenzen für die Ausführungszeit dieses Algorithmus zu finden?