Les Algorithmes de tri.

Slides:



Advertisements
Présentations similaires
Structures de données avancées : MLH (Multidimensional linear hashing)
Advertisements

Tris.
Chapitre annexe. Récursivité
Algorithmique (suite)
Fonctions & procédures
Introduction à l’Algorithmique
Calculs de complexité d'algorithmes
Les Structures de contrôles itératives
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.
Applications sur les algorithmes récurrents avec Les Matrices
Exercices Algorithmiques
INTRODUCTION.
Les sous-programmes Chapitre n° 5: Objectifs : Activité:
Initiation à la programmation et algorithmique cours 3
Traitement Co-Séquentiel: Appariment et Fusion de Plusieurs Listes
Section VI Structures répétitives (suite)
Utilisation des tableaux
Les bases de l’Algorithmique
ALGORITHMES RECURSIFS
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Structures de données linéaires
Plus courts chemins On présente dans ce chapitre un problème typique de cheminement dans les graphes : la recherche d'un plus court chemin entre deux sommets.
Démarche de résolution de problèmes
Algorithmique et Programmation
ALGORITHMIQUE Plan du cours Généralités -définition -importance
Chapitre VII. Tri Tri par tas Tri rapide.
Methode de Tri efficace
Les tris.
Structures de données IFT-2000 Abder Alikacem Standard Template library Édition Septembre 2009 Département dinformatique et de génie logiciel.
Structures de données IFT-2000
Les Fonctions. Définir une fonction Sections de code indépendantes que lon peut appeler à nimporte quel moment et dans nimporte quel ordre. Bout de code.
Gestion de Fichiers Tri Interne Efficace et Tri Externe.

Les Algorithmes de Tri Introduction Tri par Sélection
Tutorat en bio-informatique Le 21 novembre Exercices 2 et 3 (MAT1400) - solutions Chapitre 11.7, Analyse - concepts et contextes vol. 2 27) Cherchez.
Programmation linéaire en nombres entiers : les méthodes de troncature

RAPPEL Qu’est ce qu’une structure de contrôle itérative ?
Diviser pour résoudre A. Principe général B. Applications
ALGORITHME DE TRI Le tri par insertion.
ALGORITHMIQUE Recherches : Tris : séquentielle, dichotomique
INTRODUCTION.
Chapitre 6 Les traitements avancés
Algorithmes de tri et de recherche
Décomposition et paramétrage des algorithmes
Programmation linéaire en nombres entiers
Méthodes de tri.
Cours 4 - Trois algorithmes de recherche dans un tableau
Structures de contrôle
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.
Cours LCS N°4 Présenté par Mr: LALLALI
Structures de données avancées : LH (Hachage linéaire) D. E ZEGOUR Institut National d ’Informatique.
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.
Cours 5 - Trois algorithmes de tri d'un tableau
Algorithmes de tri.
Post-optimisation, analyse de sensibilité et paramétrage
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.
La pile de crêpes.
Algorithmique Tableaux de données
Structures de données IFT-2000
CSI25101 Tri Plus efficace. CSI25102 Tri récursif Le tri récursif divise les données de grande taille en deux presque moitiés et est appelé récursivement.
Algorithmique Boucles et Itérations
Introduction à l’Informatique chap 3 Licence SPI Mme Delmotte.
Chap. 3 Récursion et induction. Les définitions par récurrence consistent à construire des objets finis, à partir d'autres, selon certaines règles. Les.
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.
ALGORITHME ET PROGRAMMATION RÉVISION Informatique et Sciences du Numérique.
H. Richard – Elodie Laine – Initiation à la programmation impérative et algorithmique Cours 5 – Tableaux Largement inspiré des cours.
Transcription de la présentation:

Les Algorithmes de tri

Plan du chapitre Introduction Rappel Le tri Shell Le tri par fusion Applications

