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

Tris Simples/Rapides.

Présentations similaires


Présentation au sujet: "Tris Simples/Rapides."— Transcription de la présentation:

1 Tris Simples/Rapides

2 Sommaire Tri par bulles Tri par sélection Tri par insertion
 Comparaison des tris simples Tri Shell Tri rapide Chapitre 3 Data Structures & Algorithm, 2nd Edition, Robert Lafore

3 Tri par bulles Principe
Parcourir le tableau en comparant 2 à 2 les éléments adjacents, et en les permutant si le premier des deux éléments est supérieur au second Après un premier balayage complet, le plus grand élément se trouve à l'indice n-1 Critère d’Arrêt : tableau restant à trier : un seul élément

4 Tri par bulles Principe (Premier balayage) Fin du premier balayage

5 Tri par bulles Principe (exemple)

6 Tri par bulles Principe (variantes possibles)
Comparer uniquement les éléments qui ne sont pas remontés : itération i – comparaison des N-i premiers éléments Faire descendre les plus petites valeurs vers le début : parcours de droite vers la gauche Reprendre du début chaque fois qu'une permutation à été effectuée

7 Tri par bulles Principe (Invariants de l’algorithme)
Certaines conditions restent inchangées durant l'algorithme. Rendant le Débogage plus facile, compréhension plus aisé. Dans le contexte du tri par bulles : Première itération : élément le plus important à la dernière position Deuxième itération : deuxième élément le plus important à l'avant dernière position les deux éléments les plus importants se trouvent aux bons emplacements L'invariant de la boucle est vrai à chaque itération

8 Efficacité de l'algorithme
Tri par bulles Efficacité de l'algorithme  Pour N éléments: Nombre de comparaisons : itération 1 : N-1 comparaisons itération 2 : N-2 comparaisons itération 3 : N-3 comparaisons  (N-1) + (N-2) + (N-3) + …….+ 1  (N*(N-1)/2  N2/2

9 Efficacité de l'algorithme
Tri par bulles Efficacité de l'algorithme  Pour N éléments: Nombre de Permutations : Nombre de permutations est inférieur au nombre de comparaisons Données aléatoires : N2/4 Comparaisons et permutations : proportionnels à N2 Tri par bulles : O( N2)

10 Tri par bulles (Voir l’exemple TriABulle)

11 Tri par bulles (Voir l’exemple TriABulle suite ….)

12 Tri par bulles (Voir l’exemple TriABulle suite ….)

13 Tri par sélection Le tri par sélection est une autre variante du tri par bulles Nombre de permutations : O(N) Nombre de comparaisons reste le même O(N2) Principe  au ième parcours, on considère que les i-1 premiers éléments sont triés à chercher le plus petit élément parmi les éléments non encore triés  à le placer à la suite des éléments triés (i) => une seule permutation

14 Tri par sélection Principe

15 Tri par sélection Principe Itération 1 Itération 2 Itération 3

16 Tri par sélection Principe (exemple)

17 Tri par sélection Invariant: les i-1 éléments sont toujours triés.
Efficacité du tri par sélection  N*(N-1)/2 comparaisons N important : temps de comparaison très important Tri par sélection : O(N2) Plus rapide : à cause du faible nombre de permutations

18 Tri par sélection (Voir l’exemple TriParSelection)

19 Tri par sélection (Voir l’exemple TriParSelection suite …)

20 Tri par sélection (Voir l’exemple TriParSelection suite …)

21 Tri par insertion Principe N'utilise aucune fonction de permutation
 Déplace les éléments pour faire de la place pour chaque nouvel élément à insérer  ième itération : déplacement d'un emplacement à droite de tous les éléments se trouvant à gauche de a [i] et supérieur à a [i] Insertion de a [i] au bon endroit

22 Tri par insertion Principe Itération i

23 Tri par insertion Principe (exemple)

24 Tri par insertion Invariant: Après chaque insertion : Les éléments dont l'indice est inférieur à outer (indice de la boucle externe) sont partiellement triés Efficacité du tri par insertion Comparaisons : Passe 1 : MAX: 1 comparaison Passe 2 : MAX: 2 comparaisons Passe 3 : MAX: 3 comparaisons Passe N-1 : MAX: N-1 comparaisons MAX:  N*(N-1)/2 Au cours de chaque passe : la moitié des items sont comparés en moyenne (N*(N-1)/4) Nombre de copies : égale au nombre de comparaisons Deux fois plus rapide que le tri par bulles Plus rapide que le tri par sélection Tri par insertion : O(N2)

25 Tri par insertion (Voir l’exemple TriParInsertion)

26 Tri par insertion (Voir l’exemple TriParInsertion suite ….)

27 Tri par insertion (Voir l’exemple TriParInsertion suite ….)

