Complexité d'un algorithme

Evaluer le temps et la mémoire nécessaire pour exécuter un algorithme.

Mesure du temps d'exécution (utilisation du module time)

Exemple 1 : test de primalité

Complexité en $O(n)$

Complexité en $O(n)$ dans le pire des cas et en $O(1)$ dans le meilleur des cas.

Complexité en $O(\sqrt{n})$ dans le pire des cas et en $O(1)$ dans le meilleur des cas.

Vocabulaire

On note $T(n)$ le nombre d'opérations pour traiter le nombre $n$, un objet de longueur $n$ ...

Exemple 2 : calcul de $a^n$

Complexité en $O(n)$ : linéaire

Combien d'itérations de la boucle while ?

Complexité ?

Si $2^p\leqslant n_k<2^{p+1}$

alors $2^{p-1}\leqslant \dfrac{n_k}2<2^{p}$

et donc $2^{p-1}\leqslant n_{k+1} = \left\lfloor\dfrac{n_k}2\right\rfloor<2^{p}$

Si $2^p\leqslant n_k<2^{p+1}$, il y a $p+1$ itérations de la boucle while

Il y a donc $1+\left\lfloor\dfrac{\ln n}{\ln 2}\right\rfloor$ itérations de la boucle.

Complexité en $O(\ln(n))$ : complexité logarithmique

Version récursive

Combien d'appels de la fonction ?

Complexité ?

Complexité en $O(\ln(n))$ : complexité logarithmique

Il y a $\left\lfloor\dfrac{\ln n}{\ln 2}\right\rfloor+2 \ $ appels de la fonction.

Exemple 3 : calcul de déterminants

Quelle est la complexité du calcul d'un déterminant d'ordre $n$, en utilisant la méthode du pivot de Gauss ?

Quelle est la complexité du calcul d'un déterminant d'ordre $n$, en développant $n-1$ fois par rapport à la 1ère colonne ?

Complexité du calcul d'un déterminant d'ordre $n$, en utilisant la méthode du pivot de Gauss :

$O(n^3)$

Complexité du calcul d'un déterminant d'ordre $n$, en développant $n-1$ fois par rapport à la 1ère colonne :

$O(n!)$

append ou + ?