I. Introduction Qu'est-ce qu'un tri ? Un tri est une procédure qui permet de classer ou ordonner une série d'éléments d'un type quelconque, selon un ordre croissant ou décroissant en utilisant un principe ou un algorithme formels donné. La série d’éléments est un tableau d’entiers par exemple. En informatique ou en mathématiques, un algorithme de tri est un algorithme qui permet d'organiser une collection d'objets selon un ordre déterminé. Les objets à trier font donc partie d'un ensemble muni d'une relation d'ordre (de manière générale un ordre total). Les ordres les plus utilisés sont l’ordre numérique et l'ordre lexicographique (dictionnaire). Suivant la relation d'ordre considérée, une même collection d’objet peut donner lieu à divers arrangements, pourtant il est possible de définir un algorithme de tri indépendamment de la fonction d’ordre utilisée. Celui-ci ne fera qu'utiliser une certaine fonction d’ordre correspondant à une relation d’ordre qui doit permettre de comparer tout couple d'éléments de la collection.

Complexité des algorithmes de tris La complexité des algorithmes de tris varie selon la méthode utilisée. Pour cela plusieurs algorithmes de tris existent qui n'ont pas tous la même complexité

Quel sont les particularités des tris Tris itératifs Tris récursifs

TRIS ITERATIFS Quelles sont les particularités des tris itératifs ? Dans un tri itératif, on procède de manière itérative ! C'est-à-dire que l'on trie le tableau d'un seul bloc, en le parcourant élément par élément, case par case. Il y a en fait deux principes différents : se déplacer de la première à la dernière case, en y plaçant à chaque fois l'élément qui doit y aller : c'est le tri par sélection et tri à bulle), inversement, prendre chaque élément dans l'ordre où il se présente, et le mettre à la bonne place : c'est le tri par insertion et tri Shell

II. Rappel Tri par sélection Tri à bulles Tri par insertion

3. Tri par insertion Principe Simulation Résolution de problèmes Complexité

Principe Le tri par insertion est le tri le plus efficace sur des listes de petite taille. C'est pourquoi il est utilisé par d'autres méthodes comme le tri rapide (ou quicksort). Il est d'autant plus rapide que les données sont déjà triées en partie dans le bon ordre. Le principe de ce tri est très simple: c'est le tri que toute personne utilise naturellement quand elle a des dossiers, des cartes (ou n'importe quoi d'autre) à classer. On prend un dossier et on le met à sa place parmi les dossiers déjà triés. Puis on recommence avec le dossier suivant.

Pour procéder à un tri par insertion, il suffit de suivre l’algorithme formel suivant: Parcourir une liste : on considère que les (i-1) premiers éléments de la liste sont triés et placer le ième élément à sa place parmi les (i-1) déjà triés. Répéter cette action jusqu’à atteindre la fin de la liste Pour insérer le ième élément à sa place utiliser une variable intermédiaire tmp pour conserver la valeur à insérer puis, Déplacer les éléments tab[i-1],tab[i-2],… vers la droite tant que leur valeur est supérieure à celle de tmp. Affecter alors à l’emplacement dans le tableau laissé libre par le décalageà droite la valeur de tmp. Remarques: On peut aussi faire une recherche par dichotomie sur les tableaux. Une amélioration possible de ce tri, sensible pour les listes de plus de 15 éléments, est le tri de Shell.

Simulation Fixe Dynamique

Soit le tableau non-trié à 6 composantes suivante: Simulation fixe Soit le tableau non-trié à 6 composantes suivante: 2 1 8 4 3 6 On procède à trier ce tableau par ordre croissant. Le sous-vecteur constitué du premier élément seul est évidemment trié! On peut donc considérer que notre problème se ramène à deux vecteurs, un trié de longueur 1 et un non trié de longueur 6-1. Etape1 On cherche la position d’insertion de l’élément d’indice 2 dans la 1ère partie du tableau dans l’ordre convenable puisque 2>1: on garde la valeur de l’élément en cours dans la variable tmp On décale à droite d’un pas la première case et mettre la valeur de tmp à la 1ère case: 2 1 8 4 3 6 Tmp 1 1 2 8 4 3 6

