La complexité de la récurrence: T(n) = T(n-1) + T(n-2) + C
Je veux comprendre comment arriver à la complexité de la relation de récurrence.
T(n) = T(n-1) + T(n-2) + C
Compte tenu de T(1) = C
et T(2) = 2C;
Généralement pour les équations comme T(n) = 2T(n/2) + C
(Donnée T(1) = C), j'utilise la méthode suivante.
T(n) = 2T(n/2) + C
=> T(n) = 4T(n/4) + 3C
=> T(n) = 8T(n/8) + 7C
=> ...
=> T(n) = 2^k T (n/2^k) + (2^k - 1) c
Maintenant, quand n/2^k = 1 => K = log (n)
(à la base 2)
T(n) = n T(1) + (n-1)C
= (2n -1) C
= O(n)
Mais, je ne suis pas en mesure de venir avec une approche similaire pour le problème que j'ai en question. S'il vous plaît corrigez-moi si mon approche est incorrecte.
OriginalL'auteur Gopal | 2013-07-18
Vous devez vous connecter pour publier un commentaire.
La complexité est liée à l'entrée de la taille, où chaque appel de produire un binaire-l'arbre des appels
Où
T(n)
faire2
n
appels au total.T(n) = T(n-1) + T(n-2) + C
T(n) = O(2
n-1
) + O(2
n-2
) + O(1)
O(2
n
)
De la même manière, vous pouvez généraliser votre fonction récursive, comme un nombre de Fibonacci
T(n) = F(n) + ( C * 2
n
)
Ensuite, vous pouvez utiliser une formule directe au lieu de récursive façon
À l'aide d'une méthode complexe connu comme La Formule de Binet
OriginalL'auteur Khaled.K
Vous pouvez utiliser cette approche générale décrite ici.Veuillez vous demander si vous avez plus de questions.
OriginalL'auteur Aravind
Est "pire que exponentiel" assez précis pour vos besoins? Le cas particulier C=0 définit http://en.wikipedia.org/wiki/Fibonacci_number, que vous pouvez voir à partir de l'article est exponentielle. En supposant que C est positif, votre série sera augmente plus rapidement que cela. En fait, votre série sera entre de la suite de Fibonacci, et une variante de la suite de Fibonacci dans lequel le nombre d'or est remplacé par quelque chose de très légèrement plus grand.
OriginalL'auteur mcdowella
Si vous êtes aussi intéressé à trouver une formule explicite pour
T(n)
cela peut aider.Nous savons que
T(1) = c
etT(2) = 2c
etT(n) = T(n-1) + T(n-2) + c
.Donc il suffit d'écrire
T(n)
et début expansion...Vous voyez les coefficients sont des nombres de Fibonacci eux-mêmes!
Appel
F(n)
lanth
nombre de Fibonacci.F(n) = (phi^n + psi^n)/sqrt(5)
oùphi = (1+sqrt(5))/2
etpsi = -1/phi
, alors nous avons:Voici quelques rapide de code pour illustrer:
et
OriginalL'auteur seth
Ce type de récidives sont appelés: non-homogène des relations de récurrence et vous avez à résoudre dans le début homogène de récidive (l'un sans une constante à la fin). Si vous êtes intéressé, lisez les mathématiques derrière elle.
Je vais vous montrer un moyen facile. Il suffit de saisir votre équation dans wolfram-alpha et vous obtiendrez:
Donc la complexité augmente de la même manière comme Lucas ou le nombre de Fibonacci (le plus grand d'entre eux).
Mais tous les deux ont le même taux de croissance:
et, par conséquent, le taux de croissance est exponentielle du nombre d'or:
O(phi^n)
OriginalL'auteur Salvador Dali