Gitmenin bariz yolu dinamik programlamadır: , bir Fibonacci sırası i kelimesinin j konumunda başladığı iki harfi saklasın ve F ( i - 2 , j ) ve F ( i - l , j + fib ( i ) ) . Bu en fazla O ( n log n ) zaman alır , çünkü i'nin logaritmik olarak birçok olası değeri vardır.F( i , j )benjF( i - 2 , j )F( i - 1 , j + fib( i ) )O ( n günlüğün )ben.
Ama sadece F ( i - 2 , j ) ' nin boş olmadığı pozisyonları olabileceğinden şüpheleniyorum (yani aynı uzunlukta iki Fibonacci kelimesi mevcut olduğunda, sadece uzunluklarının çoğundan ziyade uzunluklarının sabit bir kısmı). Ait boş olmayan pozisyonları F ( i - 2 , j ) Eğer (sabit zaman) yapmanız gereken hangi sadece onlar için hesaplama vardır F ( i , j )O ( n / fib( i ) )F( i - 2 , j )F( i - 2,j)F( i , j ). Benim şüphe doğruysa Öyleyse bunu hızlandırmak olabilir her bir değeri için boş olmayan pozisyonların bir listesini takip tutarak i ve için listeyi kullanarak i - 2 için listenin hesaplama hızlandırmak için i .O ( n )beni - 2ben
Eğer saklıyorsanız dizisi hala boş alan olacağını Ç ( n log n ) bile speedup sonra ancak bu yerine hashtable kullanılarak geliştirilebilir. Veya alternatif olarak F'yi O ( n ) log n -bit sözcükleriyle bit paketlenmiş bir dizide saklayabilirsiniz (yalnızca boş olup olmadığını bilmeniz gereken gözlemi kullanarak; her alt dize için iki karakteri giriş dizesindeki konumlarının ilk ikisi).FO (nlogn )FO ( n ) günlükn