Etape2:On traite à présent la troisième composante de valeur 8 Etape2:On traite à présent la troisième composante de valeur 8. 8 est plus grand que 2 et ne doit donc pas bouger. La nouvelle situation est alors: Etape3:On cherche la position d’insertion du l’élément d’indice 4 dans la 1ère partie du tableau dans l’ordre convenable on garde la valeur de l’élément en cours dans la variable tmp On décale à droite d’un pas l’élément n°3,…jusqu’à avoir un élément inférieur à 4 Affecter à la dernière case décalée la valeur de tmp 1 2 8 4 3 6 Tmp 1 2 8 4 3 6 1 2 4 8 3 6 4

Etape4:On cherche la position d’insertion du l’élément d’indice 5 dans la 1ère partie du tableau dans l’ordre convenable on garde la valeur de l’élément en cours dans la variable tmp On décale à droite d’un pas l’élément n°4,…jusqu’à avoir un élément inférieur à 3 Affecter à la dernière case décalée la valeur de tmp Etape4:On cherche la position d’insertion de l’élément d’indice 5 dans la 1ère partie du tableau dans l’ordre convenable on garde la valeur de l’élément en cours dans la variable tmp Tmp 1 2 4 8 3 6 3 1 2 3 4 8 6 Tmp 1 2 3 4 8 6 1 2 4 3 6 8 6

Tri par insertion Résolution du problème Tri insertion Saisie(n) Remplir(n,T) Trier (n,T) Affiche(n,T) Procédure Procédure Procédure Procédure DECALER(T, Deb,fin) Procédure Décomposition modulaire

Tri par insertion Résolution du problème Analyse du programme Principal: Résultat: L’affichage du tableau trié est la tâche de la procédure afficher Traitement: Pour trier le tableau on appelle la procédure trier Le tableau est rempli grâce à la procédure remplir Le nombre des éléments à remplir est donné par la procédure saisir

Tri par insertion Résolution du problème Algo du Programme Principal 0) Début tri_ins 1)Saisie(n) 2)remplir(T,n) 3)Trier(T,n) 4)Affiche(T,n) 5)Fin tri_ins

Analyse de la procédure trier Résultat: T trié Traitement: D’après l’algorithme formel de cette méthode il s’agit d’un traitement répétitif complet de l’élément n°2 jusqu’au dernier élément du tableau: Pour I de 2 à n faire Pour chaque valeur du compteur et si l’élément correspondant n’est pas à sa place, nous réalisons les actions suivantes: Ranger la valeur de T[I] dans la variable Tmp Décaler vers la droite les valeurs de T[i-1],T[i-2],… jusqu’à arriver à une valeur qui est inférieure à T[c]. Cette action est réalisée par la procédure DECALER. Affecter au dernier élément décalé la valeur de Tmp Si T[i-1] > T[i] alors TmpT[i] DECALER (T,i-1,p) T[p+1]Tmp Finsi

Algorithme de la procédure trier 0) procedure trier(n:entier; var t:tab) Pour i de 2 à n faire Si T[i-1] > T[i] alors TmpT[i] DECALER (T,i-1,p) T[p+1]Tmp Finsi Finpour Fin trier

Spécification de la procédure décaler Algorithme Résultat:décaler à droite les éléments du tableau T d’indice deb à l’indice fin Traitement: Il s’agit d’un traitement répétitif à condition d’arrêt: Tant que (fin>=1) et (T[fin]>tmp) faire initialisation:findeb Action de décalage: T[fin+1]T[fin] Décrémentation de la variable fin par 1:finfin-1 0) procedure DECALER(var t:tab;deb:entier; varfin: entier) Fin deb T[fin+1]T[fin] finfin-1 Fin tantque 2) Fin DECALER

