leçon 10 mesurer lefficacité des algorithmes. plan du cours comment comparer ? comparer pgm vs...
TRANSCRIPT
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 1 1 1 1 1 1
log2n 3 6 9 13 16 19
N 10 102 103 104 105 106
N log n 30 664 9965 105 106 107
N2 102 104 106 108 1010 1012
N3 103 106 109 1012 1015 1018
2n 103 1030 10301 103010 1030103 10301030
0
25
50
75
100
0 5 10 15 20 25
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)
• De complexité O(n)
• 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
éléments <= X X éléments > XCe à quoi il faut arriver
X > X
À une certaine étape du processus
<= X ???
Premier Pivot Dernier
Premier Dernierp 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<= XPremier Dernier
p
éléments <= X X éléments > XPremier Pivot
En échangean T[Premier] et T[p] on obtient
Dernier
Le code
Analyse de complexité• Tri bulle ou Tri sélection
– 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
17 29858665170 122 9552
84 54380 44 6816 77311 3932 45 269110 24 57 89363
17298581266517029552845438044681677311393245269110245789363
Première passe : 100
17 298
58
665170 12
2
95
52
84
5
43
80 44
68
16 77311 39
32
45 269110 24 57 893
63
Première passe : résultat
70 8010 5111 9112
2 5232 43 733 63 844424 955 45 6616
26177 57
8 58 6829 39 89
70801051119112252324373363844424955456616261775785868293989
Deuxième passe : 101
70 8010 51
11
91
12
2
52
32 43
733
63
8444
24
95
5 45
66
16
26
17
7
57
8
58
6829
39
89
Deuxième passe : résultat
NP complétude
• Lisez les articles distribués en classe