Algorithmique: théorie, tris, complexité, en 2 heures. Emily Clement OOP - M1 Bio-Informatique February 26, 2019 1 / 29 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Sommaire du cours . C’est quoi l’algorithmique? Définition et exemple d’algorithmes et de problèmes algorithmiques Difficulté d’un problème algorithmique . Complexité algorithmique La complexité: définition Calculer une complexité Calculs pratiques et opérations Exercices: séries d’exemples d’algorithmes Cas des fonctions récursives . Le problème du tris et ses algorithmes de résolution Le problème du tris Tris par insertion Diviser pour régner et tris fusion Complexité minimale d’un algorithme de tris Complexité des algorithmes de tris classiques 2 / 29 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • C’est quoi un algorithme? I Ex: Algorithme de somme Algorithme 1, 2, 3, 4, 5 15 Rentourner 1 + 2 + 3 + 4 + 5 3 / 29 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • C’est quoi un algorithme? I Ex: Algorithme de somme Algorithme 1, 2, 3, 4, 5 15 Rentourner 1 + 2 + 3 + 4 + 5 I Def: Algorithme Méthode générale pour résoudre un problème 3 / 29 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • C’est quoi un algorithme? I Ex: Algorithme de somme Algorithme 1, 2, 3, 4, 5 15 Rentourner 1 + 2 + 3 + 4 + 5 I Def: Algorithme Méthode générale pour résoudre un problème I "Def": Problème • Entrée du problème • Sortie du problème 3 / 29 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Exemple de problèmes I Sur des nombres I I 4 / 29 Entrée Sachant une suite de nombres n1 , , · · · , nN , trouver... Quizz: Exemple du cours ? Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Exemple de problèmes I Sur des nombres I I Entrée Sachant une suite de nombres n1 , , · · · , nN , trouver... N P Sortie : la somme ni i=1 I 4 / 29 Quizz: Exemple du cours ? Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Exemple de problèmes I Sur des nombres I I I Entrée Sachant une suite de nombres n1 , , · · · , nN , trouver... N P Sortie : la somme ni Sortie : le produit i=1 N Q ni i=1 I 4 / 29 Quizz: Exemple du cours ? Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Exemple de problèmes I Sur des nombres I I I Entrée Sachant une suite de nombres n1 , , · · · , nN , trouver... N P Sortie : la somme ni Sortie : le produit i=1 N Q ni i=1 I I 4 / 29 Sortie : une liste triée de n1 , · · · , nN Quizz: Exemple du cours ? Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Exemple de problèmes I Sur des nombres I I I Entrée Sachant une suite de nombres n1 , , · · · , nN , trouver... N P Sortie : la somme ni Sortie : le produit i=1 N Q ni i=1 I 4 / 29 Sortie : une liste triée de n1 , · · · , nN I Problème du plus court chemin I Quizz: Exemple du cours ? Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. Réponse du quizz I Feuille 1: The next second I I I Feuille 1: Division euclidienne I I 5 / 29 Entrée : Sortie : Entrée : Sortie : Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. Réponse du quizz I Feuille 1: The next second I I I Feuille 1: Division euclidienne I I 5 / 29 Entrée : L’heure (h, m, s). Sortie : Entrée : Sortie : Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. Réponse du quizz I Feuille 1: The next second I I I Feuille 1: Division euclidienne I I 5 / 29 Entrée : L’heure (h, m, s). Sortie : L’heure à la seconde suivante. Entrée : Sortie : Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. Réponse du quizz I Feuille 1: The next second I I I Feuille 1: Division euclidienne I I 5 / 29 Entrée : L’heure (h, m, s). Sortie : L’heure à la seconde suivante. Entrée : Deux nombres a, b. Sortie : Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. Réponse du quizz I Feuille 1: The next second I I I Feuille 1: Division euclidienne I I 5 / 29 Entrée : L’heure (h, m, s). Sortie : L’heure à la seconde suivante. Entrée : Deux nombres a, b. Sortie : Le reste r et le quotient q de la division euclidienne de a par b. Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. Réponse du quizz I Feuille 1: The next second I I I Feuille 1: Division euclidienne I I I Entrée : Deux nombres a, b. Sortie : Le reste r et le quotient q de la division euclidienne de a par b. Exemples: Chez le docteur I I 5 / 29 Entrée : L’heure (h, m, s). Sortie : L’heure à la seconde suivante. Entrée : Un patient. Sortie : Retourner Vrai si il est malade, Faux sinon. Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. Réponse du quizz I Feuille 1: The next second I I I Feuille 1: Division euclidienne I I I I Entrée : Un patient. Sortie : Retourner Vrai si il est malade, Faux sinon. Le problème de la plus courte sur-séquence commune (SSC) I I I 5 / 29 Entrée : Deux nombres a, b. Sortie : Le reste r et le quotient q de la division euclidienne de a par b. Exemples: Chez le docteur I I Entrée : L’heure (h, m, s). Sortie : L’heure à la seconde suivante. Entrée : une collection F de mots sur l’alphabet {A, C , G , T }. Sortie : Un mot S de longueur minimale, telle que tout mot f de F soit un facteur de S. i.e la plus courte sur-séquence commune de F . Exemple: F = {CTA, ACT , AGT }, alors S =?. Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. Réponse du quizz I Feuille 1: The next second I I I Feuille 1: Division euclidienne I I I I Entrée : Un patient. Sortie : Retourner Vrai si il est malade, Faux sinon. Le problème de la plus courte sur-séquence commune (SSC) I I I 5 / 29 Entrée : Deux nombres a, b. Sortie : Le reste r et le quotient q de la division euclidienne de a par b. Exemples: Chez le docteur I I Entrée : L’heure (h, m, s). Sortie : L’heure à la seconde suivante. Entrée : une collection F de mots sur l’alphabet {A, C , G , T }. Sortie : Un mot S de longueur minimale, telle que tout mot f de F soit un facteur de S. i.e la plus courte sur-séquence commune de F . Exemple: F = {CTA, ACT , AGT }, alors S = ACTAGT . Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Quelques définitions formelles . Problème . L’entrée d’un problème Entrée I Une instance d’un problème est une entrée satisfaisant les contraintes imposées dans le problème requise par le calcul d’une solution. I Ex: Contraintes de type. Sortie Remarque: Il peut ne pas exister d’algorithmes... 6 / 29 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Quelques définitions formelles . Problème . L’entrée d’un problème Entrée I Une instance d’un problème est une entrée satisfaisant les contraintes imposées dans le problème requise par le calcul d’une solution. I Ex: Contraintes de type. des algorithmes Sortie Remarque: Il peut ne pas exister d’algorithmes... 6 / 29 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Quelques définitions formelles . Problème . L’entrée d’un problème Entrée I Une instance d’un problème est une entrée satisfaisant les contraintes imposées dans le problème requise par le calcul d’une solution. I Ex: Contraintes de type. des algorithmes Sortie Remarque: Il peut ne pas exister d’algorithmes... . Type de problèmes 6 / 29 . Algorithme correct I Sortie = Oui/Non. C’est un problème de décision. I Sinon, c’est un problème d’évaluation. I Ex: Malade/Pas Malade =/= "Vous avez la nom de maladie". Emily Clement I Algorithme correct: Pour chaque instance en entrée, il se termine en produisant la bonne sortie. I Sinon: Algorithme incorrect. I Ex: quizz! Algorithmique: théorie, tris, complexité, en 2 heures. • C’est quoi un problème difficile? I C’est parfois plus compliqué qu’on ne le pensait... xkcd about algorithms 1 7 / 29 Alan turing, 1936 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • C’est quoi un problème difficile? I C’est parfois plus compliqué qu’on ne le pensait... xkcd about algorithms I Décidabilité algorithmique I I 1 7 / 29 Un problème de décision est dit décidable s’il existe un algorithme correct pour ce problème, qui se termine en un nombre fini d’étapes. Si il n’en existe pas, le problème est dit indécidable. Alan turing, 1936 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • C’est quoi un problème difficile? I C’est parfois plus compliqué qu’on ne le pensait... xkcd about algorithms I Décidabilité algorithmique I I I Un problème de décision est dit décidable s’il existe un algorithme correct pour ce problème, qui se termine en un nombre fini d’étapes. Si il n’en existe pas, le problème est dit indécidable. Problème de l’arrêt I I Entrée : Un programme informatique pour un problème P, une entrée de P. Sortie : Vrai si le programme termine, Non sinon. Le problème de l’arrêt est indécidable1 . 1 7 / 29 Alan turing, 1936 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. Pause Pause! 8 / 29 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Complexité? C’est quoi? . La théorie de la complexité Espace mémoire Consommation ? Consommation ? Temps 9 / 29 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Complexité? C’est quoi? . La théorie de la complexité Espace mémoire Consommation ? . Complexité (en temps) d’un problème/algorithme I Quelle efficacité (en temps) a mon algorithme? I On "compte" les opérations effectuées. I Mon problème peut-il être résolu en au plus/environ/au moins X opérations? Consommation ? Temps 9 / 29 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Complexité? C’est quoi? . La théorie de la complexité Espace mémoire Consommation ? . Complexité (en temps) d’un problème/algorithme I Quelle efficacité (en temps) a mon algorithme? I On "compte" les opérations effectuées. I Mon problème peut-il être résolu en au plus/environ/au moins X opérations? . Mots-clés Consommation ? Temps 9 / 29 Emily Clement Pire cas, Moyen cas, Nombre d’opérations élémentaires Algorithmique: théorie, tris, complexité, en 2 heures. • Comment on calcule une complexité d’un algorithme? . Analyser un algorithme I n : taille des données I Unité: nombres d’opérations grandeur élémentaires. On notera le coût I T (n) = O (f (n)): Majoré total T (n). asymptotiquement à une cste On va considérer le pire ou le près. moyen cas. I . Exemple: révision. . Comparer: les ordres de . Classe de complexité Géométrie, Analyse, Probabilité, Statistique Géométrie, Analyse 10 / 29 Probabilité, Statistique Analyse, Statistique Géométrie, Analyse Pire cas Moyen cas Meilleur cas Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Comment on calcule une complexité d’un algorithme? . Analyser un algorithme . Comparer: les ordres de grandeur I n : taille des données I Unité: nombres d’opérations élémentaires. On notera le coût total T (n). I On va considérer le pire ou le moyen cas. I T (n) = O (f (n)): Majoré asymptotiquement à une cste près. . Classe de complexité . Pire cas/Moyen cas. 10 / 29 I Complexité dans le pire cas: temps d’exécution le plus long possible de l’algorithme. I Complexité dans le moyen cas: Moyenne des complexités. (Raffinements possibles, cf Wikipédia) Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. Opération pour calculer la complexité . Séquences d’opérations: Somme Op 1 Op 1 11 / 29 Coût T1 (n) Coût T2 (n) ⇒ T (n) = T1 (n) + T2 (n) Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. Opération pour calculer la complexité . Séquences d’opérations: Somme Op 1 Op 1 Coût T1 (n) Coût T2 (n) ⇒ T (n) = T1 (n) + T2 (n) . Embranchement (If): Maximum Si (Condition) alors: Op 1 Sinon: Op 2 11 / 29 Coût T1 (n) Coût T2 (n) Emily Clement ⇒ T (n) = max [T1 (n) , T2 (n)] Algorithmique: théorie, tris, complexité, en 2 heures. Opération pour calculer la complexité . Séquences d’opérations: Somme Op 1 Op 1 Coût T1 (n) Coût T2 (n) ⇒ T (n) = T1 (n) + T2 (n) . Embranchement (If): Maximum Si (Condition) alors: Op 1 Sinon: Op 2 Coût T1 (n) Coût T2 (n) ⇒ T (n) = max [T1 (n) , T2 (n)] . Boucle While: Somme Tant que (Condition) faire: Operation 11 / 29 Coût Ti (n) ⇒ T (n) = T1 (n) + · · · + TK (n) I Ti (n): cours de la i−ème itération de la boucle. I On doit déterminer K , le nombre d’opérations faite par la boucle while. I Même raisonnement pour les boucles For, sauf qu’on connaît K ! Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. Opération pour calculer la complexité (suite) . Fonction récursive F (N) Si (N > 1) faire: F (N/2) Operation F (N/2) 12 / 29 Coût T (n/2) ⇒ T (n) = 2 · T (n/2) + C (n) Coût C (n) Coût T (n/2) Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. Opération pour calculer la complexité (suite) . Fonction récursive F (N) Si (N > 1) faire: F (N/2) Operation F (N/2) Coût T (n/2) ⇒ T (n) = 2 · T (n/2) + C (n) Coût C (n) Coût T (n/2) . Classes de complexité 12 / 29 O (1) O (log n) O (n) O (n log n) O n2 O (P) , P ∈ R [X ] Temps constant Logarithmique Temps linéaire Temps quasi-linéaire Temps quadratique Temps polynomial O (2n ) Exponentiel Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. Exemple : Conversion d’un entier en chaine de caractère . TP - Jeu Conversion d’un entier en chaine de caractère 1: procedure Conversion(n) 2: int ← n 3: Str ← String.valueOf(n) 4: return Str 5: end procedure 13 / 29 Emily Clement . Coût O (1) . Coût O (log (n)) . Coût O (1) Algorithmique: théorie, tris, complexité, en 2 heures. Exemple : Conversion d’un entier en chaine de caractère . TP - Jeu Conversion d’un entier en chaine de caractère 1: procedure Conversion(n) 2: int ← n 3: Str ← String.valueOf(n) 4: return Str 5: end procedure . Coût O (1) . Coût O (log (n)) . Coût O (1) . Coût total T (n) =? 13 / 29 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. Exemple : Conversion d’un entier en chaine de caractère . TP - Jeu Conversion d’un entier en chaine de caractère 1: procedure Conversion(n) 2: int ← n 3: Str ← String.valueOf(n) 4: return Str 5: end procedure . Coût O (1) . Coût O (log (n)) . Coût O (1) . Coût total T (n) = O (1) + O (log (n)) + O (1) = O (log (n)) 13 / 29 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. Exemple : Recherche dans une liste quelconque . Recherche d’un élément dans une liste Recherche d’un élément elt dans une liste L 1: procedure Recherche(elt, L, n) 2: i ←0 3: while i < n − 1 AND L [i] 6= elt do 4: i ←i +1 5: end while 6: return L [i] elt 7: end procedure 14 / 29 Emily Clement . Coût O (1) . Coût O (1), X fois . Coût O (1) Algorithmique: théorie, tris, complexité, en 2 heures. Exemple : Recherche dans une liste quelconque . Recherche d’un élément dans une liste Recherche d’un élément elt dans une liste L 1: procedure Recherche(elt, L, n) 2: i ←0 3: while i < n − 1 AND L [i] 6= elt do 4: i ←i +1 5: end while 6: return L [i] elt 7: end procedure . Coût O (1) . Coût O (1), X fois . Coût O (1) . Coût total dans le pire cas T (n) =? 14 / 29 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. Exemple : Recherche dans une liste quelconque . Recherche d’un élément dans une liste Recherche d’un élément elt dans une liste L 1: procedure Recherche(elt, L, n) 2: i ←0 3: while i < n − 1 AND L [i] 6= elt do 4: i ←i +1 5: end while 6: return L [i] elt 7: end procedure . Coût O (1) . Coût O (1), X fois . Coût O (1) . Coût total dans le pire cas T (n) = O (1) + n · O (1) + O (1) = O (n) 14 / 29 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. Exemple : Recherche dichotomique . Recherche dichotomique dans un tableau trié L hL1 , · · · , Ln i Recherche d’un élément elt dans un tableau trié L 1: procedure Recherche(elt, L = hL0 , · · · , Ln i) 2: i ←0 3: result ← n + 1 4: while i < result − 1 do 5: if elt > L(i+result)/2 then 6: i ← (i + result) /2 7: else 8: result = (i + result) /2 9: end if 10: end while 11: return result 12: end procedure 15 / 29 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. Exemple : Recherche dichotomique . Recherche dichotomique dans un tableau trié L hL1 , · · · , Ln i Recherche d’un élément elt dans un tableau trié L 1: procedure Recherche(elt, L = hL0 , · · · , Ln i) 2: i ←0 3: result ← n + 1 4: while i < result − 1 do 5: if elt > L(i+result)/2 then 6: i ← (i + result) /2 7: else 8: result = (i + result) /2 9: end if 10: end while 11: return result 12: end procedure . Coût total en fonction de T (n/2) T (n) =? 15 / 29 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. Exemple : Recherche dichotomique . Recherche dichotomique dans un tableau trié L hL1 , · · · , Ln i Recherche d’un élément elt dans un tableau trié L 1: procedure Recherche(elt, L = hL0 , · · · , Ln i) 2: i ←0 3: result ← n + 1 4: while i < result − 1 do 5: if elt > L(i+result)/2 then 6: i ← (i + result) /2 7: else 8: result = (i + result) /2 9: end if 10: end while 11: return result 12: end procedure . Coût total en fonction de T (n/2) T (n) = 1 + T (n/2) 15 / 29 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. Exemple :Recherche dichotomique (suite) . Comment trouver la complexité? T (n) = 1 + T (n/2) et T (1) = 1 On voudrait dire que T (n) = O (log2 n), comment faire? 16 / 29 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. Exemple :Recherche dichotomique (suite) . Comment trouver la complexité? T (n) = 1 + T (n/2) et T (1) = 1 On voudrait dire que T (n) = O (log2 n), comment faire? . Substitution 16 / 29 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. Exemple :Recherche dichotomique (suite) . Comment trouver la complexité? T (n) = 1 + T (n/2) et T (1) = 1 On voudrait dire que T (n) = O (log2 n), comment faire? . Substitution I 16 / 29 Hyp: T (n) = a · log2 n + c Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. Exemple :Recherche dichotomique (suite) . Comment trouver la complexité? T (n) = 1 + T (n/2) et T (1) = 1 On voudrait dire que T (n) = O (log2 n), comment faire? . Substitution 16 / 29 I Hyp: T (n) = a · log2 n + c I Remettre ça dans T (n/2) = a · log2 n − a + c Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. Exemple :Recherche dichotomique (suite) . Comment trouver la complexité? T (n) = 1 + T (n/2) et T (1) = 1 On voudrait dire que T (n) = O (log2 n), comment faire? . Substitution 16 / 29 I Hyp: T (n) = a · log2 n + c I Remettre ça dans T (n/2) = a · log2 n − a + c I Résoudre: a log2 n + c − 1 = a log2 n − a + c et conclure, a = 1 et c = 1. Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. Exemple :Recherche dichotomique (suite) . Comment trouver la complexité? T (n) = 1 + T (n/2) et T (1) = 1 On voudrait dire que T (n) = O (log2 n), comment faire? . Substitution I Hyp: T (n) = a · log2 n + c I Remettre ça dans T (n/2) = a · log2 n − a + c I Résoudre: a log2 n + c − 1 = a log2 n − a + c et conclure, a = 1 et c = 1. Méthode générales I 16 / 29 D’autres méthodes existent Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. Pause Pause ! 17 / 29 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Problème du tris . Problème du tris d’un tableau de nombres I 18 / 29 Entrée Une suite de n nombres ha1 , · · · , an i, qu’on peut noter a Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Problème du tris . Problème du tris d’un tableau de nombres 18 / 29 I Entrée Une suite de n nombres ha1 , · · · , an i, qu’on peut noter a I Sortie Une permutation (réorganisation) ha10 , · · · , an0 i de la suite a de façon que a10 ≤ a20 ≤ · · · ≤ an0 . Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Problème du tris . Problème du tris d’un tableau de nombres I Entrée Une suite de n nombres ha1 , · · · , an i, qu’on peut noter a I Sortie Une permutation (réorganisation) ha10 , · · · , an0 i de la suite a de façon que a10 ≤ a20 ≤ · · · ≤ an0 . . Exemple I 18 / 29 Entrée : 1 5 10 −3 Emily Clement 101 0 Algorithmique: théorie, tris, complexité, en 2 heures. • Problème du tris . Problème du tris d’un tableau de nombres I Entrée Une suite de n nombres ha1 , · · · , an i, qu’on peut noter a I Sortie Une permutation (réorganisation) ha10 , · · · , an0 i de la suite a de façon que a10 ≤ a20 ≤ · · · ≤ an0 . . Exemple 18 / 29 I Entrée : 1 I Sortie : −3 5 10 0 1 −3 5 Emily Clement 101 10 0 101 Algorithmique: théorie, tris, complexité, en 2 heures. • Problème du tris . Problème du tris d’un tableau de nombres I Entrée Une suite de n nombres ha1 , · · · , an i, qu’on peut noter a I Sortie Une permutation (réorganisation) ha10 , · · · , an0 i de la suite a de façon que a10 ≤ a20 ≤ · · · ≤ an0 . . Exemple I Entrée : 1 I Sortie : −3 5 10 0 1 −3 5 101 10 0 101 . Algorithmes de tris I 18 / 29 Beaucoup d’algorithmes de tris différents existent Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Problème du tris . Problème du tris d’un tableau de nombres I Entrée Une suite de n nombres ha1 , · · · , an i, qu’on peut noter a I Sortie Une permutation (réorganisation) ha10 , · · · , an0 i de la suite a de façon que a10 ≤ a20 ≤ · · · ≤ an0 . . Exemple I Entrée : 1 I Sortie : −3 5 10 0 1 −3 5 101 10 0 101 . Algorithmes de tris 18 / 29 I Beaucoup d’algorithmes de tris différents existent I On verra le tri pas insertion et le tri fusion. Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Problème du tris . Problème du tris d’un tableau de nombres I Entrée Une suite de n nombres ha1 , · · · , an i, qu’on peut noter a I Sortie Une permutation (réorganisation) ha10 , · · · , an0 i de la suite a de façon que a10 ≤ a20 ≤ · · · ≤ an0 . . Exemple I Entrée : 1 I Sortie : −3 5 10 0 1 −3 5 101 10 0 101 . Algorithmes de tris 18 / 29 I Beaucoup d’algorithmes de tris différents existent I On verra le tri pas insertion et le tri fusion. I Dans le cas moyen, on ne peut pas trier plus rapidement qu’en O (n log n) Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Problème du tris . Problème du tris d’un tableau de nombres I Entrée Une suite de n nombres ha1 , · · · , an i, qu’on peut noter a I Sortie Une permutation (réorganisation) ha10 , · · · , an0 i de la suite a de façon que a10 ≤ a20 ≤ · · · ≤ an0 . . Exemple I Entrée : 1 I Sortie : −3 5 10 0 1 −3 5 101 10 0 101 . Algorithmes de tris 18 / 29 I Beaucoup d’algorithmes de tris différents existent I On verra le tri pas insertion et le tri fusion. I Dans le cas moyen, on ne peut pas trier plus rapidement qu’en O (n log n) Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Problème du tris . Problème du tris d’un tableau de nombres I Entrée Une suite de n nombres ha1 , · · · , an i, qu’on peut noter a I Sortie Une permutation (réorganisation) ha10 , · · · , an0 i de la suite a de façon que a10 ≤ a20 ≤ · · · ≤ an0 . . Exemple I Entrée : 1 I Sortie : −3 5 10 0 1 −3 5 101 10 0 101 . Algorithmes de tris 18 / 29 I Beaucoup d’algorithmes de tris différents existent I On verra le tri pas insertion et le tri fusion. I Dans le cas moyen, on ne peut pas trier plus rapidement qu’en O (n log n) I Certains tris sont mieux que d’autres selon la situation! Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Tris par insertion: Intuition . Le tri par insertion 19 / 29 I Intuition: Le tris de carte. Voici une animation ! I Complexité: pas optimal... Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Tris par insertion: Intuition . Le tri par insertion I Intuition: Le tris de carte. Voici une animation ! I Complexité: pas optimal... . Présentation du tri par insertion Tris par insertion d’un tableau L de longueur n 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 19 / 29 procedure triInsertion(L, n) for j from 2 to n do clé ← L[j] i ←j −1 while i > 0 AND L[i] > clé do L[1, · · · , j − 1] L[i + 1] ← L[i] i ←i −1 end while L[i + 1] ← clé end for return L end procedure Emily Clement . Insère L[j] dans la séquence triée Algorithmique: théorie, tris, complexité, en 2 heures. • Tris par insertions: Complexité . Complexité de l’algorithme dans le pire cas Tris par insertion d’un tableau L de longueur n 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 20 / 29 procedure triInsertion(L, n) for j from 1 to n − 1 do clé ← L[j] i ←j −1 while i > 0 AND L[i] > clé do L[i + 1] ← L[i] i ←i −1 end while L[i + 1] ← clé end for return L end procedure Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Tris par insertions: Complexité . Complexité de l’algorithme dans le pire cas Tris par insertion d’un tableau L de longueur n 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 20 / 29 procedure triInsertion(L, n) for j from 1 to n − 1 do clé ← L[j] i ←j −1 while i > 0 AND L[i] > clé do L[i + 1] ← L[i] i ←i −1 end while L[i + 1] ← clé end for return L end procedure Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. . n − 1 fois • Tris par insertions: Complexité . Complexité de l’algorithme dans le pire cas Tris par insertion d’un tableau L de longueur n 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 20 / 29 procedure triInsertion(L, n) for j from 1 to n − 1 do clé ← L[j] i ←j −1 while i > 0 AND L[i] > clé do L[i + 1] ← L[i] i ←i −1 end while L[i + 1] ← clé end for return L end procedure Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. . n − 1 fois . O (1) • Tris par insertions: Complexité . Complexité de l’algorithme dans le pire cas Tris par insertion d’un tableau L de longueur n 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 20 / 29 procedure triInsertion(L, n) for j from 1 to n − 1 do clé ← L[j] i ←j −1 while i > 0 AND L[i] > clé do L[i + 1] ← L[i] i ←i −1 end while L[i + 1] ← clé end for return L end procedure Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. . n − 1 fois . O (1) . O (1) • Tris par insertions: Complexité . Complexité de l’algorithme dans le pire cas Tris par insertion d’un tableau L de longueur n 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 20 / 29 procedure triInsertion(L, n) for j from 1 to n − 1 do clé ← L[j] i ←j −1 while i > 0 AND L[i] > clé do L[i + 1] ← L[i] i ←i −1 end while L[i + 1] ← clé end for return L end procedure Emily Clement . n − 1 fois . O (1) . O (1) . Pire cas: j − 1 fois Algorithmique: théorie, tris, complexité, en 2 heures. • Tris par insertions: Complexité . Complexité de l’algorithme dans le pire cas Tris par insertion d’un tableau L de longueur n 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 20 / 29 procedure triInsertion(L, n) for j from 1 to n − 1 do clé ← L[j] i ←j −1 while i > 0 AND L[i] > clé do L[i + 1] ← L[i] i ←i −1 end while L[i + 1] ← clé end for return L end procedure Emily Clement . n − 1 fois . O (1) . O (1) . Pire cas: j − 1 fois . O (1) . O (1) Algorithmique: théorie, tris, complexité, en 2 heures. • Tris par insertions: Complexité . Complexité de l’algorithme dans le pire cas Tris par insertion d’un tableau L de longueur n 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 20 / 29 procedure triInsertion(L, n) for j from 1 to n − 1 do clé ← L[j] i ←j −1 while i > 0 AND L[i] > clé do L[i + 1] ← L[i] i ←i −1 end while L[i + 1] ← clé end for return L end procedure Emily Clement . n − 1 fois . O (1) . O (1) . Pire cas: j − 1 fois . O (1) . O (1) Algorithmique: théorie, tris, complexité, en 2 heures. . O (1) • Tris par insertions: Complexité . Complexité de l’algorithme dans le pire cas Tris par insertion d’un tableau L de longueur n 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: procedure triInsertion(L, n) for j from 1 to n − 1 do clé ← L[j] i ←j −1 while i > 0 AND L[i] > clé do L[i + 1] ← L[i] i ←i −1 end while L[i + 1] ← clé end for return L end procedure . Coût final(pire cas) T (n) = n−1 P j=1 20 / 29 O (1) + j−1 P . n − 1 fois . O (1) . O (1) . Pire cas: j − 1 fois . O (1) . O (1) O (1) = n + n · O (n) = O n2 i=1 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. . O (1) • Diviser pour mieux régner . Concept général Problème 21 / 29 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Diviser pour mieux régner . Concept général Problème Diviser Sous-Problème 21 / 29 Emily Clement Sous-Problème Algorithmique: théorie, tris, complexité, en 2 heures. • Diviser pour mieux régner . Concept général Problème Diviser Sous-Problème Sous-Problème Régner Solution 21 / 29 Emily Clement Solution Algorithmique: théorie, tris, complexité, en 2 heures. • Diviser pour mieux régner . Concept général Problème Diviser Sous-Problème Sous-Problème Régner Solution Solution Combiner Solution au problème 21 / 29 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Diviser pour mieux régner . Concept général Problème Diviser Sous-Problème Sous-Problème Régner Solution Solution Combiner Solution au problème I 21 / 29 DIVISER: Les sous-problèmes sont des plus petites instances du même problème général Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Diviser pour mieux régner . Concept général Problème Diviser Sous-Problème Sous-Problème Régner Solution Solution Combiner Solution au problème 21 / 29 I DIVISER: Les sous-problèmes sont des plus petites instances du même problème général I REGNER: Si on réduit suffisamment les sous-problèmes, on arrive à les résoudre directement Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Diviser pour mieux régner . Concept général Problème Diviser Sous-Problème Sous-Problème Régner Solution Solution Combiner Solution au problème 21 / 29 I DIVISER: Les sous-problèmes sont des plus petites instances du même problème général I REGNER: Si on réduit suffisamment les sous-problèmes, on arrive à les résoudre directement I COMBINER: On combine ensuite les solutions des sous-problèmes pour résoudre le problème général Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Diviser pour mieux régner : Exemple . Trier une liste Pb initial: Trier [1, 10, 4, 2, 5, 3, 9, 8] 22 / 29 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Diviser pour mieux régner : Exemple . Trier une liste Pb initial: Trier [1, 10, 4, 2, 5, 3, 9, 8] Diviser Pb 1: Trier [1, 10, 4, 2] Pb 2: Trier [5, 3, 9, 8] 22 / 29 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Diviser pour mieux régner : Exemple . Trier une liste Pb initial: Trier [1, 10, 4, 2, 5, 3, 9, 8] Diviser Pb 1: Trier [1, 10, 4, 2] Pb 2: Trier [5, 3, 9, 8] Régner [1, 2, 4, 10] 22 / 29 Emily Clement [3, 5, 8, 9] Algorithmique: théorie, tris, complexité, en 2 heures. • Diviser pour mieux régner : Exemple . Trier une liste Pb initial: Trier [1, 10, 4, 2, 5, 3, 9, 8] Diviser Pb 1: Trier [1, 10, 4, 2] Pb 2: Trier [5, 3, 9, 8] Régner [1, 2, 4, 10] [3, 5, 8, 9] Combiner [1, 2, 3, 4, 5, 8, 9, 10] 22 / 29 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Diviser pour mieux régner : Exemple . Trier une liste Pb initial: Trier [1, 10, 4, 2, 5, 3, 9, 8] Diviser Pb 1: Trier [1, 10, 4, 2] Pb 2: Trier [5, 3, 9, 8] Régner [1, 2, 4, 10] [3, 5, 8, 9] Combiner [1, 2, 3, 4, 5, 8, 9, 10] . Application: le tri fusion I 22 / 29 Un algorithme très efficace (optimal dans le cas moyen) Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Diviser pour mieux régner : Exemple . Trier une liste Pb initial: Trier [1, 10, 4, 2, 5, 3, 9, 8] Diviser Pb 1: Trier [1, 10, 4, 2] Pb 2: Trier [5, 3, 9, 8] Régner [1, 2, 4, 10] [3, 5, 8, 9] Combiner [1, 2, 3, 4, 5, 8, 9, 10] . Application: le tri fusion 22 / 29 I Un algorithme très efficace (optimal dans le cas moyen) I Des appels récursifs Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Tris fusion: Exemple 9 23 / 29 7 8 Emily Clement 1 2 10 5 3 Algorithmique: théorie, tris, complexité, en 2 heures. • Tris fusion: Exemple 9 9 23 / 29 7 7 8 8 1 Emily Clement 1 2 10 2 5 3 10 5 3 Algorithmique: théorie, tris, complexité, en 2 heures. • Tris fusion: Exemple 9 9 9 23 / 29 7 7 7 8 8 1 2 10 1 8 Emily Clement 2 1 2 5 3 10 5 10 3 5 3 Régner Algorithmique: théorie, tris, complexité, en 2 heures. • Tris fusion: Exemple 9 9 23 / 29 7 7 8 8 1 2 10 1 2 5 3 10 5 3 9 7 8 1 2 10 5 3 9 7 8 1 2 10 5 3 Emily Clement Régner Algorithmique: théorie, tris, complexité, en 2 heures. • Tris fusion: Exemple 9 9 8 8 1 2 10 1 2 5 3 10 5 3 9 7 8 1 2 10 5 3 9 7 8 1 2 10 5 3 7 9 1 8 2 10 3 5 1 23 / 29 7 7 7 8 9 Emily Clement 2 3 5 Régner 10 Algorithmique: théorie, tris, complexité, en 2 heures. • Tris fusion: Exemple 9 9 7 8 8 1 2 10 1 2 5 3 10 5 3 9 7 8 1 2 10 5 3 9 7 8 1 2 10 5 3 7 9 1 8 2 10 3 5 1 7 1 23 / 29 7 8 2 9 3 Emily Clement 5 7 2 3 5 8 9 10 10 Régner Fusion! Algorithmique: théorie, tris, complexité, en 2 heures. Pause 24 / 29 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Tri fusion: Formalisation . Tri fusion Tri fusion sur un tableau L 1: procedure triFusion(L[0, · · · , n]) 2: if n ≤ 0 then 3: return L 4: else 5: return fusion(triFusion(L [0, · · · , n/2]), triFusion(L [n/2 + 1, · · · , n] ) 6: end if 7: end procedure . Explications . 25 / 29 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Tri fusion: Formalisation . Tri fusion Tri fusion sur un tableau L 1: procedure triFusion(L[0, · · · , n]) 2: if n ≤ 0 then 3: return L 4: else 5: return fusion(triFusion(L [0, · · · , n/2]), triFusion(L [n/2 + 1, · · · , n] ) 6: end if 7: end procedure . Explications I Si le tableau n’a qu’un élément: déjà trié. . 25 / 29 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Tri fusion: Formalisation . Tri fusion Tri fusion sur un tableau L 1: procedure triFusion(L[0, · · · , n]) 2: if n ≤ 0 then 3: return L 4: else 5: return fusion(triFusion(L [1, · · · , n/2]), L [n/2 + 1, · · · , n]) 6: end if 7: end procedure . Explications I Si le tableau n’a qu’un élément: déjà trié. I Sinon, séparer le tableau en 2 parties, à peu près égales. . 25 / 29 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. triFusion( • Tri fusion: Formalisation . Tri fusion Tri fusion sur un tableau L 1: procedure triFusion(L[0, · · · , n]) 2: if n ≤ 0 then 3: return L 4: else 5: return fusion(triFusion(L [1, · · · , n/2]), L [n/2 + 1, · · · , n]) 6: end if 7: end procedure . Explications I Si le tableau n’a qu’un élément: déjà trié. I Sinon, séparer le tableau en 2 parties, à peu près égales. I Trier récursivement les 2 parties avec l’algorithme du tri fusion. . 25 / 29 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. triFusion( • Tri fusion: Formalisation . Tri fusion Tri fusion sur un tableau L 1: procedure triFusion(L[0, · · · , n]) 2: if n ≤ 0 then 3: return L 4: else 5: return fusion(triFusion(L [1, · · · , n/2]), L [n/2 + 1, · · · , n]) 6: end if 7: end procedure triFusion( . Explications I 25 / 29 Si le tableau n’a qu’un élément: déjà trié. I Sinon, séparer le tableau en 2 parties, à peu près égales. I Trier récursivement les 2 parties avec l’algorithme du tri fusion. I Puis, fusionner les deux tableaux triés en un seul tableau trié (slide suivante). Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Tri fusion: Formalisation . Tri fusion Tri fusion sur un tableau L 1: procedure triFusion(L[0, · · · , n]) 2: if n ≤ 0 then 3: return L 4: else 5: return fusion(triFusion(L [1, · · · , n/2]), L [n/2 + 1, · · · , n]) 6: end if 7: end procedure triFusion( . Explications I 25 / 29 Si le tableau n’a qu’un élément: déjà trié. I Sinon, séparer le tableau en 2 parties, à peu près égales. I Trier récursivement les 2 parties avec l’algorithme du tri fusion. I Puis, fusionner les deux tableaux triés en un seul tableau trié (slide suivante). Coût total: O (n log n) Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Tri fusion: la fusion . Fusion de deux tableau triés Fusion de deux tableau triés A et B 1: procedure fusion(A [0, · · · , a − 1] , B [0, · · · , b − 1]) 2: if A est le tableau vide then 3: return B 4: else if B est le tableau vide then 5: return A 6: else if thenA[0] ≤ B[0] 7: return A [0] :: fusion(A [1, · · · , a − 1] , B) 8: else 9: return B [1] :: fusion(A, B [1, · · · , b − 1]) 10: end if 11: end procedure 26 / 29 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Tri fusion: la fusion . Fusion de deux tableau triés Fusion de deux tableau triés A et B 1: procedure fusion(A [0, · · · , a − 1] , B [0, · · · , b − 1]) 2: if A est le tableau vide then 3: return B 4: else if B est le tableau vide then 5: return A 6: else if thenA[0] ≤ B[0] 7: return A [0] :: fusion(A [1, · · · , a − 1] , B) 8: else 9: return B [1] :: fusion(A, B [1, · · · , b − 1]) 10: end if 11: end procedure Coût de la fusion 26 / 29 I Taille de l’entrée: I Coût total: Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Tri fusion: la fusion . Fusion de deux tableau triés Fusion de deux tableau triés A et B 1: procedure fusion(A [0, · · · , a − 1] , B [0, · · · , b − 1]) 2: if A est le tableau vide then 3: return B 4: else if B est le tableau vide then 5: return A 6: else if thenA[0] ≤ B[0] 7: return A [0] :: fusion(A [1, · · · , a − 1] , B) 8: else 9: return B [1] :: fusion(A, B [1, · · · , b − 1]) 10: end if 11: end procedure Coût de la fusion 26 / 29 I Taille de l’entrée: taille du tableau A, a et du tableau B, b. I Coût total: Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Tri fusion: la fusion . Fusion de deux tableau triés Fusion de deux tableau triés A et B 1: procedure fusion(A [0, · · · , a − 1] , B [0, · · · , b − 1]) 2: if A est le tableau vide then 3: return B 4: else if B est le tableau vide then 5: return A 6: else if thenA[0] ≤ B[0] 7: return A [0] :: fusion(A [1, · · · , a − 1] , B) 8: else 9: return B [1] :: fusion(A, B [1, · · · , b − 1]) 10: end if 11: end procedure Coût de la fusion 26 / 29 I Taille de l’entrée: taille du tableau A, a et du tableau B, b. I Coût total: O (a + b) Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Théorème sur la complexité de l’algorithme de tris dans le cas moyen . Tris par comparaison 27 / 29 I On assimile la complexité dans le temps au nombre de comparaisons nécessaires. I On ne peut faire mieux (moyen cas) que O (n log n) où n est la taille du tableau. I Le tri fusion est un tri asymptotiquement optimal. Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. • Théorème sur la complexité de l’algorithme de tris dans le cas moyen . Tris par comparaison I On assimile la complexité dans le temps au nombre de comparaisons nécessaires. I On ne peut faire mieux (moyen cas) que O (n log n) où n est la taille du tableau. I Le tri fusion est un tri asymptotiquement optimal. . Tableau de comparaison (temps asymptotique 27 / 29 nom tri rapide cas optimal n log n cas moyen n log n pire cas n2 tri fusion tri par tas tri par insertion tri à bulles tri stupide n log n n log n n n n n log n n log n n2 n2 n! n log n n log n n2 n2 n! Emily Clement ) complexité spatiale log n (moyen cas) n (pire cas) n 1 1 1 1 Algorithmique: théorie, tris, complexité, en 2 heures. • UFC que choisir? . Tri lents I Tri par insertion: Le plus rapide pour les entrées de petites tailles, ou déjà presque triées car très simple. I Tri à bulles: Peu efficace. Intérêt pédagogique. I Tri par tas: lent en comparaison des autres algorithmes car la constante devant n log n est très grande, mais efficace asymptotiquement... Il est utilisé quand le temps prime moins que l’espace. (tri "en place"). I Tri stupide: Tester des permutations ... à ne pas faire. . Tris rapides I Tri fusion: Rapide, demande de la place en espace mémoire. I Tri rapide: Complexité quasi-indépendante des données avec quelques optimisations ... . Tri fusion vs tri insertion On va voir la différence entre tri fusion et tri insertion pour une distribution aléatoire de nombres. tri fusion vs tri insertion 28 / 29 Emily Clement Algorithmique: théorie, tris, complexité, en 2 heures. Pour finir: Une référence . Algorithmique de Cormen, Leiserson, Rivest, Stein. 29 / 29 Emily Clement I Algorithmiques générales I Complexité, algorithmiques probabiliste I Tri et rangs I Structure de donnés I Algorithmique avancée et analyse I Algorithmique des graphes I etc... Algorithmique: théorie, tris, complexité, en 2 heures.