SORU
2 Mart 2011, ÇARŞAMBA


Ters Fibonacci algoritması?

Harika çalışma zamanı ve bellek kullanımı çok F(n) keyfi bir n için hesaplama yolları düzinelerce vardır.

Ancak, sanırım ters bir soru sormak istiyorum:

(N) n ^ F verilir . 2, n ne?

(N >2 kısıtlama F(1) (2) = 1. yok kesin ters) F = beri orada.

Bu sorunu çözmenin en etkili yolu ne olurdu? Kolay Fibonacci sayıları numaralandırma ve hedef sayı isabet, ama daha hızlı bunu yapmanın bir yolu olduğunda durdurarak, doğrusal zamanda bunu yapmak için.

DÜZENLEME:şu anda, en iyi çözüm burada yayınlanan çalışır O(log n) zaman kullanarak O(log n) bellek, varsayarak matematiksel işlemleri vadede O(1) ve bir makine kelime tutabileceğini herhangi bir sayı O(1) Alanı. Mümkünse Fibonacci sayıları O(1) kullanarak alan Hesaplaması beri bellek gereksinimlerini damla, olup olmadığını merak ediyorum.

CEVAP
2 Mart 2011, ÇARŞAMBA


OP herhangi bir kayan nokta hesaplamaları ait bir matris çözümü hakkında sordu yana, işte burada. O(logn) karmaşıklık bu şekilde, sayısal işlemleri O(1) karmaşıklık varsayarsak elde edebiliriz.

Hadi 2x2 matris A sahip yapı

1 1
1 0

Şimdi düşünün vektör (8, 5), iki ardışık fibonacci sayıları saklamak. Bu matris ile çarpın, (8*1 5*1, 8*1 5*0) = (13, 8) sonraki fibonacci sayısını elde edersiniz.
Biz genelleme yaparsak, A^n * (1, 0) = (f(n), f(n - 1)).

Gerçek algoritma iki adım atıyor.

  1. , *, *10A^2A^4, vb hesaplamak. istediğiniz numaraya geçinceye kadar.
  2. n, A hesaplanan güçlerini kullanarak ikili bir arama yapın.

Bir yan not, 13* *şeklinde herhangi bir dizi böyle sunulabilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FOSDEM

    FOSDEM

    13 Ocak 2009
  • ipsy

    ipsy

    1 EKİM 2012
  • Jeremy Stark

    Jeremy Stark

    23 Mayıs 2010