Angka Fibonacci dapat dihitung dalam waktu linier menggunakan pengulangan berikut:
def fib(n):
i, j = 1, 1
for k in {1...n-1}:
i, j = j, i+j
return i
Angka Fibonacci juga dapat dihitung sebagai [ φ n / √. Namun, ini memiliki masalah dengan masalah pembulatan bahkan untukn yangrelatif kecil. Mungkin ada beberapacara untuk mengatasi initetapi saya lebih suka tidak melakukannya.
Apakah ada algoritma (logaritmik dalam nilai atau lebih baik) yang efisien untuk menghitung angka Fibonacci ke- n yang tidak bergantung pada aritmatika floating point? Asumsikan bahwa operasi integer ( + , - , × , / ) dapat dilakukan dalam waktu yang konstan.
Jawaban:
Anda dapat menggunakan powering matriks dan identitas Dalam model perhitungan Anda, ini adalah algoritma O ( log n ) jika Anda menggunakan kuadrat berulang untuk mengimplementasikan powering.
sumber
Anda dapat membaca artikel matematika ini: Algoritme cepat untuk menghitung angka Fibonacci besar (Daisuke Takahashi): PDF .
Lebih sederhana, saya menerapkan beberapa algoritma Fibonacci di C ++ (tanpa dan dengan GMP) dan Python. Sumber lengkap tentang Bitbucket. Dari halaman utama Anda juga dapat mengikuti tautan ke:
Rumus yang paling berguna adalah:
Hati-hati dengan algoritma. Anda tidak harus menghitung nilai yang sama beberapa kali. Algoritma rekursif sederhana (dengan Python):
sumber
Periksa buku gratis Matters Computational dan kode pari / gp.
sumber