28 Tris simples (conclusion)
Tous les algorithmes de tri simple sont stables Tri par bulles : plus simple Pratique si N est petit  Tri par sélection : nombre de permutations réduit nombre de comparaisons reste élevé pratique Pour N petit et T permutation > T comparaison Tri par insertion : plus souple meilleur dans la plupart des situations

29 Tri Shell Le tri Shell proposé par Donald L. Shell constitue une variante optimisée du tri par insertion Tri Shell  basé sur de nouvelles caractéristiques  Amélioration de la performance du tri par insertion  Plus rapide que le tri par sélection et le tri par insertion O(N2)  Moins rapide que le tri rapide O(N*Log(N))  Facile à implémenter Tri Shell : éléments décalés de plusieurs espaces à la fois  Incrément (pas) ; espace entre les éléments  Réduction du nombre de pas : à chaque étape  Affinage du tri  pas = 1 => tri par insertion  application du tri par insertion sur un tableau possédant un certain ordre 

30 Tri Shell Exemple: 

31 Tri Shell Exemple: Les items espacés de quatre cellules sont triés
Quatre sous tableaux triés :  (0, 4, 8) indices (1, 5, 9) indices (2, 6) indices (3, 7) indices  Il en résulte un tableau presque trié Tri par insertion devient efficace : déplacement de l’élément d’au plus deux cellules  O(N)  Combinaison des deux : plus rapide que l’utilisation du seul tri par insertion

32 Tri Shell Choix de l'incrément (pas)
Le choix du pas est fonction de la taille du tableau Réduction du pas à chaque étape La séquence de nombres utilisés pour générer l'intervalle est appelé séquence d'intervalle Le choix du pas ne doit pas se faire au hasard Les valeurs des différents pas ne doivent pas être des multiples des autres Important : réalisation de l'étape ou le pas est égal à un Le pas ne doit pas dépasser la taille du tableau  Exemple :  Tableau à N =1000  364, 121, 40, 13, 4, 1

33 Tri Shell Choix de l'incrément (pas): Séquence de Knuth

34 Tri Shell Voir l’exemple TriShell

35 Tri Shell Voir l’exemple TriShell (suite …)

36 Tri Shell Voir l’exemple TriShell (suite …)

37 Tri rapide (Quick sort)
Partition Le tri rapide est basé sur un processus de partition appliqué de manière récursive Le processus de partition consiste à subdiviser le tableau à trier en deux sous tableaux définis ainsi :  le sous tableau de gauche ne comporte que des éléments inférieur à une valeur de référence  le sous tableau de droite ne comporte que des éléments supérieur à une valeur de référence  Valeur Pivot : valeur de référence par rapport à laquelle les éléments sont regroupés (à gauche et à droite)  La valeur de référence : valeur faisant partie du tableau

38 Tri rapide (Quick sort)
Partition (algorithme) int partition( int left, int right, long pivot) { int leftPtr = left –1; int rightPtr = right +1; while (true) { while (leftPtr <right && theArray[++leftPtr] < pivot) ; // avancer while (rightPtr>left && theArray[--rightPtr] > pivot) ; // avancer if (leftPtr >= rightPtr) break; else swap (leftPtr, rightPtr); // permuter } retun leftPtr; //retourne la limite de la première partition }  

39 Tri rapide (Quick sort)
Partition (algorithme: efficacité) O(N)  Temps d'exécution proportionnel au nombre d'éléments  Nombre de permutations inférieur au nombre de comparaisons  Comparaison et permutation proportionnelles à N

40 Tri rapide (Quick sort)
Tri rapide, dans la majorité des situations est : O(Nlog2N)  Principe :  Le tri rapide fonctionne en partitionnant le tableau à trier en deux sous tableaux  Trie récursivement chaque sous tableau : partition du sous tableau en deux etc.  Sélection du pivot et tri des petites partitions  La méthode de partition est modifiée : pivot à la dernière position

41 Tri rapide (Quick sort)
Tri rapide (Algorithme) void recQuickSort(int left, int right) { if (right-left <= 0) return; // taille est else { long pivot = theArray[right]; // choix du pivot int partition = partitionIt(left, right, pivot); recQuickSort(left, partition-1); recQuickSort(partition+1, right); } }

42 Tri rapide (Quick sort)
Analyse de l'algorithme Sélection du pivot : médian de toutes les valeurs à trier Division du tableau en deux tableaux de même taille Sélectionner le médian parmi le premier, le dernier et celui du centre

43 Tri rapide (Quick sort)
Voir l’exemple TriRapideVersionMedianofThreePartionning

44 Tri rapide (Quick sort)
Voir l’exemple TriRapideVersionMedianofThreePartionning (suite …)

45 Tri rapide (Quick sort)
Voir l’exemple TriRapideVersionMedianofThreePartionning (suite …)

46 Tri rapide (Quick sort)
Voir l’exemple TriRapideVersionMedianofThreePartionning (suite …)


Télécharger ppt "Tris Simples/Rapides."

Présentations similaires


Annonces Google