Complexité Comme nous l'avons vu ci-dessus, le tri par insertion linéaire est, en moyenne, essentiellement d'ordre n2. (puisque il utilise 2 boucles imbriquées d’ordre n). Il est toutefois évident que si le vecteur est déjà presque trié dans le bon ordre, le nombre d'opérations sera beaucoup plus réduit. Il suffit pour s'en convaincre de réfléchir au tri par insertion linéaire d'un vecteur déjà complètement trié: pour chaque élément, une seule comparaison sera nécessaire pour déterminer à quelle place il doit se mettre. Dans ces conditions, on n'a à effectuer que environ n opérations. Ces considérations ont amené à envisager des méthodes de tri qui permettent de déplacer les éléments à trier de plus d'une case à la fois obtenant ainsi un tri préliminaire rapide qui regroupe en tête du vecteur les petits éléments, et en fin de vecteur, les grandes valeurs. Ce pré-tri permet alors d'accélérer sensiblement la suite des opérations c’est le tri Shell

Tri SHELL Imaginé par D. L. Shell (1959) Ce tri est une accélération du tri par insertion. Dans le tri par insertion, un élément va à sa place en progressant lentement, case par case. L'accélération consiste à le faire aller à sa place en commençant par faire des grands pas, puis des pas de plus en plus petits, jusqu'à, évidemment, des pas de 1 pour que le tableau soit trié.

Principe Tri SHELL L'étape de base de l'algorithme considère le tableau initial constitué de P sous-tableaux, dont les éléments sont distants de P cases. ces P tableaux sont triés par l'algorithme de tri par insertion. On dit alors que le tableau initial est P-trié. On répète cette opération de base pour des valeurs de P qui vont en diminuant jusqu'à une valeur finale 1. La qualité du tri Shell va dépendre de la suite des valeurs de P. Une "bonne" suite est donnée par :  P1=1 Pk+1=3*Pk+1

Tri SHELL … Exemple On se propose d’utiliser la méthode de tri Shell pour trier un tableau T en ordre croissant. Considérons le tableau T contenant les 5 éléments suivants: 11 5 20 10 13 T= 4 3 2 1  

Tri SHELL … Exemple Étape 0: Calculer P le plus grand décalage possible en utilisant l’instruction suivante: Tant que P≤N faire P3*P+1 Fin Tantque Donc P vaut 13 11 5 20 10 13 T= 4 3 2 1  

Tri SHELL … Exemple Étape 1: Tant que P>1 c’est-à-dire tant que le décalage possible on calcule P en utilisant la formule suivante:P(P-1)div 3 On obtient P=4 Donc on fait le décalage avec pas de 4 11 5 20 10 13 T= 4 3 2 1  

Tri SHELL … Exemple Étape 1…: Puisque P=4 On fait le parcours du tableau de la case n°5 (P+1) à la dernière case en utilisant la méthode de tri par insertion mais avec un décalage de pas de 4. On obtient le tableau suivant: 13 5 20 10 11 T= 4 3 2 1  

Tri SHELL … Exemple Étape 2: Après que le décalage se termine et puisque P=4>1. on recalcule de nouveau P et on trouve P= (P-1) div 3=1 On fait le parcours du tableau de la case n°2 (P+1) à la dernière case en utilisant la méthode de tri par insertion avec un décalage de pas de 1. On obtient le tableau suivant: 20 13 11 10 5 T= 4 3 2 1  

0) Procedure Trier( n:integer;var T;tab) 1) P1 2) Tant que P≤n faire Algorithme de la procédure Trier 0) Procedure Trier( n:integer;var T;tab) 1) P1 2) Tant que P≤n faire PP*3+1 Fin Tantque 3) Tant que P>1 faire PP Div 3 Pour j de P+1 à n faire auxT[j] kj Tant que (k>P) et (T[K-P]>aux) faire T[k]T[k-P] Kk-P Fin tant Que T[k]aux Fin Pour 4) Fin Trier décalage des valeurs avec un pas de p calcul du plus grand décalage possible tant que le décalage possible est non nul Insertion de l’élément à sa place valeur à décaler (éventuellement)