La complexité algorithmique de la suite de Fibonacci

Je comprends Big-O de la notation, mais je ne sais pas comment le calculer pour de nombreuses fonctions. En particulier, j'ai été à essayer de comprendre la complexité de calcul de la version naïve de la suite de Fibonacci:

int Fibonacci(int n)
{
    if (n <= 1)
        return n;
    else
        return Fibonacci(n - 1) + Fibonacci(n - 2);
}

Qu'est-ce que la complexité de calcul de la suite de Fibonacci et comment est-il calculé?

  • les Bonnes réponses ici.
  • Voir la matrice de la forme de l'article ici: en.wikipedia.org/wiki/Fibonacci_number . en procédant de cette matrice ^ n (dans une manière intelligente de), vous pouvez calculer Fib(n) en temps O(lg n). Le truc, c'est de faire la fonction de puissance. Theres une très bonne conférence sur iTunesU à propos de ce problème et comment le résoudre en temps O(lg n). Le cours d'intro à des algorithmes de MIT conférence 3 (son absolument libre de sorte de vérifier si vous êtes intéressés)
  • Ni des commentaires ci-dessus l'adresse de la question, qui est de parler de la complexité de calcul de la version naïve (posté dans le code), pas plus intelligent versions comme la matrice de la forme ou de la non-récursive de calcul.
  • Une très belle vidéo ici qui parle à la fois de la limite inférieure de la complexité(2^n/2) et la limite supérieure de la complexité(2^n) de récursive de la mise en œuvre.
  • Une note de la requête: la naïfs la mise en œuvre de la suite de Fibonacci être itératif ou récursive?
InformationsquelleAutor Juliet | 2008-12-11