Les Algorithmes de Tri Introduction Tri par Sélection

Slides:



Advertisements
Présentations similaires
A l’issue des conseils de classe de 3ème,
Advertisements

Tris.
Portée des variables VBA & Excel
Fonctions & procédures
Classe : …………… Nom : …………………………………… Date : ………………..
Introduction à l’Algorithmique
Sensibilisation à l’Algorithmique et structure de données
Calculs de complexité d'algorithmes
Les Structures. Introduction : Imaginons que lon veuille afficher les notes dune classe délèves par ordre croissant avec les noms et prénoms de chaque.
Les Algorithmes de tri.
Problème de 8 dames: Sachant que dans un jeu des échecs, une dame peut pendre toute pièce se trouvant sur la colonne ou sur la ligne ou sur les diagonales.
1 UMLV Optimalité des tris par comparaisons : O(n logn) Classements linéaires Tris lexicographiques Tri lexicographique.
Exercices Algorithmiques
1 Révisions. 2 Tableaux non contraints Déclaration du type : type Tvecteur = tableau ( intervalle dentiers) de entiers type Tvecteur is array (integer.
Introduction à la programmation (420-PK2-SL) cours 15 Gestion des applications Technologie de linformation (LEA.BW)
Initiation à la programmation et algorithmique cours 3
Traitement Co-Séquentiel: Appariment et Fusion de Plusieurs Listes
Utilisation des tableaux
Structures de données linéaires
Eléments d ’algèbre relationnelle
Algorithme de Dijkstra
Les structures de données arborescentes
Les algorithmes: complexité et notation asymptotique
Chapitre VII. Tri Tri par tas Tri rapide.
Methode de Tri efficace
7 mai ème Il faut effectuer le calcul rouge (comme bâbord) pour celui qui est à gauche de sa table et vert (comme tribord) pour celui qui est.
Nombres entiers. Ensembles de nombres
Les tris.
L’utilisation des bases de données
Structures de données IFT-2000
Mesurer l’efficacité des algorithmes
Introduction à l’algorithmique
Présentation Structures de Données et TDA
Programmation linéaire en nombres entiers Algorithme de la subdivision successive («Branch and Bound Algorithm»)
Gestion de Fichiers Tri Interne Efficace et Tri Externe.

Les mesures de la tendance centrale
Gestion de Fichiers GF-10: Traitement Co-Sequentiel: Appariment et Fusion de Plusieures Listes (Base sur les sections de Folk, Zoellick & Riccardi,
Tutorat en bio-informatique Le 21 novembre Exercices 2 et 3 (MAT1400) - solutions Chapitre 11.7, Analyse - concepts et contextes vol. 2 27) Cherchez.
201 UMLV  Type « dictionnaire » sous-ensembles finis de E (ordonné) avec les opérations : Ens_vide :  Ens Ajouter : Ens x Elément  Ens Enlever.

Josèphe Flavius Règle générale pour les deux tours:
Question 1 Une série d'échantillons sont analysés dans un laboratoire. On constate que la teneur en carbone des différents échantillons varie d'un échantillon.
1 Notations Asymptotiques Et Complexité Notations asymptotiques : 0 et  Complexité des algorithmes Exemples de calcul de complexité.
ALGORITHME DE TRI Le tri par insertion.
Projet Télédétection Vidéo Surveillance Deovan Thipphavanh – Mokrani Abdeslam – Naoui Saïd Master 2 Pro SIS / 2006.
ALGORITHMIQUE Recherches : Tris : séquentielle, dichotomique
Chapitre 6 Les traitements avancés
Algorithmes de tri et de recherche
Programmation linéaire en nombres entiers
Méthodes de tri.
Cours 4 - Trois algorithmes de recherche dans un tableau
Les tris Tri Action de mettre une structure de données en ordre (croissant ou décroissant). Le plus simple est d’insérer en ordre. Les algorithmes de tri.
1 1 Huitième journée Quelques algorithmes. 2 Définition Description des tâches pour que celles-ci soient aisément programmables Différent d’une méthode.
Organisation des données Introduction à la programmation Traitements simples Affectation Parcours Définition du tableau Les Tableaux Mise en situation.
2005/2006 Structures de Données Introduction à la complexité des algorithmes.
Pour les boucles FOR on a fait intervenir la boucles TANT QUE équivalentes dont on connaît calculer le temps d’exécution. Toutes le procédures de comptage.
8PRO107 Éléments de programmation Les adresses et les pointeurs.
Cours 5 - Trois algorithmes de tri d'un tableau
Algorithmes de tri.
8PRO107 Éléments de programmation Les tableaux. Étude de cas 1 Description du problème : Lire une liste d’entiers et l’afficher d’abord dans le même ordre.
Algorithmique Tableaux de données
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Semaine 14 Les algorithmes de tri Département d’informatique et de génie logiciel Édition septembre 2009.
VI. Tri par tas.
Files de priorité (Priority Queue)
Seconde 8 Module 3 M. FELT 22/09/2015.
L'exécution d'un programme nécessite l'utilisation des ressources de l'ordinateur : temps de calcul pour exécuter les opérations, et l'occupation de la.
1. Tri rapide ou Quicksort Principe : La méthode du Quicksort due au C.A. Hoare (1962) utilise les principes généraux de division et équilibrage. 2.
Les tris Tri Action de mettre une structure de données en ordre (croissant ou décroissant). Le plus simple est d’insérer en ordre. Les algorithmes de tri.
Transcription de la présentation:

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

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.

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.

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

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

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

1 Tri par Sélection

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

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.

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

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

2 Tri par Insertion

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

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 )

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 𝑛 𝑛−1 2 = 𝑛 2 4 +𝑂(𝑛)

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

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

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

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

3 Tri par Bulles

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 .

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

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’’

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

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

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

4 Tri Rapide

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

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);

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.