La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

INF1101 Algorithmes et structures de données1 Cours 6 Algorithmes de tri.

Présentations similaires


Présentation au sujet: "INF1101 Algorithmes et structures de données1 Cours 6 Algorithmes de tri."— Transcription de la présentation:

1 INF1101 Algorithmes et structures de données1 Cours 6 Algorithmes de tri

2 INF1101 Algorithmes et structures de données2 Plan du cours 6 I. Notions de base II. Les tris simples III. Mergesort IV. Quicksort

3 INF1101 Algorithmes et structures de données3 I – Notions de base: lutilité des tris Problématique: Un grand nombre de problèmes réels ont recours à la recherche déléments dans un vecteur (tableau). Cette recherche devient quasiment impossible lorsquelle seffectue dans un vecteur désordonné, doù le besoin de trier les vecteurs avant dy effectuer un traitement.Un grand nombre de problèmes réels ont recours à la recherche déléments dans un vecteur (tableau). Cette recherche devient quasiment impossible lorsquelle seffectue dans un vecteur désordonné, doù le besoin de trier les vecteurs avant dy effectuer un traitement.Exemples: Les mots dans un dictionnaire.Les mots dans un dictionnaire. Fichiers dans un répertoire de PC.Fichiers dans un répertoire de PC. Les CD répertoriés dans un magasin de musique.Les CD répertoriés dans un magasin de musique. Les sigles des cours de Poly offert pour une session.Les sigles des cours de Poly offert pour une session.

4 INF1101 Algorithmes et structures de données4 Définitions Tri interne : se dit d'un algorithme qui n'utilise pas de tableau temporaire pour effectuer le tri.Tri interne : se dit d'un algorithme qui n'utilise pas de tableau temporaire pour effectuer le tri. Tri externe : se dit d'un algorithme de tri qui nécessite l'utilisation d'un tableau temporaire.Tri externe : se dit d'un algorithme de tri qui nécessite l'utilisation d'un tableau temporaire.

5 INF1101 Algorithmes et structures de données5 II – Les tris simples Tri par sélectionTri par sélection Tri en bulleTri en bulle Tri par insertionTri par insertion

6 INF1101 Algorithmes et structures de données6 Tri par sélection Idée : Cette technique consiste à parcourir séquentiellement le vecteur à trier. À l'itération i, la plus petite valeur du tableau est interchangée avec la valeur située dans la case d'indice i.Idée : Cette technique consiste à parcourir séquentiellement le vecteur à trier. À l'itération i, la plus petite valeur du tableau est interchangée avec la valeur située dans la case d'indice i.

7 INF1101 Algorithmes et structures de données7 [1][2][4][3][4] Exemple dexécution du tri par sélection i min = [0] i = 0 123

