TRI 11292020 IFT 1020 1 CODES Tableau java
TRI 11/29/2020 IFT 1020 1
CODES • • Tableau. java Selection. java Horloge. java Fusion. java 11/29/2020 IFT 1020 2
OBJECTIFS • Étudier et comparer la complexité de deux algorithmes de tri • Remarquer que deux algorithmes différents qui accomplissent la même tâches peuvent différer grandement en temps d’exécution • Utiliser la notation Grand-O • Apprendre comment estimer et comparer la performance des algorithmes • Apprendre à mesurer le temps d’exécution d’un programme 11/29/2020 IFT 1020 3
Trier un tableau d’entiers… • Le tri par sélection cherche le plus petit élément à répétition dans le restant du tableau et le déplace vers l’avant. 11/29/2020 IFT 1020 4
Trier un tableau d’entiers… • Ordre original 11 9 17 5 12 • Trouve le plus petit élément et l’interchange avec le premier. 5 11/29/2020 9 17 11 12 IFT 1020 5
Trier un tableau d’entiers… • Trouve le plus petit suivant. Il est déjà à la bonne place ! 5 9 17 11 12 • Trouve le plus petit suivant et l’échange avec le premier de la section non triée. 5 11/29/2020 9 11 17 12 IFT 1020 6
Trier un tableau d’entiers • Répéter 5 9 11 12 17 • Quand la portion non triée est de taille 1, c’est fini ! 5 11/29/2020 9 11 12 17 IFT 1020 7
Allons voir la classe Selection… 11/29/2020 IFT 1020 8
Analyse de performance du tri par sélection • On veut mesurer le temps que prend l’algorithme pour s’exécuter • On doit exclure le temps de chargement et le temps de sortie du programme. 11/29/2020 IFT 1020 9
Mesure du temps utilisé par le tri par selection • On va créer une classe pour mesurer le temps d’exécution d’un algorithme • La classe pourra démarrer et stopper une horloge ainsi que donner le temps écoulé jusqu’à maintenant • Elle utilisera la méthode : System. current. Time. Millis 11/29/2020 IFT 1020 10
Mesurer le temps d’un algorithme • Création de l’objet Horloge üDémarrer l’Horloge juste avant de lancer l’algorithme üStopper l’Horloge juste après l’exécution de l’algorithme üLire le temps qui s’est écoulé sur l’Horloge 11/29/2020 IFT 1020 11
Allons voir le code de la classe Horloge… 11/29/2020 IFT 1020 12
Le tri par sélection sur plusieures tailles de tableau N 10000 20000 30000 40000 50000 60000 11/29/2020 Temps (ms) 441 1712 3816 6870 10635 15963 IFT 1020 13
Le tri par sélection sur plusieures tailles de tableau 11/29/2020 IFT 1020 14
Le tri par sélection • Doubler la taille du tableau fait plus que doubler le temps nécessaire pour le trier. 11/29/2020 IFT 1020 15
Analyse de l’algorithme de tri par sélection… • Dans un tableau de taille n, comptons combien de fois qu’un élément du tableau est visité. ØPour trouver le plus petit, on visite n éléments + 2 visites pour l’échange ØPour trouver le plus petit suivant, on visite (n-1) éléments + 2 visites pour l’échange. ØPour les 2 derniers éléments, on visite 2 fois (comparaison des 2 derniers pour établir lequel est le plus petit) + 2 pour l’échange. 11/29/2020 IFT 1020 16
Analyse de l’algorithme de tri par sélection… • Le nombre de visites total : Øn + 2 + (n-1) + 2 + (n-2) +2 +. . . + 2 ØQui se simplifie par n 2 /2 + n/2 - 3 Øn/2 - 3 est petit à comparer à n 2 /2, alors on peut l’ignorer ØOn peut aussi ignorer la multiplication par 1/2 11/29/2020 IFT 1020 17
Analyse de l’algorithme de tri par sélection • Le nombre de visites est dans l’ordre de n 2 • Avec la notation Grand-O: Le nombre de visite est O(n 2) • Cela veut dire que si on multiplie le nombre d’éléments par 2, on augmente le temps de calcul par 4 11/29/2020 IFT 1020 18
Tri par fusion… • On divise le tableau en deux parties et on trie chacun d’eux 11/29/2020 IFT 1020 19
Tri par fusion… • Ensuite, on fusionne les deux parties triées pour reconstruire le tableau trié 11/29/2020 IFT 1020 20
Tri par fusion • Dramatiquement plus rapide que le tri par sélection ! 11/29/2020 IFT 1020 21
Allons voir le code de Fusion. . . 11/29/2020 IFT 1020 22
Tri par fusion vs. sélection N 10000 20000 30000 40000 50000 60000 11/29/2020 Selection 441 1712 3816 6870 10635 15963 IFT 1020 Fusion 30 30 50 100 131 23
11/29/2020 IFT 1020 24
Analyse du tri par fusion… • Chaque étape de la fusion de deux tableaux ajoute un élément au tableau temporaire. On a donc 3 visites (deux pour comparer les éléments de premier et deuxiem et une pour t), soit 3 n visites au total où n est la longueur de t. • De plus avant de commencer, il a fallu copier les éléments t dans premier et deuxiem, ce qui donne 2 n visites, pour un grand total de 5 n. 11/29/2020 IFT 1020 25
Analyse du tri par fusion… • Si on dénote avec T(n) le nombre de visites pour trier un intervalle de n éléments pendant le processus de tri, nous obtenons alors T(n) = T(n/2) + 5 n • Parce que trier chaque moitié prend T(n/2) visites. – Ici on assume un tableau de taille paire, sinon on aurait un tableau de taille (n-1)/2 et un autre de taille (n+1)/2. Ce détail n’affecte pas nos calculs mais nous assumerons une taille paire, n = 2 m. 11/29/2020 IFT 1020 26
Analyse du tri par fusion… • La formule T(n) = 2 T(n/2) + 5 n ne révèle pas la relation entre n et T(n). Pour mieux voir la relation, évaluons T(n/2) en utilisant la même formule : T(n/2) = 2 T(n/4) + 5 n/2 • Et donc, T(n) = 2 x 2 T(n/4) + 5 n 11/29/2020 IFT 1020 27
Analyse du tri par fusion… • Encore une fois, T(n/4) = 2 T(n/8) + 5 n/4 • Ainsi, T(n) = 2 x 2 T(n/8) + 5 n • Ce qui se généralise de 2, 4, 8, pour n’importe quelle puissance de 2 T(n) = 2 k. T(n/2 k) + 5 nk 11/29/2020 IFT 1020 28
Analyse du tri par fusion • On assume n = 2 m, ainsi pour k = m, T(n) = 2 m. T(n/2 m) + 5 nm = n. T(1) + 5 nm = n + 5 n log 2(n) • Puisque n = 2 m, on a que m = log 2(n) • Pour établir l’ordre, on peut laisser tomber le plus petit facteur, n, ainsi que la constante 5. Puisque tous les log sont reliés par des facteurs constants, on laisse aussi tomber la base du log, par exemple log 2(x) = log 10(x) / log 10(2) = log 10(x) x 3. 32193 • Le tri par fusion est donc dans : O(n log n) 11/29/2020 IFT 1020 29
- Slides: 29