Résumé Structures de données de bases La représentation des données Algorithmes et Structures de Données Chapitre 6 – Complexité Les fonctions et les procédures La récursivité Les variables dynamiques, les pointeurs Les listes Les piles et les files Définition Capocchi Laurent [email protected] http://spe.univ-corse.fr/capocchiweb Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Objectifs Implémentation Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Rappels Définition d’un algorithme La complexité Définition Utilisation Notation asymptotiques Un algorithme est une séquence d’étapes de calcul qui transforme l’entrée en sortie Exemple : problème du tri Entrée : suite de N nombres Sortie : permutations de la suite donnée en entrée Algorithme correct : pour chaque instance en entrée, il se termine en produisant la bonne sortie Un algorithme correct résout le problème donné Algorithme incorrect : risque de ne pas se terminer pour certaines instances en entrée, voir de se terminer sur une réponse autre que celle désirée Un algorithme incorrect peut être utile si son taux d’erreur est contrôlé Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Rappels Définition d’une structure de données Moyen de stocker et organiser des données pour faciliter l’accès à ces données leur modification Aucune structure de données répond à tous les besoins Important de connaître les forces et les limitations de plusieurs de ces structures Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Efficacité d'un algorithme Comment analyser un algorithme ? Prévoir les ressources nécessaires à cet algorithme : temps de calcul En analysant plusieurs algorithmes résolvant le problème on arrive à identifier le plus efficace Pour analyser un algorithme il faut avoir un modèle de technologie : une architecture Modèle de Von Neuman : Modèle RAM Un seul processeur Une mémoire centrale : RAM Une exécution séquentielle des instructions Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Efficacité d'un algorithme Pourquoi évaluer l’efficacité d’un algorithme ? Le ordinateurs ne sont pas infiniment rapides La mémoire n’est pas gratuite Utiliser des algorithmes performants en terme de durée : temps d’exécution d’encombrement : mémoire Évaluer l’efficacité d’un algorithme = Analyser l’algorithme Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Efficacité d'un algorithme Si on veut être strict, il faut définir précisément les instructions du modèle RAM et leur coût C’est possible mais ça n’apporterait pas grand chose en matière de conception et d’analyse d’algorithme Le modèle RAM contient les instructions suivantes Instructions arithmétiques : + - * / % .. Instructions de transfert de données : lecture, stockage, copie .. Instructions de contrôle Chacune des instructions possède un temps d’exécution constant Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Efficacité d'un algorithme Analyser un algorithme = prévoir les ressources en temps On peut évaluer ce temps d’exécution en comptant le nombre d’opérations élémentaires requises pour l’exécution de l’algorithme analysé Analyser un algorithme, même simple peut s’avérer très complexes ! Efficacité d'un algorithme Conclusion Le comportement d’un algorithme peut varier pour chaque entrée possible il faut trouver un moyen de résumer ce comportement en quelques formules simples et faciles à comprendre il faut être capable de récupérer les termes les plus significatifs dans une formules Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Efficacité d'un algorithme Exemple Problème du calcul de la somme de N premiers entiers présenter sous la forme d’une fonction appelée somme(n: Entier) La durée d’exécution de l’algorithme de la fonction somme(n: Entier) dépend de l’entrée La somme des 1000 premiers entiers prend plus de temps que la somme des 3 premiers entiers En général, le temps d’exécution d’un algorithme croit avec la taille de l’entrée Le temps d’exécution est exprimé en fonction de la taille de son entrée Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Efficacité d'un algorithme Définitions Taille de l’entrée Nombre d’éléments constituant l’entrée Temps d’exécution Le T(n) d’un l’algorithme pour une entrée particulière est le nombre d’opérations élémentaires ou étapes exécutées Conventions Chaque ligne de pseudo-code demande un temps constant Deux lignes différentes peuvent prendre des temps différents mais chaque exécution de la i-ème ligne prend un temps Ci où Ci est une constante Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Efficacité d'un algorithme Fonction Somme (n : Entier):Entier var locale temp, nb : Entier temp <- 0 nb <- 1 tant que (nb<=n) faire temp <- temp +nb nb <- nb + 1 finTantQue retourner temp Fin fonction somme Efficacité d'un algorithme Coût Nb de fois C1 1 C2 1 C3 n+1 C4 n C5 n T(n) = C1+C2+C3+(C3+C4+C5)*n T(n) = a*n+b C’est une fonction linéaire Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Conclusion Le T(n) d’un algorithme = ordre de grandeur donnant une caractérisation simple de l’efficacité d’un algorithme Permet également de comparer les performances d’algorithmes servant à faire le même travail Il est possible de déterminer le T(n) exact d’ un algorithme Précision généralement non nécessaire Pour des entrée grandes, les constantes sont négligeables a*n3 +b*n2 +c*n + d ≤ e*n3 Étude asymptotique des algorithmes Étude de la façon dont augmente T(n) quand n -> Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Fonction somme (n : Entier): Entier var locale accu : Entier accu <- n*(n+1)/2 Coût retourner accu FinFonction somme C1 Nb de fois 1 T(n) = C1 Le temps d’exécution est constante Conclusion : à partir d’un « n » assez grand on peut dire que l’algorithme 2 est plus efficace que l’algorithme 1 Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Notations asymptotiques En général, un algorithme plus efficace asymptotiquement qu’un autre constitue le meilleur choix Sauf pour les entrées trop petites Notations asymptotiques Notation grand teta : Θ Si T(n) = a*n+b alors T(n) = Θ (n) Sens de la notation Θ(g(n)) = {f(n) tq des constantes > 0 : c1,c2 et n0 tq : 0≤c1*g(n)≤f(n)≤c2*g(n), ∀n ≥ n0} La notation Θ borne une fonction entre deux facteurs constants Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Notations asymptotiques Notation grand o : O Sens de la notation O(g(n)) = {f(n) tq des constantes > 0 : c et n0 tq : 0≤f(n)≤c*g(n), ∀n ≥ n0} La notation O sert à majorer une fonction à un facteur constant près Notation grand oméga : Sens de la notation (g(n)) = {f(n) tq des constantes > 0 : c et n0 tq : 0≤c*g(n) ≤f(n), ∀n ≥ n0} La notation sert à minorer une fonction à un facteur constant près Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Quelques situations typiques Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Conclusion Notation asymptotiques Quand on dit « le T(n) est en O(n²) », on signifie qu’il existe une fonction f(n) qui est O(n²) et tq pour ‘n’ fixé, qq soit l’entrée de taille n ,le T(n) est borné supérieurement par f(n) le T(n) le plus défavorable est O(n²) Quand on dit « le T(n) est en (n²) », on signifie que pour ‘n’ suffisamment grand, qq soit l’entrée de taille ‘n’ choisie pour une valeur qcq de ‘n’, le T(n) pour cette entrée est au moins un multiple constant de n² Les complexités sont fréquemment utilisées en Informatique Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Courbes de croissance des complexités Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Représentation graphiques Résumé Évaluer l’efficacité des algorithmes = Évaluer son temps d’exécution Possibilité d’évaluation exacte T(n) = c1 + c2*n + c3*n5 + c4*n + c5 Ignorer le coût réel de chaque instruction en utilisant les constantes ‘ci’ pour représenter le coût de chaque ligne Les constantes ‘ci’ donnent plus de détails que nécessaire T(n) = a*n5 + b*n + c ou a,b,c dépendent des ‘ci’ Ignorer les coûts abstraits ‘ci’ Utilisation d’une simplification supplémentaire Partie intéressante de T(n) = taux de croissance ou ordre de grandeur T(n) = a*n5 Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Résumé Bibliographie et Webographie Les termes d’ordres inférieurs sont moins significatifs pour ‘n’ grand Ignorer le coefficient constant du terme dominant C. PAOLI, Cours d'algorithmes et structures de données, Université de Corse, 2005 L’algorithme, dans le cas le plus défavorable à un T(n) = O(n5) Notations asymptotiques Notation grand téta : Θ(g(n)) Notation grand o : O(g(n)) Notation grand oméga : (g(n) Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données