Calcul d'équations classiques
Lors de calculs récursif de complexité, on va de nombreuses fois avoir les mêmes équations à résoudre.
Cette série d'exercice va vous montrer les plus classiques et leur usage dans les calculs de complexité.
Quelques équations de récurrences sont à connaître car elles donnent de complexités très différentes.
Que vaut $C(n)$ si :
corrigé
corrigé
Que vaut $C(n)$ si :
corrigé
corrigé
On fait de même que pour l'exercice précédent :
Que vaut $C(n)$ si :
corrigé
corrigé
Que vaut $C(n)$ si :
corrigé
corrigé
Que vaut $C(n)$ si :
corrigé
corrigé
Que vaut $C(n)$ si :
corrigé
corrigé
Terminons cette partie avec un piège classique dans lequel tombent (pratiquement tous) les débutants :
Quelle équation de complexité $C(n)$ vérifie l'algorithme suivant ?
algorithme f(n: entier) → entier:
si n < 2:
rendre 1
rendre f(n // 2) * f(n // 4)
Calculer sa complexité via un encadrement et en utilisant les équations précédentes
corrigé
corrigé
Le piège se trouve dans la troisième ligne de l'algorithme. Elle consiste en :
- le calcul de $f(n//2)$
- le calcul de $f(n//4)$
- la multiplication des deux valeurs obtenues
Cette ligne est donc de complexité $C(n//2) + C(n//4) + \mathcal{O}(1)$.
On a donc l'équation suivante à résoudre :
La complexité est croissante, on peut donc écrire :
L'équation de gauche se résolvant exactement de la même manière que celle de droite on obtient $\mathcal{O}(n) \leq C(n) \leq \mathcal{O}(n)$, donc : $C(n) = \mathcal{O}(n)$.