Le ème nombre de Fibonacci peut être calculé en temps linéaire en utilisant la récurrence suivante:
def fib(n):
i, j = 1, 1
for k in {1...n-1}:
i, j = j, i+j
return i
Le ème nombre de Fibonacci peut également être calculé comme [ φ n / √. Cependant, cela a des problèmes avec les problèmes d'arrondi pour mêmenrelativement petit. Il y a probablement desmoyens de contourner cela,mais je préfère ne pas le faire.
Existe-t-il un algorithme efficace (logarithmique dans la valeur ou mieux) pour calculer le n ème nombre de Fibonacci qui ne repose pas sur l'arithmétique à virgule flottante? Supposons que les opérations entières ( + , - , × , / ) peuvent être effectuées en temps constant.
Réponses:
Vous pouvez utiliser une alimentation matricielle et l'identité Dans votre modèle de calcul, il s'agit d'un algorithme O ( log n ) si vous utilisez la quadrature répétée pour implémenter la mise sous tension.
la source
Vous pouvez lire cet article mathématique: Un algorithme rapide pour calculer de grands nombres de Fibonacci (Daisuke Takahashi): PDF .
Plus simple, j'ai implémenté plusieurs algorithmes de Fibonacci en C ++ (sans et avec GMP) et Python. Sources complètes sur Bitbucket. À partir de la page principale, vous pouvez également suivre des liens vers:
Les formules les plus utiles sont:
Soyez prudent sur l'algorithme. Vous ne devez pas calculer plusieurs fois la même valeur. Un algorithme récursif simple (en Python):
la source
Consultez le livre gratuit Matters Computational et le code pari / gp.
la source