INF1101 Algorithmes et structures de données

Slides:



Advertisements
Présentations similaires
Tris.
Advertisements

Cours n° 6 Standard Template Library I.
Introduction à l’Algorithmique
Calculs de complexité d'algorithmes
Les Algorithmes de tri.
Plan : Définition L’affectation Les entrées Les sorties exercices
Cours n° 8 Conception et Programmation à Objets
17/09/2002 Table ronde nationale:
Initiation à la programmation et algorithmique cours 3
Algorithmique et programmation Informatique Cours 11 26/11/2001.
Les structures de contrôles itératives complètes
Tris: Introduction IFT 1025: Programmation 2 Jian-Yun Nie.
Utilisation des tableaux
Regrouper des éléments de même type et pouvoir y accéder à laide dun identificateur et dun indice. Objectif des tableaux.
MODULE METHODOLOGIE LA PRISE DE NOTES.
ALGORITHMES RECURSIFS
Les algorithmes: complexité et notation asymptotique
Bibliothèque standard du C++
Methode de Tri efficace
II. Chaînage, SDD séquentielles
Les tris.
Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction.
Standard Template Library (STL)
Structures de données IFT-2000
INF1101 Algorithmes et structures de données1 Cours 1 Les classes et les objets.
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
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 7 : Classes et fonctions paramétrables Département.
Conteneurs STL.
Algorithmique et programmation Informatique Cours 10 19/11/2001.
Rappels Java.

Standard Template Library
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.
Exemple : (fichier “ automobile ”)
INF1101 Algorithmes et structures de données
INF1101 Algorithmes et structures de données
III. Récursivité Principe et exemples
Les classes et les objets
Les structures de données séquentielles contiguës
ALGORITHMIQUE Recherches : Tris : séquentielle, dichotomique
B.Shishedjiev - Conception des données
Les Structures De Contrôle Itératives Complètes
ALGORITHMIQUE ET PROGRAMMATION C
Chapitre 6 Les traitements avancés
Algorithmes de tri et de recherche
Méthodes de tri.
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
Cours 4 - Trois algorithmes de recherche dans un tableau
II. Chaînage, SDD séquentielles
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.
21/10/2008 SYSTEME INFORMATIQUE.
L’EPREUVE PRATIQUE L’ETUDE LE PROJET EVALUATION 45 min à l’oral
Tutorat en bio-informatique Le 28 novembre Au programme… Algorithmes de tri dans un tableau (suite) Récursivité MAT1400.
Cours 5 - Trois algorithmes de tri d'un tableau
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.
Scripts et fonctions Instructions de contrôle
Structures de données IFT-2000
1 Listes des méthodes de la classe string, et exemples.
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.
Les Structures simples
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.
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.
Université Paul Sabatier - Toulouse 3 Accueil des nouveaux personnels – Promotion 2007 IUT A – Service Direction – 19 août Chapitre 3 Algorithmes.
التركيز الإقتصادي واستغلال مراكز الهيمنة وآثارها على التجارة والتنمية في الدول العربية السيد خليفة التونكتي المدير العام السابق للمنافسة والأبحاث الإقتصادية.
الهيئة العامة لحماية المستهلك أساليب الترويج وتأثيراتها على المستهلك خليفة التونكتي - مستشار المنافسة - 1.
Transcription de la présentation:

INF1101 Algorithmes et structures de données Cours 6 Algorithmes de tri INF1101 Algorithmes et structures de données

INF1101 Algorithmes et structures de données Plan du cours 6 I. Notions de base II. Les tris simples III. Mergesort Quicksort INF1101 Algorithmes et structures de données

I – Notions de base: l’utilité des tris Problématique: Un grand nombre de problèmes réels ont recours à la recherche d’éléments dans un vecteur (tableau). Cette recherche devient quasiment impossible lorsqu’elle s’effectue dans un vecteur désordonné, d’où le besoin de trier les vecteurs avant d’y effectuer un traitement. Exemples: Les mots dans un dictionnaire. Fichiers dans un répertoire de PC. Les CD répertoriés dans un magasin de musique. Les sigles des cours de Poly offert pour une session. INF1101 Algorithmes et structures de données

INF1101 Algorithmes et structures de données Définitions Tri interne : se dit d'un algorithme qui n'utilise pas de tableau temporaire pour effectuer le tri. Tri externe : se dit d'un algorithme de tri qui nécessite l'utilisation d'un tableau temporaire. INF1101 Algorithmes et structures de données

INF1101 Algorithmes et structures de données II – Les tris simples Tri par sélection Tri en bulle Tri par insertion INF1101 Algorithmes et structures de données

