1 / 30

Les Algorithmes de Tri

Les Algorithmes de Tri. Introduction. Tri par Sélection. Tri par Insertion. Tri Bulles. Tri Rapide. mai 2012. A. Lotfi. 0. Introduction. 0 .1. Définition. «  trier » signifie « répartir en plusieurs classes selon certains critères  ».

Download Presentation

Les Algorithmes de Tri

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Les Algorithmes de Tri Introduction Tri par Sélection Tri par Insertion Tri Bulles Tri Rapide mai 2012 A. Lotfi

  2. 0 Introduction 0.1 Définition • « trier » signifie « répartir en plusieurs classes selon certains critères ». • De manière plus restrictive, le terme de « tri » en algorithmique est très souvent attaché au processus de classement d'un ensemble d'éléments dans un ordre donné. • Par exemple, trier N entiers dans l'ordre croissant, ou N noms dans l'ordre alphabétique. Tout ensemble muni d'un ordre total peut fournir une suite d'éléments à trier. • Le tri est sans doute le problème fondamental de l’algorithmique • 1. plus de 25% des CPU cycles sont dans les tris • 2. le tri est fondamental à beaucoup d’autres problèmes, par exemple recherche binaire.

  3. 0 Introduction 0.2 Utilité • Ainsi donc, après le tri, beaucoup de problèmes deviennent faciles à résoudre. Par exemple : • 1. Unicité d’éléments: après le tri tester les éléments adjacents • 2. Une fois le tri fait, on peut déterminer le kème plus grand élément en O(1) • Les problèmes de tri discutés dans ce cours sont ceux où l’ensemble des données à trier se trouvent en mémoire centrale. • Les problèmes de tri dont les données sont en mémoire secondaire ne sont pas discutés dans ce cours.

  4. 0 Introduction 0.3 Présentation du problème • Le tri consiste à réarranger une permutation of n objets de telle manière que : • Tri Croissant • Tri Déroissant • Comment trier ? Il existe plusieurs manières de faire le tri

  5. 1 Tri par Sélection 1.1 Principe • Répéter • 1. chercher le plus grand (le plus petit) élément => Sélection • 2. le mettre à la fin (au début) 1 i n t Les i-1 petits éléments triés Le plus petit élément du reste

  6. 1 Tri par Sélection 1.2 Exemple On veut trier les éléments: 42, 20, 17, 13, 28, 14, 23 et 15 i=1 i=2 i=3 i=4 i=5 i=6 i=7

  7. 1 Tri par Sélection

  8. 1 Tri par Sélection 1.3 Implémentation • ProcédureTriSelection(t : Tableau[1 .. Max] d’entiers, nbElements : naturel) • i, k, indMin : naturel; • temp : entier; • Début • Pour i=1 ànbElements-1 faire • /* recherche du numéro du minimum */ • indMin = i; • Pour k=i+1 ànbElementsfaire • si (t[k] < t[indMin]) alors • indMin = k; • Fin Si • Fin Pour • /* échange des valeurs entre la case courante et le minimum */ • temp = t[i]; • t[i] = t[indMin]; • t[indMin] = tmp; • Fin Pour • Fin

  9. 1 Tri par Sélection 1.4 Complexité Le pire des cas, le plus mauvais cas et le cas moyen sont pareils (pourquoi?) Pour trouver le plus petit éléments, (n-1) itérations sont nécessaires, pour le 2ème plus petit élément, (n-2) itérations sont effectuées, .… Pour trouver le dernier plus petit élément, 0 itérations sont effectuées. Le nombre d’itérations que l’algorithme effectue est donc: Si par contre, nous prenons comme mesure d’évaluations le nombre de mouvement de données, alors l’algorithme en effectue n-1, car il y a exactement un échange par itération.

  10. 2 Tri par Insertion 2.1 Principe Insertion du prochain élément dans la partie qui est déjà triée précédemment La partie de départ qui est triée est le premier élément Il se pourrait qu’on aà déplacer plusieurs éléments pour l’insertion 1 i n t Les i-1 premiers éléments déjà triés Les éléments non triés Eléments à insérer

  11. 2 Tri par Insertion 2.2 Exemple On veut trier les éléments: 42, 20, 17, 13, 28, 14, 23 et 15 i=1 i=2 i=3 i=4 i=5 i=6 i=7

  12. 2 Tri par Insertion

  13. 2 Tri par Insertion 2.3 Implémentation • ProcedureTriInsertion(t : Tableau[1 .. Max] d’entiers, nbElements : naturel) • i, k : naturels; • temp : entier; • Début • Pour i=2 ànbElementsfaire • temp = t[i]; • k = i; • Tant que (k > 1 et t[k-1] > temp) faire • t[k] = t[k - 1]; • k = k - 1; • Fin tant que • t[k] = temp; • Fin pour • Fin

  14. 2 Tri par Insertion 2.4 Complexité Comme nous n’avons pas nécessairement à scanner toute la partie déjà triée, le pire cas, le meilleur cas et le cas moyen peuvent différer entre eux. Meilleur des cas: Chaque élément est inséré à la fin de la partie triée. Dans ce cas, nous n’avons à déplacer aucun élément. Comme nous avons à insérer (n-1) éléments, chacun générant seulement une comparaison, la complexité est en O(n). Pire des cas: Chaque élément est inséré au début de la partie trié. Dans ce cas, tous les éléments de la partie triée doivent être déplacés à chaque itération. La ième itération génère (i-1) comparaisons et échanges de valeurs:

  15. 2 Tri par Insertion 2.4 Complexité Note: C’est le même nombre de comparaison avec le tri par sélection, mais effectue plus d’échanges de valeurs. Si les valeurs à échanger sont importantes, ce nombre peut ralentir cet algorithme d’une manière significative. Cas moyen : Si on se donne une permutation aléatoire de nombre, la probabilité d’insérer l’élément à la kème position parmi les positions (0,1,2, …, i-1) est 1/i. Par conséquent, le nombre moyen de comparaisons à la ième itération est: En sommant sur i, on obtient:

  16. 3 Tri par Bulles 3.1 Principe • La stratégie de cet algorithme est : • 1. Parcourir le tableau en comparant deux à deux les éléments successifs, permuter s'ils ne sont pas dans l'ordre • 2. Répéter tant que des permutations sont effectuées. Le plus petit remonte en surface 1 i n t Les i-1 premiers éléments déjà triés Les éléments non triés Niveau 0

  17. 3 Tri par Bulles 3.2 Exemple Même exemple i=1 i=2 k=8 k=7 k=6 k=5 k=4 k=3 k=8 k=7 k=6 k=5 k=4 k=3 k=2

  18. 3 Tri par Bulles 3.2 Exemple Même exemple i=3 i=4 k=8 k=7 k=6 k=5 k=8 k=7 k=6 k=5 k=4

  19. 3 Tri par Bulles 3.2 Exemple Même exemple i=7 i=5 i=6 k=8 k=7 k=6 k=8 k=8 k=7

  20. 3 Tri par Bulles

  21. 3 Tri par Bulles 3.4 Complexité Le tri à bulles est l'un des tris les plus lents, si ce n'est le plus lent. C'est pour cette raison que son utilisation se fait très rare et cet algorithme reste très critiqué. Meilleur des cas: (une seule itération) est atteint quand le tableau est déjà trié. Dans ce cas,la complexité est en O(n). Pire des cas: (n itérations) est atteint lorsque le plus petit élément est à la fin du tableau. La complexité est alors O(n²). Cas Moyen: En moyenne, la complexité est aussi O(n²). En effet, le nombre d'échanges de paires d'éléments successifs est égal au nombre d'inversions, c'est-à-dire de couples (i,j) tels que i < j et T(i) > T(j). Ce nombre est indépendant de la manière d'organiser les échanges. Lorsque l'ordre initial des éléments du tableau est aléatoire, il est en moyenne égal à .

  22. 3 Tri par Bulles 3.3 Implémentation • ProcédureTriBulles(t : Tableau[1 .. Max] d’entiers, nbElements : Naturel) • i, k : Naturels; • Début • Pour i=1 à nbElements-1 faire • Pour k=nbElementsà i+1 faire • Si t[k]<t[k-1] alors • Echanger(t[k],t[k-1]); • Fin si • Fin Pour • Fin Pour • Fin

  23. 4 Tri Rapide 4.1 Principe • Inventé en 1960 par Sir Charles Antony Richard Hoare • Consiste à: • Choisir un élément « pivot » • Diviser l’ensemble à deux sous-ensembles • Répéter la procédure récursivement pivot Éléments inférieurs au pivot Éléments supérieurs au pivot 1 n t Pivot’ Pivot’’

  24. 4 Tri Rapide 4.2 Exemple 42

  25. 4 Tri Rapide 4.2 Exemple 15

  26. 4 Tri Rapide 4.2 Exemple 14 17 28

  27. 4 Tri Rapide

  28. 4 Tri Rapide 4.3 Implémentation • Sinon • j=j-1; • next='j'; • Fin si • Sinon • Si t(i)>pivot alors • t(vide)=t(i); • vide=i; • i=i+1; • next='j'; • Sinon • i=i+1; • next='i'; • Fin si • Fin si • Fin tant que • indicePivot=vide; • t(vide)=pivot; • Fin • FonctionindicePivot=Partition(t,debut,fin) • Pivot : entier • i, j, pivot : naturels • Next : caractère • Début • pivot=t(debut); • vide=debut; • i=debut+1; • j=fin; • next='j'; • Tant que i<=j faire • Sinext=='j' alors • Si t(j)<pivot alors • t(vide)=t(j); • vide=j; • j=j-1; • next='i';

  29. 4 Tri Rapide 4.3 Implémentation • ProcedureTriRapide(t : Tableau. Max] d’entiers, debut, fin : Naturels) • indicePivot : naturel • Début • Si fin>debutalors • indicePivot=Partition(t, debut, fin); • TriRapide(t, debut, indicePivot-1); • TriRapide(t, indicePivot+1, fin); • Fin si • Fin • /* Programme principal */ • procédureCallerProgram(t : Tableau[1 .. Max] d’entiers) • Début • TriRapide(t, 1, N); • Fin

  30. 4 Tri Rapide 4.4 Complexité • La partie du tri la plus sensible reste le choix du pivot. Dans l'algorithme précédent, il est choisi au hasard parmi les éléments du tableau, mais ce choix peut se révéler catastrophique : si le pivot est à chaque choix le plus petit élément du tableau, alors le tri rapide dégénère en tri par sélection. • En général, la complexité de ce tri est : • dans le meilleur des cas, en O (N log2N) ; • en moyenne, en O (N log2N) ; • dans le pire des cas, en O (N2). • Il existe bon nombre d'astuces pour rendre le cas dégénéré du tri rapide le plus improbable possible, ce qui rend finalement cette méthode la plus rapide en moyenne parmi toutes celles utilisées. 

More Related