Diberikan dua simbol dan , mari kita mendefinisikan string Fibonacci sebagai berikut:b k
dengan menunjukkan penggabungan string.
Dengan demikian kita akan memiliki:
- ...
Mengingat string yang dibentuk oleh simbol, kita mendefinisikan Fibonacci substring sebagai salah substring dari yang juga string Fibonacci untuk pilihan yang cocok dan .na b
Masalah
Diberikan , kami ingin menemukan substring Fibonacci terpanjang.
Algoritma sepele
Untuk setiap posisi dari string , anggaplah bahwa mulai di sana (cukup untuk memeriksa bahwa simbol ke- dan -th berbeda). Jika itu masalahnya, periksa apakah dapat diperluas ke , lalu , dan seterusnya. Setelah itu, mulai lagi dari posisi . Ulangi sampai Anda mencapai posisi .S F ( 2 ) i ( i + 1 ) F ( 3 ) F ( 4 ) i + 1 n
Kita harus melihat setiap simbol setidaknya sekali, jadi . Hanya ada dua untuk loop yang terlibat, sehingga kita dapat selanjutnya mengatakan bahwa itu adalah .O ( n 2 )
Namun (agak tidak mengejutkan) algoritma naif ini berkinerja jauh lebih baik daripada algoritma kuadratik biasa (jika itu banyak bekerja pada posisi ke- , itu tidak akan melakukan banyak pekerjaan di posisi berikutnya).
Bagaimana saya bisa menggunakan properti Fibonacci untuk menemukan batas yang lebih ketat untuk waktu eksekusi algoritma ini?