Structures de données IFT-2000

Slides:



Advertisements
Présentations similaires
Tris.
Advertisements

Introduction à l’Algorithmique
Calculs de complexité d'algorithmes
Les Algorithmes de tri.
1 UMLV Optimalité des tris par comparaisons : O(n logn) Classements linéaires Tris lexicographiques Tri lexicographique.
Traitement Co-Séquentiel: Appariment et Fusion de Plusieurs Listes
Utilisation des tableaux
ALGORITHMES RECURSIFS
Structures de données linéaires
Les algorithmes: complexité et notation asymptotique
Chapitre VII. Tri Tri par tas Tri rapide.
Bibliothèque standard du C++
Methode de Tri efficace
Les tris.
Gestion de Fichiers Arbres B.
Structures de données IFT-2000
Les fichiers indexés (Les B-arbres)
Structures de données IFT Abder Alikacem La classe string Département dinformatique et de génie logiciel Édition Septembre 2009 Département dinformatique.
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-10541
Structures de données IFT-2000
Structures de données IFT-10541
INF1101 Algorithmes et structures de données
Structures de données IFT-2000
Présentation Structures de Données et TDA
Gestion de Fichiers Tri Interne Efficace et Tri Externe.

Efficacité des algorithmes
Gestion de Fichiers GF-10: Traitement Co-Sequentiel: Appariment et Fusion de Plusieures Listes (Base sur les sections de Folk, Zoellick & Riccardi,
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.
Structures de données IFT-2000
Structures de données IFT-10541
Structures de données IFT-2000 Abder Alikacem La récursivité Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000
Structures de données IFT Abder Alikacem Semaine 10 Les arbres SPLAY Département dinformatique et de génie logiciel Édition septembre
Structures de données IFT-2000 Abder Alikacem Semaine 11 Gestion des arbres binaires de tri et de recherche. Les arbres cousus. Les arbres n-aires Département.
INF1101 Cours11 Monceaux INF1101 – Algorithmes et structures de données.
Analyse d’algorithmes
Structures de données IFT-2000

Structures de données IFT-2000
1 Notations Asymptotiques Et Complexité Notations asymptotiques : 0 et  Complexité des algorithmes Exemples de calcul de complexité.
ALGORITHME DE TRI Le tri par insertion.
ALGORITHMIQUE Recherches : Tris : séquentielle, dichotomique
Méthodes de tri.
Arbres binaires et tables de hachage
ETNA – 1ème année Guillaume Belmas –
GF-11: Tri Interne Efficace et Tri Externe
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.
Structures de données avancées : LH (Hachage linéaire) D. E ZEGOUR Institut National d ’Informatique.
Tutorat en bio-informatique Le 28 novembre Au programme… Algorithmes de tri dans un tableau (suite) Récursivité MAT1400.
2005/2006 Structures de Données Introduction à la complexité des algorithmes.
1 UMLV  FICHIERS Mémoire de masse découpée en blocs Fichier :liste chaînée de blocs, ou arbre de blocs (répertoires - fichiers)‏ Bloc d’éléments Bloc.
Structures de données avancées : Arbres B+ avec expansion partielle D. E ZEGOUR Institut National d ’Informatique.
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.
La pile de crêpes.
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.
Structures de données IFT-2000 Abder Alikacem Laboratoire #1 Département d’informatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000 Abder Alikacem Semaine 10 Les algorithmes de recherche Les structures arborescentes Département d’informatique et de génie.
Les monceaux (Heap) Monceaux Propriétés des Monceaux
4/25/2017 4:30 PM Arbres (2,4) CSI2510 CSI2510.
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.
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:

Structures de données IFT-2000 Abder Alikacem Semaine 14 Les algorithmes de tri Édition septembre 2009 Département d’informatique et de génie logiciel

Plan Définitions et propriétés Les algorithmes de tri simples et leur complexité Les algorithmes de tri complexes et leur complexité Le tri rapide (QuickSort) Le tri-fusion (MergeSort) Le tri par monceau (HeapSort)

Traitement de données triées Le traitement de données déjà triées est plus rapide. Il faut trier des données à bas coût ! nb de comparaisons nb de déplacements d’éléments espace mémoire requis Besoin : attribut de tri (clé) : <nom,…>, <nom,prénom,...> que l’on peut comparer {<,=,>} (c.-à-d.  ordre total)

Critères d'analyse Complexité en temps : 2 critères de base nombre de comparaisons entre clés nombre de transferts (ou d’échanges) d'éléments Complexité en place mémoire : nécessaire au tri tri sur place (in situ) : en O(1) tri à côté : en O(n) Stabilité conserve l'ordre originel pour éléments de clés égales Progressivité à l'étape k trie les k premiers éléments de la liste Configuration particulière des données : aléatoires, triées, inversées, égales, presque triées

Les algorithme de tri Les algorithmes de tri «classiques»: Tris élémentaires tri insertion; tri sélection; Etc.. Tris dichotomiques tri rapide (Quick Sort); tri fusion; Tris par structure tri par arbre (Tree Sort); tri par monceau (Heap Sort) tri pigeonnier (Pigeon Hole). tri basique … et le Bogo tri

Tris simples Algorithme#1 : Tri par insertion (trace en classe) insérer chacun des n éléments à la bonne place dans le tableau créé jusqu’ici 44,55,12,42,94,18,06,67 for (int i=1; i<n; i++ ) { Tmp = Tableau[i]; j=i; while ( (--j>=0) && (Tmp<Tableau[j]) ) Tableau[j+1]=Tableau[j]; Tableau[j+1]=Tmp; }

Tris simples Tri shell, Donald Shell Une variante du tri par insertion Principe du tri shell éliminer les plus grands désordres pour abréger le travail aux étapes suivantes Idée ordonner des séries d'éléments éloignés de h, h prenant de valeurs de plus en plus petites (jusqu'à 1) Exemple (suite déterminée empiriquement) hn = (1093, 384, 121, 40, 13, 4, 1) Hn+1 = 3 hn +1 On a démontré que la complexité dans le pire des cas est O(n3/2 ). Très efficace jusqu'à 5000 éléments

