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

  • André Frizzo

    André Frizz

    16 Aralık 2006
  • Creavite

    Creavite

    8 Mart 2009
  • Drakinen

    Drakinen

    1 EYLÜL 2008