2005/2006 Structures de Données Introduction à la complexité des algorithmes
2 Complexité des algorithmes Critères d’évaluation d’un programme Est-ce que le programme satisfait les spécifications de la tâche ? Est-ce qu’il fonctionne correctement ? Est-il bien documenté ? (commentaires, guide d’utilisation) Est-ce que le code est lisible ? … Ces critères sont associés au développement
3 Complexité des algorithmes Evaluation de performances d’un programme Est-ce que le programme utilise efficacement la mémoire ? Est-ce que son temps d’exécution est acceptable? Complexité des algorithmes Estimations de temps et d’espace Indépendants de la machine
4 Complexité des algorithmes Définition : La complexité en espace mémoire d’un algorithme est la quantité de mémoire nécessaire à son exécution complète Définition : La complexité en temps d’un algorithme est la quantité de temps nécessaire à son exécution complète
5 Complexité des algorithmes enoncé1 : L’algorithme A implémenté par le programme P sur la machine M, et exécuté sur la donnée D utilise k secondes de calcul et j octets de mémoire enoncé2 : Sur toute machine, et quelque soit le langage de programmation, l’algorithme A1 est meilleur que l’algorithme A2 pour les données de grande taille
6 Complexité des algorithmes Mesure de la complexité en temps: la complexité en temps permet d’évaluer la rapidité d’exécution d’un algorithme en fonction des données en entrée Le temps d’exécution est proportionnel au nombre d’opérations fondamentales effectuées par l’algorithme Opérations fondamentales : addition, soustraction, comparaison, multiplication, …
7 Complexité des algorithmes Mesure de la complexité en temps: Soit P(I) le nombre d’opérations fondamentales effectuées par l’instruction I Dans une séquence d’instructions : les nombres d’opérations s’ajoutent Branchement conditionnel : P(if(cond) I 1 else I 2 ) ≤ P(cond)+max(P(I 1 ), P(I 2 ))
8 Complexité des algorithmes Mesure de la complexité en temps: Boucles : soit P(i) le nombre d’opérations fondamentales lors de l’exécution de la i ème itération – –le nombre d’opérations dans la boucle est P(i) – –i est la variable de contrôle de la boucle, – –le nombre d’itérations peut être majoré
9 Complexité des algorithmes Mesure de la complexité en temps: appel de procédures et fonctions calculer le nombre d’opérations effectuées par les procédures et fonctions appelées procédures et fonctions récursives : résoudre la relation de récurrence Exemple : factorielle d’un entier n version itérative: – –fact(n) = 1*2*3*…*n version récursive: – –fact(n) = 1 si n=0 – –fact(n) = n*fact(n-1) si n>0 Opération fondamentale : multiplication
10 Complexité des algorithmes Mesure de la complexité en temps: exemple int factIter(int n) { int f=1; for(int i=1; i<=n; i++) f=f*i; } P(i) =1, il y n itérations P(i) = n int factRec(int n) { if(n==0) return 1; else return n*fact(n-1); } P(0)=0, P(n)=P(n-1)+1=n
11 Complexité des algorithmes complexité en moyenne et au pire: Soit D n l’ensemble des données de taille n, Soit coût A (d) la complexité de l’algorithme A sur la donnée d complexité dans le meilleur des cas : Min A (n) = min{coût A (d) | d D n } complexité dans le pire des cas : Max A (n) = max{coût A (d) | d D n } complexité en moyenne : Moy A (n) = p(d) est la probabilité d’avoir la donnée d en entrée
12 Complexité des algorithmes Exemple : recherche d’un élément dans un tableau fonction, Appartient (donnée T : tableau d’entiers, donnée N,x : entier) retourne booléen début variable i : entier i 1; 1) 1)tantque ( i ≤ N et T[i] ≠ x) faire 2) 2) i i+1 3) 3)fin tantque 4) 4)si (i>N) retourner faux sinon retourner vrai finsi fin Opérations significatives : comparaisons
13 Complexité des algorithmes Exemple : recherche d’un élément dans un tableau (Analyse) invariants de boucle : propriétés vraies à chaque itération – –1 ère itération : i=1 – –k ième itération : i=k, et j [1,k[, T[i] ≠x (preuve par récurrence sur k) conditions d’arrêt : – –si au k ième itération : k ≤ N et T[k]=x arrêt avec i=k – –si k>N arrêt avec i=n+1 (élément non trouvé) (preuve par récurrence sur k) Complexité : – –Il y a au plus N itérations (N est la taille des données) – –La complexité est de N au pire des cas
14 Complexité des algorithmes La complexité peut être déterminée comme une fonction de la taille des données La complexité est bornée par la valeur d’une fonction en la taille des données L’efficacité de 2 algorithmes traitant du même problème doit être comparée pour des données de grande taille Quelques fonctions usuelles : n est la taille des données – –Complexité logarithmique : log (n) – –Complexité linéaire : n – –Complexité quasi-linéaire : n* log (n) – –Complexité polynomiale : n k, k>1 – –Complexité exponentielle : a n, a>1
15 Complexité des algorithmes Temps d’exécution : Exemple Sur un ordinateur effectuant opérations par seconde s : micro-secondes, ms : milli-secondes, s :secondes, mn:minutes, h : heure, j : jour, a : année, > a31.7x10 3 a11.5 j19.9s1 s 19.9 s n=10 6 > a31.7 a2.7 h1.6 s0.1 s 16.6 s n=10 5 > a11.5 j100 s0.1 s10 ms 13.3 s n=10 4 > a16.6 mn1 s9.9 ms1 ms 9.9 s n=10 3 4x10 6 a1 s10 ms0.6 ms0.1ms 6.6 s n=10 2 2n2n n3n3 n2n2 n*log(n)nlog(n) Complexité Taille
16 Complexité des algorithmes Calcul de la complexité :
17 That is all Bon Courage & BONNE CHANCE