Tris simples Tri par sélection (trace en classe): 44,55,12,42,94,18,06,67 Algorithme : remplir les cases de 1 à n avec le minimum des éléments du tableau restant for (int i=0 ; i<n-1 ; i++ ) { //Recherche de l'indice du plus petit element min = i; for (int 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; Stable? 21,17,21,5,2,9,2,7

Tris simples Tri à bulles (« Bubblesort ») : trace en classe 44,55,12,42,94,18,06,67 Algorithme : remonter les plus petites bulles à la surface, et ce, à chaque itération for (int i=0; i<n-1; i++) for (int j=n-1; j>i; j--) if ( Tableau[j-1]> Tableau[j]) { Tmp = Tableau[j-1]; Tableau[j-1] = Tableau[j]; Tableau[j] = Tmp; }

Tris simples Tri à bulles (« Bubblesort ») Première amélioration Une première amélioration consiste à arrêter le processus s'il n'y a aucun échange dans une passe. Deuxième amélioration : ShakerSort Une deuxième amélioration consiste à alterner le sens des passes. Troisième amélioration Une troisième qui consiste à reprendre au début chaque fois qu’il y a une permutation.

Tris complexes Tri rapide (« Quicksort ») Tri des bijoutiers Algorithme choisir un pivot p (élément médian) partager le tableau en 2 : sous-tableau de gauche : éléments ≤ p sous-tableau de droite : éléments > p l’élément entre les 2 le pivot est à sa place définitive appel récursif avec le sous-tableau de gauche appel récursif avec le sous-tableau de droite Partage avec pivot = 3 3 2 4 1 7 6 3 2 1 7 4 6 < 3 ³ 3 7 2 1 3 4 6 Trace en classe: 44,55,12,42,94,18,06,67 Suite du tri TRI TRI 3 1 2 4 6 7

Problèmes du « Quicksort » Algorithme récursif hauteur des appels récursifs meilleur cas : O(log n) pire cas : O(n) Comment faire pour minimiser cette hauteur ? empiler toujours de sous-tableaux de taille optimum Tout dépend du choix du pivot du pire cas : O(n2) au meilleur cas : O(n log n) Comment choisir un bon pivot ?

Tri par fusion

t1 Trié t2 Trié 1 n 1 m t3 Trié 1 n+m template <typename T> void triFusion(T t[], int debut, int fin) { if(debut<fin) int milieu=(debut+fin)/2; triFusion(t, debut, milieu); triFusion(t, milieu+1, fin); fusionner(t, debut, milieu, fin); }

void fusionner(T t[], int debut, int milieu, int fin) { int i1=debut; // indice courant dans t[debut..milieu] int i2=milieu+1; // indice courant dans t[milieu+1..fin] int i3=0; // indice courant dans t3 (tableau auxiliaire) T *t3; // tableau auxiliaire dynamique de longueur fin-debut+1 t3= new T[fin-debut+1]; while((i1<=milieu)&&(i2<=fin)) { if(t[i1]<t[i2]) { t3[i3]=t[i1]; i1++;} else { t3[i3]=t[i2]; i2++; } i3++; } if(i1>milieu) // on a epuisé t[debut..milieu] for(;i2<=fin;i2++,i3++) t3[i3]=t[i2]; else // on a epuisé t[milieu+1..fin] for(;i1<=milieu;i1++,i3++) t3[i3]=t[i1]; // il faut transférer t3 à sa place dans t for(i1=0;i1<i3;i1++) { t[i1+debut]=t3[i1]; } delete [] t3;

Tris complexes Tri par arbre (« Heapsort ») : trace en classe 44,55,12,42,94,18,06,67 Algorithme bâtir une structure d’arbre sur place hi  h2i hi  h2i+1 structure appelée « monceau » (« heap ») Un arbre complet tel que pour chaque noeud N dont le parent est P, la clé de P est plus grande que celle de N Normalement implémenté dans un tableau Présent dans la STL Offre les fonctions suivantes: push() top() pop() Voir les exemples fournis en exemple dans la semaine 14

Tris complexes 44 55 94 42 67 12 18 06 Tri par arbre (« Heapsort ») 2 3 4 5 6 7 8 1

Tris complexes 44 55 94 42 67 12 18 06 Création du monceau 2 3 4 5 6 7

Tris complexes 44 55 94 42 67 12 18 06 2 3 4 5 6 7 8 1

Tris complexes 44 55 94 67 42 12 18 06 2 3 4 5 6 7 8 1

Tris complexes 44 55 94 67 42 12 18 06 2 3 4 5 6 7 8 1

Tris complexes 44 55 94 67 42 12 18 06 2 3 4 5 6 7 8 1

Tris complexes 44 55 94 67 42 18 12 06 2 3 4 5 6 7 8 1

Tris complexes 44 55 94 67 42 18 12 06 2 3 4 5 6 7 8 1

Tris complexes 44 94 55 67 42 18 12 06 2 3 4 5 6 7 8 1

Tris complexes 44 94 55 67 42 18 12 06 2 3 4 5 6 7 8 1

Tris complexes 94 44 55 67 42 18 12 06 2 3 4 5 6 7 8 1

Tris complexes 94 67 55 44 42 18 12 06 2 3 4 5 6 7 8 1

Tris complexes 94 67 55 44 42 18 12 06 2 3 4 5 6 7 8 1

Tris complexes Le tri 94 67 55 44 42 18 12 06 2 3 4 5 6 7 8 1

Tris complexes 42 67 55 44 94 18 12 06 2 3 4 5 6 7 8 1

Tris complexes 42 67 55 44 94 18 12 06 2 3 4 5 6 7 8 1

Tris complexes 42 67 55 44 94 18 12 06 2 3 4 5 6 7 8 1

Tris complexes 67 42 55 44 94 18 12 06 2 3 4 5 6 7 8 1

Tris complexes 67 55 42 44 94 18 12 06 2 3 4 5 6 7 8 1

Tris complexes 67 55 42 44 94 18 12 06 2 3 4 5 6 7 8 1

Tris complexes 06 55 42 44 94 18 12 67 2 3 4 5 6 7 8 1

Tris complexes 55 06 42 44 94 18 12 67 2 3 4 5 6 7 8 1

Tris complexes 55 44 42 06 94 18 12 67 2 3 4 5 6 7 8 1

Tris complexes 55 44 42 06 94 18 12 67 2 3 4 5 6 7 8 1

Tris complexes 12 44 42 06 94 18 55 67 2 3 4 5 6 7 8 1

Tris complexes 44 12 42 06 94 18 55 67 2 3 4 5 6 7 8 1

Tris complexes 44 42 12 06 94 18 55 67 2 3 4 5 6 7 8 1

Tris complexes 44 42 12 06 94 18 55 67 2 3 4 5 6 7 8 1

Tris complexes 12 42 44 06 94 18 55 67 2 3 4 5 6 7 8 1

Tris complexes 42 12 44 06 94 18 55 67 2 3 4 5 6 7 8 1

Tris complexes 42 12 44 06 94 18 55 67 2 3 4 5 6 7 8 1

Tris complexes 06 12 44 42 94 18 55 67 2 3 4 5 6 7 8 1

Tris complexes 18 12 44 42 94 06 55 67 2 3 4 5 6 7 8 1

Tris complexes 18 12 44 42 94 06 55 67 2 3 4 5 6 7 8 1

Tris complexes 06 12 44 42 94 18 55 67 2 3 4 5 6 7 8 1

Tris complexes 12 06 44 42 94 18 55 67 2 3 4 5 6 7 8 1

Tris complexes 12 06 44 42 94 18 55 67 2 3 4 5 6 7 8 1

Tris complexes 06 12 44 42 94 18 55 67 2 3 4 5 6 7 8 1

Tris complexes 06 12 44 42 94 18 55 67 2 3 4 5 6 7 8 1

Conclusion Autres tris Si le tableau contient un grand nombre de valeurs similaires: algorithme par comptage ou tri par pigeonnier. Dans la cas où les clefs sont bornées (c'est à dire comprises entre un minimum et un maximum connus à l'avance) et en nombre fini: algorithme de tri basique (tri par bacs). ..et bien sûr le bogo tri!

Les tris dans la STL Ils sont présents dans la bibliothèque <algorithm> sort(): Doit garantir un temps moyen dans O(n lg n) Le tri rapide (quicksort) répond à ce critère stable_sort(): Doit garantir O(n lg n) dans le pire cas Peut utiliser de la mémoire supplémentaire Le tri par fusion (mergesort) répond à ce critère partial_sort() Doit permettre le tri partiel Le tri par monceau (heapsort) répond à ce critère

Exercices. Analyse Algorithmes En choisissant l’opération d’affectation comme baromètre, déterminez la fonction f(n) qui exprime le temps de calcul pour l’algorithmes suivant. Déduisez sa complexité dans la notation du O().   i  1 Tant Que i < n début j  1 Tant que j < n j  j + 1 fin i  i + 1 b)

Exercices. Analyse Algorithmes Mêmes questions.. c) i  1 Tant Que i < n début j  1 Tant Que j < i j  j + 1 fin i  i +1

Exercices. Analyse Algorithmes Mêmes questions pour l’algorithme suivant. s  0 i  1 Tant Que i ≤ n début s  s - 1 j  1 Tant Que j ≤ i s  s + 2 j  j+1 fin i  i + 1 d)

Exercices. Analyse Algorithmes Tant Que i <n début i  2*i fin g) h) i  1 Tant Que i ≤ n début j  1 Tant Que j < i j  j*2 fin i  i+1