8 INF1101 Algorithmes et structures de données8 Programmation du tri par sélection template template void TriSelection( vector & Tableau, int n) { int i, j, min; int i, j, min; T Tmp; T Tmp; for ( i=0 ; i

9 INF1101 Algorithmes et structures de données9 Tri en bulle Idée : Les petits éléments du tableau « remontent » (comme des bulles) vers le début du tableau pour atteindre leur position finale. Les plus « légers » remontent le plus rapidement. Une fois tous les éléments remontés, le tableau est trié.Idée : Les petits éléments du tableau « remontent » (comme des bulles) vers le début du tableau pour atteindre leur position finale. Les plus « légers » remontent le plus rapidement. Une fois tous les éléments remontés, le tableau est trié.

10 INF1101 Algorithmes et structures de données10 Exemple dexécution du tri en bulle i : comparaison de deux éléments deux éléments Position de i

11 INF1101 Algorithmes et structures de données11 Programmation du tri en bulle template template void TriBulle( vector & Tableau, int n) { int i,j; T Tmp; for ( i=0; ii; j--) if ( Tableau[j-1]> Tableau[j]) { Tmp = Tableau[j-1]; Tableau[j-1] = Tableau[j]; Tableau[j] = Tmp; }}

12 INF1101 Algorithmes et structures de données12 Tri par insertion Idée : Cette stratégie est semblable à la méthode qu'utilise naturellement un joueur de cartes pour organiser sa main. À chaque étape, une partie du tableau est déjà ordonnée et une nouvelle valeur est insérée à l'endroit approprié.Idée : Cette stratégie est semblable à la méthode qu'utilise naturellement un joueur de cartes pour organiser sa main. À chaque étape, une partie du tableau est déjà ordonnée et une nouvelle valeur est insérée à l'endroit approprié.

13 INF1101 Algorithmes et structures de données13 Exemple dexécution par insertion i

14 INF1101 Algorithmes et structures de données14 Programmation du tri par insertion template template void TriInsertion(vector & Tableau, int n) { int i,j; T Tmp; for ( i=1;i=0) && (Tmp =0) && (Tmp

15 INF1101 Algorithmes et structures de données15 Analyse des tris simples Meilleur cas: tableau déjà triéMeilleur cas: tableau déjà trié Cas moyen: tableau aléatoireCas moyen: tableau aléatoire Pire cas: tableau trié à lenversPire cas: tableau trié à lenvers

16 INF1101 Algorithmes et structures de données16 Comparaison des tris simples Pire casCas moyenMeilleur cas Tri par sélection Tri en bulle Tri par insertion

17 INF1101 Algorithmes et structures de données17 III – Le mergesort Problématique : Le tri est effectué en utilisant la technique de diviser- et-conquérir, en divisant le problème en deux sous- problèmes de complexité résolus récursivement, offrant une complexité globale deLe tri est effectué en utilisant la technique de diviser- et-conquérir, en divisant le problème en deux sous- problèmes de complexité résolus récursivement, offrant une complexité globale de L'algorithme de tri Mergesort :L'algorithme de tri Mergesort : 1.Si le nombre déléments à trier == (0 ou 1), retourner. 2.Trier récursivement la première et deuxième moitié séparément. 3.Regrouper les deux parties triées dans un nouveau groupe trié.

18 INF1101 Algorithmes et structures de données18 MergeSort ActrBctr Cctr

19 INF1101 Algorithmes et structures de données19 La fonction Mergesort // Routine interne : Tableau: le vecteur déléments // tmpTab: vecteur temporaire pour les résultats // left, right: indices gauche et droit des tableaux template template void mergeSort(vector & Tableau, vector & tmpTab, int left, int right) int left, int right){ if (left < right) if (left < right) { int center = (left+right)/2; int center = (left+right)/2; mergeSort(Tableau, tmpTab, left, center) mergeSort(Tableau, tmpTab, left, center) mergeSort(Tableau, tmpTab, center+1, right); mergeSort(Tableau, tmpTab, center+1, right); merge(Tableau, tmpTab, left, center+1, right); merge(Tableau, tmpTab, left, center+1, right); }} template // Fonction principale void mergeSort(vector & Tableau) { vector tmpTab(Tableau.size()); vector tmpTab(Tableau.size()); mergeSort(Tableau,tmpTab,0,Tableau.size()-1); mergeSort(Tableau,tmpTab,0,Tableau.size()-1);}

20 INF1101 Algorithmes et structures de données20 La fonction Merge // Routine interne : Tableau: le vecteur déléments // tmpTab: vecteur pour les résultats du merge // leftPos: indice gauche du tableau // rightPos: indice du début de la 2ieme demi // rightEnd: indice droit du tableau template template void merge(vector & Tableau, vector & tmpTab, int leftPos, int rightPos, int rightEnd) { int leftEnd = rightPos-1; int leftEnd = rightPos-1; int tmpPos = leftPos; int tmpPos = leftPos; int numElements = rightEnd – leftPos +1; int numElements = rightEnd – leftPos +1; //Boucle principale //Boucle principale while( leftPos<=leftEnd && rightPos<=rightEnd) while( leftPos<=leftEnd && rightPos<=rightEnd) if(Tableau[leftPos]

21 INF1101 Algorithmes et structures de données21 La fonction Merge while(leftPos<=leftEnd) // Copie le reste de la 1ere demie while(leftPos<=leftEnd) // Copie le reste de la 1ere demie tmpTab[tmpPos++]=Tableau[leftPos++]; tmpTab[tmpPos++]=Tableau[leftPos++]; while(rightPos<=rightEnd) // Copie le reste de la 2ieme demie while(rightPos<=rightEnd) // Copie le reste de la 2ieme demie tmpTab[tmpPos++]=Tableau[rightPos++]; tmpTab[tmpPos++]=Tableau[rightPos++]; // Copie tmpTableau dans Tableau // Copie tmpTableau dans Tableau for( int i=0; i

22 INF1101 Algorithmes et structures de données22 IV - Le tri rapide (Quicksort) Problématique : Le tri est une tâche importante en programmation. Il est donc essentiel que celui- ci soit effectué avec efficacité et rapidité.Le tri est une tâche importante en programmation. Il est donc essentiel que celui- ci soit effectué avec efficacité et rapidité. L'algorithme de tri Quicksort tente d'atteindre cet objectif par l'utilisation du concept de récursivité.L'algorithme de tri Quicksort tente d'atteindre cet objectif par l'utilisation du concept de récursivité.

23 INF1101 Algorithmes et structures de données23 Le tri rapide (suite) Idée générale : Dans cet algorithme, l'exécution du tri est simplement déléguée à une série d'appels récursifs. Une fonction de partitionnement est d'abord appelée. Cette fonction choisit arbitrairement un pivot qui est utilisé pour subdiviser le tableau en deux parties: 1.une partie de gauche où tous les éléments ont une valeur plus petite ou égale au pivot; 2.une partie de droite où tous les éléments ont une valeur plus grande ou égale au pivot. Par la suite, les deux parties ainsi obtenues sont triées par deux appels récursifs à la fonction de tri rapide. En plus de la fonction principale de tri rapide, une autre fonction est donc requise: celle qui procède à la partition du tableau.

24 INF1101 Algorithmes et structures de données24 La fonction Quicksort template template void QuickSort(vector & tableau, int inf, int sup) { int milieu; if (sup>inf) // s'il y a au moins 2 éléments { milieu = Partition(tableau, inf, sup); // trier la partie de gauche QuickSort(tableau, inf, milieu); // trier la partie de droite QuickSort(tableau, milieu+1, sup); }}

25 INF1101 Algorithmes et structures de données25 Exemple dexécution de Partition i i j Pivot = Tab[2] = 5 Premier appel Quicksort(a,0,4)

26 INF1101 Algorithmes et structures de données26 La fonction Partition template template int Partition(vector & tableau, int inf, int sup) { T pivot, tempo; int i,j; pivot = tableau[(sup+inf)/2]; i = inf-1; j = sup+1; // Suite a la page suivante

27 INF1101 Algorithmes et structures de données27 La fonction Partition (suite) while ( ipivot); } while (tableau[j]>pivot); // Permuter les éléments qui ne sont pas // Permuter les éléments qui ne sont pas // à leur place // à leur place if ( i

28 INF1101 Algorithmes et structures de données28 Complexité du Quicksort Cas moyen et meilleur cas Complexité du Quicksort dans le cas moyen et dans le meilleur cas.Complexité du Quicksort dans le cas moyen et dans le meilleur cas. Pire cas Complexité du Quicksort dans le pire cas:Complexité du Quicksort dans le pire cas:


Télécharger ppt "INF1101 Algorithmes et structures de données1 Cours 6 Algorithmes de tri."

Présentations similaires


Annonces Google