Mesurer l’efficacité des algorithmes leçon 10 Mesurer l’efficacité des algorithmes
Plan du cours Comment comparer ? Comparer pgm vs algorithme La taille d’un problème Le temps d’exécution Grand O Temps vs espace mémoire L’efficacité des algorithmes de fouille L’efficacité des algorithmes de tri NP complétude
Comment comparer ? 2 algorithmes faisant la même tâche Lequel est plus performant? Temps d’exécution de leur implémentation Quelles données utiliser? On cherche des différences significatives
Programme vs algorithme Mieux vaut analyser l’algo Le pgm fait des choix style La machine Certaines opérations sont + rapides Les données testées L’analyse de la complexité doit faire abstraction des 3 éléments ci-dessus
La taille d’un problème La complexité peut s’exprimer en terme de la taille du problème: Peut référer aux nombres d’éléments à traiter Un algorithme pour trier ou fouiller une liste de N nombres Algorithme de Hanoi pour N tours: N sera la taille Peut référer à la grandeur d’une quantité traitée Un algorithme pour déterminer la primalité d’un nombre: N sera le nombre
Temps d’exécution Parler du nombre d’instructions exécutées Prendre le groupe d’instructions les + exécutées S’exprime souvent en terme de la taille du problème For(i=1; i<=n; i++) for (j=1; j<=i; j++) for (k=1; k<=5; k++) Exécuter tâche T Quelle est la complexité de cet algorithme, s’il faut t unités de temps pour effectuer T ?
Grand O (pour ordre de grandeur) On doit exprimer comment la complexité croit en fonction de la taille du problème C’est une question de proportionnalité Les complexités n et 2n+5 sont du même ordre de grandeur n et n2 sont d’ordres différents Les ordres de grandeur O(log n) O(n) O(n log n) O(nk) O(2n) Une complexité O(f(n)) signifie un temps d’exécution pas plus grand que c*f(n).
10 100 1000 10000 100000 1000000 1 log2n 3 6 9 13 16 19 N 102 103 104 105 106 N log n 30 664 9965 107 N2 108 1010 1012 N3 109 1015 1018 2n 1030 10301 103010 1030103 10301030
Règles O(f(n)) = O(f(n)+g(n)), si O(f(n))> O(g(n)) O(f(n)) = O(k*f(n)) O(f(n))+O(g(n)) = O(f(n)+g(n))
Complexité Analyse des pires cas Analyse en moyenne
Les algorithmes de fouille Séquentielle O(n) Binaire O(log n)
Les algorithmes de tri De complexité O(n2) De complexité O(n logn) Une adresse intéressante: http://lwh.free.fr/pages/algo/tri/tri.htm
Trier un tableau Le tri rapide: tri récursif comportant 3 étapes Étape 1: Partition autour du pivot Un élément pivot du tableau T à trier est choisi. Le tableau T est réorganisé afin que: les éléments <= au pivot se retrouvent avant le pivot Les élémenst > pivot se retrouvent après le pivot Étape2 Un appel récursif est demandé pour trier les éléments avant le pivot Étape 3 Un appel récursif est demandé pour trier les éléments après le pivot La conséquence de l’étape 1 est que l’élément pivot se retrouve à sa position finale (Lorsque T est complètement trié).
Tri Rapide
Fonctionnement de la fonction pivot 1/2 Ce à quoi il faut arriver éléments <= X X éléments > X Premier Pivot Dernier À une certaine étape du processus X <= X > X ??? Premier Dernier p k p pointe sur le dernier élément connu pour lequel T[p] <= Pivot à sa droite, les éléments sont >= Pivot. k pointe sur le premier élément non encore traité if (T[k] <= Pivot) { p++; Échanger(T[k], T[p]); }
Fonctionnement de la fonction pivot 2/2 Après avoir parcouru le tableau X <= X > X Premier Dernier p En échangean T[Premier] et T[p] on obtient éléments <= X X éléments > X Premier Pivot Dernier
Le code
Analyse de complexité Tri bulle ou Tri sélection Tri rapide O(N2) Si N=106 N2 = 1012 Si 106 op /sec exige 11,5 jours Tri rapide O(N log(N)) Si N=106 Nlog(N) = 6N Si 106 op /sec exige 6 secondes
Première passe : 100 17 8 29 58 12 51 66 2 70 95 52 84 5 43 80 44 68 16 7 73 11 39 32 45 26 91 10 32 63 24 10 91 52 3 24 45 26 57 68 89 57 89 80 11 2 73 44 5 16 7 58 39 3 70 51 12 43 84 95 66 17 8 29 63
Première passe : résultat 32 63 10 91 52 3 24 45 26 57 68 89 80 11 2 73 44 5 16 7 58 39 70 51 12 43 84 95 66 17 8 29
Deuxième passe : 101 70 10 80 11 51 12 91 2 52 32 43 73 3 63 84 44 24 95 5 45 66 16 26 17 7 8 17 57 7 16 58 8 58 5 12 29 45 57 68 89 68 3 11 26 39 44 52 66 73 84 95 29 39 2 10 24 32 43 51 63 70 80 91 89
Deuxième passe : résultat 8 17 7 16 58 5 12 29 45 57 68 89 3 11 26 39 44 52 66 73 84 95 2 10 24 32 43 51 63 70 80 91
NP complétude Lisez les articles distribués en classe