ve iki sembol verildiğinde , Fibonacci dizesini şu şekilde tanımlayalım :b k
ile dize birleştirmeyi belirtir.
Böylece sahip olacağız:
- ...
Bir dizge verilen oluşturduğu sembolleri, bir Fibonacci herhangi biri gibi alt dize tanımlayan substring arasında , aynı zamanda, uygun bir seçim için Fibonacci dizesi ve .na b
Sorun
verildiğinde , en uzun Fibonacci alt dizisini bulmak istiyoruz.
Önemsiz bir algoritma
dizesinin her bir konumu için , orada başladığını varsayalım th ve -th sembollerinin farklı olup olmadığını kontrol etmek yeterlidir ). Bu durumda, , ardından ve daha genişletilip genişletilemeyeceğini kontrol edin . Bundan sonra, konumundan tekrar başlayın . konumuna ulaşıncaya kadar tekrarlayın .S F ( 2 ) i ( i + 1 ) F ( 3 ) F ( 4 ) i + 1 n
Her sembole en az bir kez bakmalıyız, bu yüzden . İlgili döngüler için sadece iki tane vardır, bu yüzden bunun olduğunu söyleyebiliriz .O ( n 2 )
Bununla birlikte (biraz şaşırtıcı bir şekilde) bu naif algoritma, normal kuadratik algoritmalardan çok daha iyi performans gösterir (eğer pozisyonunda çok fazla iş yaparsa, sonraki pozisyonlarda çok fazla iş yapmaz).
Bu algoritmanın yürütme süresi için daha sıkı sınırları bulmak için Fibonacci özelliklerini nasıl kullanabilirim?