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

Les Algorithmes de Tri Introduction Tri par Sélection

Présentations similaires


Présentation au sujet: "Les Algorithmes de Tri Introduction Tri par Sélection"— Transcription de la présentation:

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

2 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 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 Introduction 0.3 Présentation du problème Le tri consiste à réarranger une permutation of n objets de telle manière que : 𝑋 1 ≤ 𝑋 2 ≤ 𝑋 3 ≤…≤ 𝑋 𝑛 Tri Croissant 𝑋 1 ≥ 𝑋 2 ≥ 𝑋 3 ≥…≥ 𝑋 𝑛 Tri Déroissant Comment trier ? Il existe plusieurs manières de faire le tri

5 1 1.1 Tri par Sélection Répéter
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 1.2 Tri par Sélection On veut trier les éléments:
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 42 20 17 13 28 14 23 15 13 20 17 42 28 14 23 15 13 14 17 42 28 20 23 15 13 14 15 42 28 20 23 17 13 14 15 17 28 20 23 42 13 14 15 17 20 28 23 42 13 14 15 17 20 23 28 42 13 14 15 17 20 23 28 42

7 1 Tri par Sélection

8 1 1.3 Tri par Sélection Implémentation
Procédure TriSelection(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 à nbElements faire 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

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: 𝑖=1 𝑛−1 𝑖 = 𝑛 𝑛−1 2 = 𝑛 2 2 − 𝑛 2 =𝑂( 𝑛 2 ) 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 Les i-1 premiers éléments déjà triés
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 Eléments à insérer Les éléments non triés

11 2 2.2 Tri par Insertion On veut trier les éléments:
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 42 20 17 13 28 14 23 15 20 42 17 13 28 14 23 15 17 20 42 13 28 14 23 15 13 17 20 42 28 14 23 15 13 17 20 28 42 14 23 15 13 14 17 20 28 42 23 15 13 14 17 20 23 28 42 15 13 14 15 17 20 23 28 42

12 2 Tri par Insertion

13 2 Tri par Insertion 2.3 Implémentation Procedure TriInsertion(t : Tableau[1 .. Max] d’entiers, nbElements : naturel) i, k : naturels; temp : entier; Début Pour i=2 à nbElements faire 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: 𝑖=1 𝑛 𝑖−1 = 𝑛(𝑛−1)/2=𝑂( 𝑛 2 )

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: 𝑘=1 𝑖 𝑘−1 𝑖 = 1 𝑖 𝑘=1 𝑖−1 𝑘 = 1 𝑖 × 𝑖 𝑖−1 2 = 𝑖−1 2 En sommant sur i, on obtient: 𝑖=1 𝑛 𝑖−1 2 = 𝑛 𝑛−1 2 = 𝑛 𝑂(𝑛)

16 3 3.1 Tri par Bulles La stratégie de cet algorithme est :
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 3.2 Tri par Bulles Même exemple Exemple i=1 i=2 k=8 k=7 k=6 k=5 k=4
42 20 17 13 28 14 23 15 42 20 17 13 28 14 15 23 42 20 17 13 28 14 15 23 42 20 17 13 14 28 15 23 42 20 17 13 14 28 15 23 42 20 13 17 14 28 15 23 42 13 20 17 14 28 15 23 13 42 20 17 14 28 15 23 13 42 20 17 14 28 15 23 13 42 20 17 14 15 28 23 13 42 20 17 14 15 28 23 13 42 20 14 17 15 28 23 13 42 14 20 17 15 28 23 13 14 42 20 17 15 28 23

18 3 3.2 Tri par Bulles Même exemple Exemple i=3 i=4 k=8 k=7 k=6 k=5 k=4
13 14 15 42 20 17 23 28 13 14 15 42 20 17 23 28 13 14 15 42 20 17 23 28 13 14 15 42 20 17 23 28 13 14 15 42 17 20 23 28 13 14 42 20 17 15 28 23 13 14 42 20 17 15 23 28 13 14 42 20 17 15 23 28 13 14 42 20 15 17 23 28 13 14 42 15 20 17 23 28 13 14 15 17 42 20 23 28

19 3 3.2 Tri par Bulles Même exemple Exemple i=5 i=6 i=7 k=8 k=7 k=6 k=8
13 14 15 17 42 20 23 28 13 14 15 17 42 20 23 28 13 14 15 17 42 20 23 28 13 14 15 17 20 42 23 28 13 14 15 17 20 42 23 28 13 14 15 17 20 42 23 28 13 14 15 17 20 23 42 28 13 14 15 17 20 23 42 28 13 14 15 17 20 23 28 42

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 à  𝑛 𝑛−1 4 .

22 3 Tri par Bulles 3.3 Implémentation Procédure TriBulles(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

23 4 4.1 Tri Rapide Inventé en 1960 par Sir Charles Antony Richard Hoare
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 20 17 13 28 14 23 15 42 15 20 17 13 28 14 23 15 20 17 13 28 14 23 15 20 17 13 28 14 23 15 20 17 13 28 14 23 15 20 17 13 28 14 23 15 20 17 13 28 14 23 15 20 17 13 28 14 23 42

25 4 Tri Rapide 4.2 Exemple 20 17 13 28 14 23 42 15 20 17 13 28 14 23 42 14 20 17 13 28 23 42 14 17 13 28 20 23 42 14 17 13 28 20 23 42 14 13 17 28 20 23 42 14 13 15 17 28 20 23 42

26 4 Tri Rapide 4.2 Exemple 14 13 15 28 20 23 42 17 13 14 15 28 20 23 42 13 14 15 28 20 23 42 13 14 15 17 28 20 23 42 13 14 15 17 20 23 42 28 13 14 15 17 23 20 42 13 14 15 17 23 20 28 42

27 4 Tri Rapide

28 4 4.3 Tri Rapide Implémentation
Fonction indicePivot=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 Si next=='j' alors Si t(j)<pivot alors t(vide)=t(j); vide=j; j=j-1; next='i'; Sinon j=j-1; next='j'; Fin si Si t(i)>pivot alors t(vide)=t(i); vide=i; i=i+1; next='i'; Fin tant que indicePivot=vide; t(vide)=pivot; Fin

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

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 log2 N) ; en moyenne, en O (N log2 N) ; 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. 


Télécharger ppt "Les Algorithmes de Tri Introduction Tri par Sélection"

Présentations similaires


Annonces Google