INF1101 Algorithmes et structures de données Tri par sélection Idée : Cette technique consiste à parcourir séquentiellement le vecteur à trier. À l'itération i, la plus petite valeur du tableau est interchangée avec la valeur située dans la case d'indice i. INF1101 Algorithmes et structures de données

Exemple d’exécution du tri par sélection min = [4] [0] [3] [1] [2] [4] 15 10 i = 3 1 2 8 7 2 0 1 2 3 4 i INF1101 Algorithmes et structures de données

Programmation du tri par sélection template<class T> void TriSelection( vector<T>& Tableau, int n) { int i, j, min; T Tmp; for ( i=0 ; i<n-1 ; i++ ) { //Identification de l'index du plus petit element min = i; for ( j=i+1 ; j<n ; j++ ) { if ( Tableau[j]<Tableau[min] ) min = j; } //Permutation des elements Tmp = Tableau[i]; Tableau[i] = Tableau[min]; Tableau[min] = Tmp; INF1101 Algorithmes et structures de données

INF1101 Algorithmes et structures de données Tri en bulle Idée : Les petits éléments du tableau « remontent » (comme des bulles) vers le début du tableau pour atteindre leur position finale. Les plus « légers » remontent le plus rapidement. Une fois tous les éléments remontés, le tableau est trié. INF1101 Algorithmes et structures de données

Exemple d’exécution du tri en bulle : comparaison de deux éléments 15 10 8 7 2 0 1 2 3 4 i Position de i INF1101 Algorithmes et structures de données

Programmation du tri en bulle template<class T> void TriBulle(vector<T>& Tableau, int n) { int i,j; T Tmp; for ( i=0; i<n-1; i++) for ( j=n-1; j>i; j--) if ( Tableau[j-1]> Tableau[j]) Tmp = Tableau[j-1]; Tableau[j-1] = Tableau[j]; Tableau[j] = Tmp; } INF1101 Algorithmes et structures de données

INF1101 Algorithmes et structures de données Tri par insertion Idée : Cette stratégie est semblable à la méthode qu'utilise naturellement un joueur de cartes pour organiser sa main. À chaque étape, une partie du tableau est déjà ordonnée et une nouvelle valeur est insérée à l'endroit approprié. INF1101 Algorithmes et structures de données

Exemple d’exécution par insertion 15 10 8 7 2 0 1 2 3 4 i INF1101 Algorithmes et structures de données

Programmation du tri par insertion template < class T> void TriInsertion(vector<T>& Tableau, int n) { int i,j; T Tmp; for ( i=1;i<n; i++ ) //Placer l'element courant dans la variable tampon Tmp = Tableau[i]; j=i; //Tant que la position d'insertion n'est pas atteinte... while ( (--j>=0) && (Tmp<Tableau[j]) ) Tableau[j+1]=Tableau[j]; Tableau[j+1]=Tmp; } INF1101 Algorithmes et structures de données

Analyse des tris simples Meilleur cas: tableau déjà trié Cas moyen: tableau aléatoire Pire cas: tableau trié à l’envers 1 3 5 7 9 10 13 18 21 25 7 10 21 9 1 25 18 3 5 13 25 21 18 13 10 9 7 5 3 1 INF1101 Algorithmes et structures de données

Comparaison des tris simples Pire cas Cas moyen Meilleur cas Tri par sélection Tri en bulle Tri par insertion INF1101 Algorithmes et structures de données

INF1101 Algorithmes et structures de données III – Le mergesort Problématique : Le tri est effectué en utilisant la technique de diviser-et-conquérir, en divisant le problème en deux sous-problèmes de complexité résolus récursivement, offrant une complexité globale de L'algorithme de tri Mergesort : Si le nombre d’éléments à trier == (0 ou 1), retourner. Trier récursivement la première et deuxième moitié séparément. Regrouper les deux parties triées dans un nouveau groupe trié. INF1101 Algorithmes et structures de données

INF1101 Algorithmes et structures de données MergeSort 1 1 13 13 24 24 26 26 2 2 15 15 27 27 38 38 Actr Bctr Cctr INF1101 Algorithmes et structures de données

INF1101 Algorithmes et structures de données La fonction Mergesort // Routine interne : Tableau: le vecteur d’éléments // tmpTab: vecteur temporaire pour les résultats // left, right: indices gauche et droit des tableaux template <class T> void mergeSort(vector<T>& Tableau, vector<T>& tmpTab, int left, int right) { if (left < right) int center = (left+right)/2; mergeSort(Tableau, tmpTab, left, center) mergeSort(Tableau, tmpTab, center+1, right); merge(Tableau, tmpTab, left, center+1, right); } template <class T> // Fonction principale void mergeSort(vector<T>& Tableau) vector<T> tmpTab(Tableau.size()); mergeSort(Tableau,tmpTab,0,Tableau.size()-1); INF1101 Algorithmes et structures de données

INF1101 Algorithmes et structures de données La fonction Merge // Routine interne : Tableau: le vecteur d’éléments // tmpTab: vecteur pour les résultats du merge // leftPos: indice gauche du tableau // rightPos: indice du début de la 2ieme demi // rightEnd: indice droit du tableau template <class T> void merge(vector<T>& Tableau, vector<T>& tmpTab, int leftPos, int rightPos, int rightEnd) { int leftEnd = rightPos-1; int tmpPos = leftPos; int numElements = rightEnd – leftPos +1; //Boucle principale while( leftPos<=leftEnd && rightPos<=rightEnd) if(Tableau[leftPos]<Tableau[rightPos]) tmpTab[tmpPos++]=Tableau[leftPos++]; else tmpTab[tmpPos++]=Tableau[rightPos++]; . . . (suite) INF1101 Algorithmes et structures de données

INF1101 Algorithmes et structures de données La fonction Merge . . . while(leftPos<=leftEnd) // Copie le reste de la 1ere demie tmpTab[tmpPos++]=Tableau[leftPos++]; while(rightPos<=rightEnd) // Copie le reste de la 2ieme demie tmpTab[tmpPos++]=Tableau[rightPos++]; // Copie tmpTableau dans Tableau for( int i=0; i<numElements ; i++, rightEnd--) Tableau[rightEnd]=tmpTab[rightEnd]; } INF1101 Algorithmes et structures de données

IV - Le tri rapide (Quicksort) Problématique : Le tri est une tâche importante en programmation. Il est donc essentiel que celui-ci soit effectué avec efficacité et rapidité. L'algorithme de tri Quicksort tente d'atteindre cet objectif par l'utilisation du concept de récursivité. INF1101 Algorithmes et structures de données

INF1101 Algorithmes et structures de données Le tri rapide (suite) Idée générale : Dans cet algorithme, l'exécution du tri est simplement déléguée à une série d'appels récursifs. Une fonction de partitionnement est d'abord appelée. Cette fonction choisit arbitrairement un pivot qui est utilisé pour subdiviser le tableau en deux parties: une partie de gauche où tous les éléments ont une valeur plus petite ou égale au pivot; une partie de droite où tous les éléments ont une valeur plus grande ou égale au pivot. Par la suite, les deux parties ainsi obtenues sont triées par deux appels récursifs à la fonction de tri rapide. En plus de la fonction principale de tri rapide, une autre fonction est donc requise: celle qui procède à la partition du tableau. INF1101 Algorithmes et structures de données

INF1101 Algorithmes et structures de données La fonction Quicksort template <class T> void QuickSort(vector<T>& tableau, int inf, int sup) { int milieu; if (sup>inf) // s'il y a au moins 2 éléments milieu = Partition(tableau, inf, sup); // trier la partie de gauche QuickSort(tableau, inf, milieu); // trier la partie de droite QuickSort(tableau, milieu+1, sup); } INF1101 Algorithmes et structures de données

Exemple d’exécution de Partition Premier appel Quicksort(a,0,4) Pivot = Tab[2] = 5 j i 11 9 7 5 2 0 1 2 3 4 i INF1101 Algorithmes et structures de données

INF1101 Algorithmes et structures de données La fonction Partition template <class T> int Partition(vector<T>& tableau, int inf, int sup) { T pivot, tempo; int i,j; pivot = tableau[(sup+inf)/2]; i = inf-1; j = sup+1; // Suite a la page suivante INF1101 Algorithmes et structures de données

La fonction Partition (suite) while ( i<j ) // tant que les index ne croisent pas { // conserver les éléments plus petits ou égaux //au pivot à sa gauche do { i++; } while (tableau[i]<pivot); // conserver les éléments plus grands ou //égaux au pivot à sa droite { j--; } while (tableau[j]>pivot); // Permuter les éléments qui ne sont pas // à leur place if ( i<j) { tempo = tableau[i]; tableau[i]= tableau[j]; tableau[j]= tempo; } return j; } INF1101 Algorithmes et structures de données

Complexité du Quicksort Cas moyen et meilleur cas Complexité du Quicksort dans le cas moyen et dans le meilleur cas . Pire cas Complexité du Quicksort dans le pire cas: INF1101 Algorithmes et structures de données