Algorithmique et Analyse d’Algorithmes Algorithmique et Analyse d’Algorithmes L3 Info Cours 1 : notion de coût d’un algorithme Benjamin Wack 2016 - 2017 1 / 44 Algorithmique et Analyse d’Algorithmes Objectifs du cours Savoir proposer une solution algorithmique à un problème posé, savoir implanter la solution et savoir analyser celle-ci. Objectifs détaillés I Savoir reconnaître et mettre en œuvre des schémas génériques d’algorithmes (séquence, arbre, graphe...), I Savoir construire une solution selon une démarche allant du plus simple (algorithme naïf) au plus efficace (diviser pour régner, etc.) I Savoir démontrer la correction des algorithmes Savoir comment évaluer la complexité d’une solution algorithmique : I - analyser la complexité au pire, en moyenne avec des hypothèses probabilistes, - analyser la complexité en utilisant des mesures sur des simulations ou des jeux de test. 2 / 44 Algorithmique et Analyse d’Algorithmes Plan Présentation du cours Problématique Correction Coût d’un algorithme Complexité Méthodologie Ordres de grandeur Algorithme de Horner 3 / 44 Algorithmique et Analyse d’Algorithmes Présentation du cours Structure du cours Cours (Benjamin Wack) Une partie synthétique sur les concepts et schémas algorithmiques Un algorithme classique afin de se constituer une culture de référence TD1 (Florence Perronnin, Anne Rasse, Benjamin Wack) Exercices permettent de renforcer la compréhension des concepts. TD2 (Rémy Boutonnet, Guillaume Cordonnier, Vincent Danjean) Mise en œuvre des concepts et préparation aux activités pratiques APNEES (RB, GC, VD) : Activités Pratiques Non Encadrées Évaluées Validation des concepts par la pratique et évaluation de la compréhension + au moins autant de travail personnel ! (exercices, petits programmes) Adresse Mail enseignant : Pré[email protected] 5 / 44 Algorithmique et Analyse d’Algorithmes Présentation du cours Ressources Bibliographie I Algorithmique, T. Cormen, R. Rivest & C. Leiserson, Dunod I Algorithmes, R. Sedgewick, Pearson Education Page Web Planning, documents, annales http://www-verimag.imag.fr/~wack/ALGO5/ Moodle de l’UFR Sujets et rendus d’Apnées https://im2ag-moodle.e.ujf-grenoble.fr/course/view.php?id=229 6 / 44 Algorithmique et Analyse d’Algorithmes Présentation du cours Évaluations Note finale = 67 % Examen + 33 % CC Les contrôles continus I 2 quicks (mi-octobre et mi-novembre) : 50 % du CC I 4 comptes-rendus d’APNEEs dont 2 notés : 50 % du CC Examen terminal I 2h30 sans documents ni calculatrice I Session 2 en juin... Challenge de programmation I I Semaine du 7 au 11 novembre En équipes 7 / 44 Algorithmique et Analyse d’Algorithmes Présentation du cours Programme (indicatif) du cours I Complexité des algorithmes 1. Coût d’un algorithme (itérations, ordres de grandeur) 2. Analyse en moyenne I Preuves d’algorithmes 3. Invariant, correction, terminaison 4. Logique de Hoare I Algorithme de parenthésage Partition Binaire de l’Espace Arbres 7. Arbres binaires de recherche 8. Arbres ordonnés, structure de tas 9. Arbres et codage I Drapeau hollandais Dichotomie Types abstraits élémentaires et implantation 5. Structures séquentielles 6. Structures arborescentes I Horner Quicksort Arbres B Algorithmes gloutons Algorithme de Huffman Graphes et algorithmes 10. Algorithmique de graphes 11. Arbre couvrant, prétraitement Tri topologique Algorithme de Knuth-Morris-Pratt 8 / 44 Algorithmique et Analyse d’Algorithmes Problématique Notion de problème I Effectuer une recherche dans un inventaire I Résoudre une équation I Trouver le plus court chemin sur un plan de ville I Corriger des fautes d’orthographe I Multiplier des matrices I ... données stock coefficients plan texte + dictionnaire coefficients Dans chacun de ces exemples on s’intéresse en fait à une classe de problèmes similaires, dont chaque instance est définie par des données. Il faut également préciser le résultat attendu. (par exemple pour l’inventaire : oui/non ? quantité ? localisation ?) 10 / 44 Algorithmique et Analyse d’Algorithmes Problématique Qu’est-ce qu’un algorithme ? Procédure de résolution de n’importe quelle instance d’un problème suffisamment élémentaire pour être exécutée de façon automatique. Problème concret Problème formalisé / Algorithme Programmation Programme Données t Instance ) Exécution Solution Exemple : résolution d’équation 11 / 44 Algorithmique et Analyse d’Algorithmes Problématique Un algorithme traite donc des données pour produire un résultat ; mais avec quelles primitives et quelles ressources ? 12 / 44 Algorithmique et Analyse d’Algorithmes Problématique Nécessité d’un modèle Alan M. Turing 1912-1954 Machine « de papier » 1936 La machine est dotée : I d’un ruban infini (' mémoire) I d’une tête de lecture/écriture I d’un automate (' processeur) Un modèle donc tourné vers les opérations de lecture/écriture (' affectation, calculs) 13 / 44 Algorithmique et Analyse d’Algorithmes Problématique Les questions “résolues” par Turing I Qu’est-ce qu’un calcul effectué automatiquement ? I Peut-on tout calculer ? I Peut-on décider automatiquement si une formule logique est vraie ? 10 ans avant les premiers ordinateurs ! Cf. Modèles de calcul au semestre 6 14 / 44 Algorithmique et Analyse d’Algorithmes Problématique Les questions traitées en Algo5 Est-ce que je peux construire un programme qui résout mon problème (sur une machine conforme à mon modèle) ? Spécification du problème et construction d’un algorithme Est-ce que l’exécution de mon programme sur la machine donne bien le résultat souhaité ? Vérification de propriétés qualitatives par test et preuve Est-ce que mon programme me fournit le résultat en un temps acceptable ? Validation de propriétés quantitatives par mesure et analyse 15 / 44 Algorithmique et Analyse d’Algorithmes Problématique Les questions traitées en Algo5 Problème concret Correction O preuve spécification Problème formalisé construction / Algorithme 6 Efficacité analyse de complexité Programmation Programme 5 @ ^ mesure test Données t Instance ) Exécution Solution Exemple : résolution d’équation 15 / 44 Algorithmique et Analyse d’Algorithmes Correction Les propriétés recherchées Terminaison L’exécution de l’algorithme produit-elle un résultat en temps fini quelles que soient les données fournies ? Correction partielle Lorsque l’algorithme s’arrête, le résultat calculé est-il la solution cherchée quelles que soient les données fournies ? 17 / 44 Algorithmique et Analyse d’Algorithmes Correction Test ou preuve ? “Testing shows the presence, not the absence of bugs” E. W. Dijkstra, 1969 Le test : I valide une implantation plutôt qu’un algorithme I permet des vérifications rapides I peut être utilisé en cours de développement I fait apparaître les limites du modèle La preuve : I fournit une garantie incontestable sur le fond de l’algorithme I mais n’élimine pas (complètement) les erreurs de programmation I nécessite des outils formels pour une utilisation à grande échelle 18 / 44 Algorithmique et Analyse d’Algorithmes Coût d’un algorithme Notre modèle de machine Une machine est constituée d’un processeur, d’une mémoire et d’un ensemble d’opérations. I Mémoire - infinie (mais un calcul donné utilise un espace fini), - types élémentaires (finis) int, float,... - puis on ajoutera des structures de données I Opérations - nombre fini d’opérations (arithmétiques, booléennes...) ; - chaque opération a un nombre fini de paramètres (nombre fini de variables lues et écrites) I Processeur - processeur unique ; - effectue les opérations en temps constant (1 top = 1 opération) 20 / 44 Algorithmique et Analyse d’Algorithmes Coût d’un algorithme Efficacité d’un algorithme I Est-ce que mon programme consomme une quantité acceptable de ressources pour fournir un résultat ? I Étant donnés deux programmes résolvant le même problème, lequel est le “meilleur” ? Calcul Un calcul est une séquence d’opérations qui, à partir d’une configuration initiale de la mémoire, produit, en un temps fini, une configuration terminale. I coût en temps à partir d’une configuration initiale d = nombre d’opérations dans la séquence I coût en mémoire = nombre maximal de variables utilisées simultanément 21 / 44 Algorithmique et Analyse d’Algorithmes Coût d’un algorithme Exemple (1) Moyenne de 2 flottants MOY(a,b) Données : Deux flottants : a et b Résultat : La moyenne de a et de b s := a + b m := s/2 Return (m) Coût de l’algorithme Coût temps ? 2 opérations Coût en espace mémoire ? 2 variables Coût constant, indépendant des données 22 / 44 Algorithmique et Analyse d’Algorithmes Coût d’un algorithme Exemple (2) Puissance : calcul de x n PUISSANCE(x ,n) Données : Un flottant x et un entier n Résultat : La valeur de x n p := 1 k := 0 while k 6= n p := p × x k := k + 1 Return (p) I Coût en temps : 2 + 2n opérations I Coût variable, dépend de la valeur des données 23 / 44 Algorithmique et Analyse d’Algorithmes Coût d’un algorithme Exemple (3) Maximum d’un tableau MAXIMUM(T ,n) Données : T tableau de n entiers Résultat : L’indice d’un élément maxi max := T [1] for i := 1 to n if T [i] ≥ max imax := i max := T [i] Traiter (max ) Coût de l’algorithme Modèle de coût ? Supposons Traiter coûteux I pour T=[1,2,...,n] ? I pour T=[14,28,...,14n] ? I pour T=[n,1,2,...,n-1] ? Dépend de la taille des données Borné par une fonction linéaire Return (imax ) Expression du coût : en fonction de quoi ? I Pour ce tableau n est la taille des données I Pour un entier n est la valeur de la donnée : on préférera log2 (n) 24 / 44 Algorithmique et Analyse d’Algorithmes Complexité Généralisation Espace des données Algorithme Espace des résultats Machine Taille de la donnée Cout du calcul Entier Entier Caractériser l’efficacité générale de l’algorithme = trouver la relation entre la taille des données et le coût de l’algorithme sur un (modèle de) machine donnée 26 / 44 Algorithmique et Analyse d’Algorithmes Complexité Complexité d’un algorithme Complexité (au pire) La complexité d’un algorithme A est fonction de la taille des données : CA (n) = max(coût(d)) pour toutes les données d de taille n I Suppose d’avoir fixé la notion de taille I Maximum = garantie quelles que soient les conditions d’utilisation I Exhiber un cas défavorable « suffit » Complexité au mieux min CA (n) = min(coût(d)) pour toutes les données d de taille n I Correspond au cas le plus favorable Quel comportement privilégie-t-on ? 27 / 44 Algorithmique et Analyse d’Algorithmes Complexité Méthodologie Complexité des structures de base Instructions en séquence Le coût de Faire Truc Faire Machin est la somme des coûts de Truc et de Machin Composition des coûts La complexité d’une boucle est donc la somme des coûts de chaque itération Instructions FOR, WHILE, REPEAT,... 29 / 44 Algorithmique et Analyse d’Algorithmes Complexité Méthodologie Complexité des structures de base (2) Instructions conditionnelles if condition Faire Truc else Faire Machin Coût de l’une des branches plus le coût d’évaluation de la condition Majoration du coût La complexité au pire sera donc majorée par le maximum des complexités au pire de chaque branche. C (si Condition alors A sinon B) ≤ C (evaluation(Condition)) + max{C (A), C (B)} Instructions IF, SWITCH,... 30 / 44 Algorithmique et Analyse d’Algorithmes Complexité Méthodologie Complexité des structures de base (3) Appel de procédure Le coût de l’appel d’une procédure est : I le coût du corps de la procédure pour ses paramètres d’appel I plus le coût de l’évaluation de ses paramètres. Méthode de calcul de complexité Le calcul de la complexité d’un algorithme s’obtient donc en composant les complexités des différentes opérations composant l’algorithme. I assemblage et reconstruction I méthode par composition I se fait à la conception de l’algorithme 31 / 44 Algorithmique et Analyse d’Algorithmes Complexité Méthodologie Exemple Calcul de la somme des entiers de 1 à n i := 1 somme := 0 Tantque (i ≤ n) : somme := somme + i i := i + 1 I I I I Coût d’une itération = 2 (additions) + 1 test Nombre d’itérations = n Coût de la boucle = 3n Coût de l’algorithme = 3n + 1 Niveau de détail judicieux ? 32 / 44 Algorithmique et Analyse d’Algorithmes Complexité Ordres de grandeur Ordres de grandeur I La complexité est une prédiction du temps d’exécution du programme codant l’algorithme. I Mais dépend de l’architecture de la machine, donc c’est une abstraction (approximation) I Passage à l’échelle des algorithmes Ce qui est important c’est : 1. l’ordre de grandeur ; 2. de pouvoir comparer les algorithmes 34 / 44 Algorithmique et Analyse d’Algorithmes Complexité Ordres de grandeur n = 106 n = 109 Exemples I somme des éléments d’un tableau de taille n ⇒ n opérations 1/1000e s1 s I tri par insertion des éléments d’un tableau de taille n ⇒ n2 opérations 1/4 h30 ans I énumération des vecteurs de bits de taille n ⇒ 2n opérations 10300 000 années... Définir des ordres de grandeur comparables Pour se donner une représentation concrète : sur un PC récent, environ 1 milliard d’opérations / seconde 35 / 44 Algorithmique et Analyse d’Algorithmes Complexité Ordres de grandeur Borne supérieure asymptotique Notation O Pour une fonction donnée g on note O(g) l’ensemble de fonctions : O(g) = {f telles que ∃c ≥ 0, ∃n0 ≥ 0, ∀n ≥ n0 , f (n) ≤ c.g(n)} On écrit f = O(g) pour f ∈ O(g). On dit que g est une borne supérieure asymptotique pour f . Vite dit : g dépasse f à partir d’un certain rang (taille de données) Pause courbes Exemples n = O(n3 ) n+ √ n = O(n) 1250n3 = O(2n ) √ √ n n + n log n = O(n n) 36 / 44 Algorithmique et Analyse d’Algorithmes Complexité Ordres de grandeur Échelles de comparaison (à connaître) Échelle polynomiale I Si k ≤ l alors nk = O(nl ) Échelle logarithmique I log(n) = O(n) I log(log(n)) = O(log(n)) Échelle exponentielle I Si 0 < a < b alors an = O(b n ) I Pour tous a > 1 et k ≥ 0 on a nk = O(an ) Deux propriétés utiles Si f = O(g) alors f + g = O(g) et k × f = O(g) 37 / 44 Algorithmique et Analyse d’Algorithmes Complexité Ordres de grandeur Autres encadrements f = O(g) si ∃c ≥ 0, ∃n0 ≥ 0, ∀n ≥ n0 , f (n) ≤ c.g(n) Borne inférieure asymptotique (notation Ω) f = Ω(g) si ∃c ≥ 0, ∃n0 ≥ 0, ∀n ≥ n0 , c.g(n) ≤ f (n) Borne asymptotique approchée : (notation Θ) f = Θ(g) si ∃c1 , c2 ≥ 0, ∃n0 ≥ 0, ∀n ≥ n0 , c1 .g(n) ≤ f (n) ≤ c2 .g(n) 38 / 44 Algorithmique et Analyse d’Algorithmes Algorithme de Horner Évaluation d’un polynôme Un polynôme P à une seule variable X s’écrit de façon unique P = an X n + an−1 X n−1 + . . . + a1 X + a0 Résultat : La valeur P(x0 ) Données : Les coefficients an , . . . , a0 suffisent à donner le polynôme Rangés dans un tableau A de taille n + 1 Une valeur x0 en laquelle on veut évaluer le polynôme Types de données : I I les coefficients an , . . . , a0 sont des flottants x0 peut être un flottant mais aussi une matrice, un polynôme... I Incidence sur le modèle de coût 40 / 44 Algorithmique et Analyse d’Algorithmes Algorithme de Horner Algorithme (très) naïf Évaluation de P en x0 EVAL(P,x0 ) Données : Un tableau de coefficients A et un flottant x0 Résultat : La valeur de P(x0 ) r =0 i =n while i ≥ 0 p=1 k=0 while k 6= i p = p × x0 k =k +1 r = r + A[i] × p i =i −1 Return (r ) (calcul de x0 n dans p) Complexité en O(n2 ) 41 / 44 Algorithmique et Analyse d’Algorithmes Algorithme de Horner Évaluation droite-gauche Idée : ne pas recalculer les puissances de x0 pour rien Évaluation de P en x0 par la droite EVAL_DROITE(P,x0 ) Données : Un tableau de coefficients A et un flottant x0 Résultat : La valeur de P(x0 ) r =0 i =0 p=1 while i ≤ n r = r + A[i] × p p = p × x0 i =i +1 Return (r ) Complexité en O(n) 42 / 44 Algorithmique et Analyse d’Algorithmes Algorithme de Horner Évaluation gauche-droite efficace On se base sur la pseudo-factorisation P = ((. . . (an × X + an−1 ) . . .) × X + a1 ) × X + a0 Évaluation de P en x0 par la méthode de Horner HORNER(P,x0 ) Données : Un tableau de coefficients A et un flottant x0 Résultat : La valeur de P(x0 ) r =0 i =n while i ≥ 0 r = r × x0 + A[i] i =i −1 Return (r ) Même complexité mais : I En place et meilleure constante I Autres applications : dérivation, division, calcul de racines... 43 / 44 Algorithmique et Analyse d’Algorithmes Algorithme de Horner Conclusion I Un même problème peut être résolu par des algorithmes très différents I On peut (parfois) passer de l’un à l’autre par raffinement I L’analyse de complexité est un critère fiable pour les comparer I ... mais pas le seul La prochaine fois I schémas récursifs I analyse du coût en moyenne I tri rapide 44 / 44