ALGORITHMIQUE Recherches : Tris : séquentielle, dichotomique

Slides:



Advertisements
Présentations similaires
Tris.
Advertisements

Chap. 4 Recherche en Table
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.
1 UMLV 1. Introduction 2. Hachage ouvert 3. Hachage fermé 4. Implémentation des fonctions Méthodes de hachage.
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
Chap. 1 Structures séquentielles : listes linéaires
Initiation à la programmation et algorithmique cours 3
Algorithmique et programmation Informatique Cours 11 26/11/2001.
Traitement Co-Séquentiel: Appariment et Fusion de Plusieurs Listes
Utilisation des tableaux
ALGORITHMES RECURSIFS
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Structures de données linéaires
Récursivité.
Points importants de la semaine Les boucles. Les types arithmétiques. Les opérateurs.
Les structures de données arborescentes
Arbre binaire de recherche
Les algorithmes: complexité et notation asymptotique
RECURSIVITE ARBRES BINAIRES
Methode de Tri efficace
Méthode des k plus proches voisins
Les tris.
Python La programmation objet
Structures de données IFT-2000
Structures de données IFT-10541
INF1101 Algorithmes et structures de données
Courbes de Bézier.

Parallel Programming in C with MPI and OpenMP
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.
Programmation linéaire en nombres entiers : les méthodes de troncature
201 UMLV  Type « dictionnaire » sous-ensembles finis de E (ordonné) avec les opérations : Ens_vide :  Ens Ajouter : Ens x Elément  Ens Enlever.
Structures alternative et répétitive

L’essentiel du langage C
Structures des données
Le langage C Structures de données
Chapitre 21 Collections Partie II Algorithmes  Algorithmes sur des List : sort binarySearch reverse shuffle fill copy  Algorithmes sur des Collections.
1 Notations Asymptotiques Et Complexité Notations asymptotiques : 0 et  Complexité des algorithmes Exemples de calcul de complexité.
ALGORITHME DE TRI Le tri par insertion.
Création et présentation d’un tableau avec Word 2007
Ch. PAUL - Piles et Files à l'aide de listes chainées
LES PILES ET FILES.
ITI1520 Lab #8: Récursivité Gilbert Arbez, Mohamad Eid, Daniel Amyot, Sylvia Boyd, Diana Inkpen et Alan Williams.
Chapitre 6 Les traitements avancés
Algorithmes de tri et de recherche
Méthodes de tri.
Arbres binaires et tables de hachage
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.
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.
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.
Scripts et fonctions Instructions de contrôle
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.
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.
M. BENJELLOUN : 2005 Le but final est de programmer un jeu où l'ordinateur choisira un nombre aléatoire entre 0 et 100 que vous devez deviner.
Transcription de la présentation:

ALGORITHMIQUE Recherches : Tris : séquentielle, dichotomique sélection, bulle, insertion, shell

ALGORITHMIQUE Recherche et Tris RECHERCHES : relation d’équivalence du style « égal ». TRIS : relation d’ordre total du style « inférieur ou égal ». Application possible : entiers, réels et chaînes de caractères (strcmp) Application impossible : nombres complexes et structures (en C). Pour les structures en C il faut disposer d'un champ correspondant à la clé de recherche et/ou tri.

Algorithmes présentés RECHERCHES Séquentielle (linéaire) Dichotomique (dans un tableau ou une liste triée) TRIS Tri par insertion Tri par sélection Tri par bulle v1 et v2 Shell sort Quicksort (voir séance récursivité)

Recherche séquentielle ou linéaire Principe Principe : comparer les uns après les autres tous les éléments du tableau avec l’objet recherché. Arrêt si : l’objet a été trouvé tous les éléments ont été passés en revue et l’objet n’a pas été trouvé tableau       Etape courante i objet = t[i] Etapes précédentes : objet  t[j] , j < i ALGORITHMIQUE (c) Ch. PAUL

Recherche séquentielle Programme int rechSequentielle(int t[], int quoi, int max) { int i; int arret= 0; i= 0; while( (i < max) && ( arret == 0)) { if (t[i] == quoi) arret = 1; else i++; } if (i == max) return -1; return i; Recherche séquentielle Programme ALGORITHMIQUE (c) Ch. PAUL

Recherche dichotomique Principe ATTENTION : toute collection d’objet préalablement triée.   A chaque étape : découpage du tableau en deux sous-tableau à l’aide d’un indice médian (tableau inférieur) et (tableau supérieur) comparaison de la valeur située à l’indice moyen et de l’objet recherché, si l’objet est supérieur ou égal à la valeur t[moyen] relancer la recherche avec le tableau supérieur, sinon relancer la recherche avec le tableau inférieur. ALGORITHMIQUE (c) Ch. PAUL

Recherche dichotomique Exemple quoi = 11 : quoi < t[med] med = (max + min) / 2 min = 0 max = 8 7 9 11 12 33 max  med -1 min 7 9 11 12 33 ALGORITHMIQUE (c) Ch. PAUL

Recherche dichotomique Programme int rechDichotomique(int t[], int quoi, int max) { int min = 0 , med, pos, arret = 0; do{ med= (max+min)/2; if(quoi == t[med]) { arret = 1; pos = med; } else { if(quoi > t[med]) min = med + 1; else max = med - 1; if(min > max) { arret = 1; pos = -1; } while(arret != 1); return pos; sortie de boucle (arret = 1) ou (quoi = t[med]) ou (min > max) ALGORITHMIQUE (c) Ch. PAUL

Algorithmes de recherche complexité : exemple Exemple sur une recherche de 256 objets (28) Recherche linéaire : Au pire 256 (n) en bout de tableau Au mieux en début du tableau 1 En moyenne 128 (n/2) Recherche dichotomique : Etape 1 : 256 Etape 5 : 16 Etape 2 : 128 Etape 6 : 8 Etape 3 : 64 Etape 7 : 4 Etape 4 : 32 Etape 8 : 2 Coût au pire, au mieux, en moyenne : log2 (256) soit 8. Attention disposer d'une collection triée. ALGORITHMIQUE (c) Ch. PAUL

Algorithmes de recherche complexité : évaluation Le coût du tri est plus important qu'une simple recherche. La comparaison entre une recherche simple et un tri suivi d'une recherche dichotomique est à l'avantage de la recherche simple. ALGORITHMIQUE (c) Ch. PAUL

ALGORITHMIQUE (c) Ch. PAUL Tris Prérequis : existence d'une relation d’ordre total du type ≤ . Généralisation : Ensemble ou collection d’informations possédant une clé. Existence d'une relation d’ordre total de type  sur la clé Exemple : ordre lexicographique (utiliser strcmp en C) Dans la suite utilisation de tableaux d’entiers : t[1..n] est ordonné : si pour tout i, j : i < j alors t[i] t[j] ALGORITHMIQUE (c) Ch. PAUL

Tri sélection - Principe A chaque étape i : On recherche parmi les t[i],.. t[n] le plus petit élément qui doit être positionné à la place i. Supposons cet élément à ind_min t[ind_min] et t[i] sont échangés. i = i+1, retourner en 1 Nota : au cours du tri les éléments de 0 à i –1 sont tous ordonnés et bien placés ALGORITHMIQUE (c) Ch. PAUL

Tri sélection - Exemple Eléments de 1 à i –1 bien placés t[ind_min] le plus petit de tous les éléments entre i et n, à permuter avec t[i]   1 i-1 i 5 ind_min n 15 9 7 12 19 ALGORITHMIQUE (c) Ch. PAUL

Tri sélection Programme void triSelection(int t[ ], int max) { int ind_min, i, j; int temp; i= 0; while(i < max) { ind_min= i; // RECHERCHE DE L'INDICE CONTENANT // LE PLUS PETIT ELEMENT temp= t[i]; t[i]= t[ind_min]; t[ind_min]= temp; i= i+ 1; } ALGORITHMIQUE (c) Ch. PAUL

Tri sélection Programme void triSelection(int t[ ], int max) { int ind_min, i, j; int temp; i= 0; while(i < max) { ind_min= i; for(j = i+1; j < max; j++) if(t[j] < t[ind_min]) ind_min= j; temp= t[i]; t[i]= t[ind_min]; t[ind_min]= temp; i= i+ 1; } ALGORITHMIQUE (c) Ch. PAUL

Tri bulle ou échange Principe Tableau de n éléments : au début max = n. A la fin de chaque étape la partie du tableau de t[max+1,.. n] est constituée d’éléments bien placés et tous supérieurs aux éléments de t[0,.. max-1]. Pour les éléments i, de 0 à max-1 comparer et permuter successivement (si nécessaire) les éléments t[i] et t[i+1]. Faire max = max -1, (fin de l'étape) recommencer en 1   Arrêt de l’algorithme lorsque max = 0. Remarque : Possibilité d'arrêter l’algorithme si à une étape il n’y a pas eu de changement. ALGORITHMIQUE (c) Ch. PAUL

ALGORITHMIQUE (c) Ch. PAUL Tri bulle - exemple Tri bulle version de base De i = 1 à max -1 Comparaison et échange si nécessaire entre t[i] et t[i+1] max = max -1 Retourner en 1 i-1 i i+1 MAX+1 n 15 9 7 17 19 ALGORITHMIQUE (c) Ch. PAUL

ALGORITHMIQUE (c) Ch. PAUL Tri bulle Programme void triBulle(int t[ ], int max) { int i, temp; while(max > 0) { i = 0; while(i < max -1) // COMPARAISON DES TERMES // ADJACENTS, ECHANGE SI // NECESSAIRE max= max -1; } ALGORITHMIQUE (c) Ch. PAUL

ALGORITHMIQUE (c) Ch. PAUL Tri bulle Programme void triBulle(int t[ ], int max) { int i, temp; while(max > 0) { i = 0; while(i < max -1) { if( t[i] > t[i+1]) { temp = t[i]; t[i] = t[i+1]; t[i+1] = temp; } i = i+1; max= max -1; ALGORITHMIQUE (c) Ch. PAUL

Tri bulle – améliorations Test d'arrêt : mise en place d'un indicateur d'échange effectués. Si au cours d'un passage aucun changement n'a été effectué : arrêt. Parcours dans les deux sens : on remarque que ce tri est particulièrement défavorable si il est dans l'ordre exactement inverse (valeurs élevées en bas du tableau). On met en place une double boucle pour : "pousser les valeurs les plus élevées vers le haut" "pousser les valeurs les plus petites vers le bas" ALGORITHMIQUE (c) Ch. PAUL

Tri insertion - Principe A chaque étape i (indice courant i du tableau) : La partie du tableau de 0 à i-1 est déjà triée ( les objets ne sont pas forcément à leur place finale) la valeur courante en i est enlevée de sa place initiale créant un trou. Les éléments de 0 à i-1 supérieurs à la valeur courante sont décalés vers la droite, déplaçant le trou (pos) vers la droite. La valeur courante est insérée à la bonne place (pos) dans le trou. ALGORITHMIQUE (c) Ch. PAUL

Tri insertion - Exemple Etape courante : i temp = 9 i-1 i n-1 7 17 19 22 9 Déplacement du trou vers la gauche tant que t[i] < t[pos] ALGORITHMIQUE (c) Ch. PAUL

Tri insertion Programme void triInsertion(int t[], int maxSaisi) { int i, pos, temp; for(i = 1; i< maxSaisi; i++) { temp = t[i]; pos= i; // DEPLACEMENT DU TROU // JUSQU'À LA BONNE POSITION t[pos] = temp; } les éléments de 1 à i-1 sont triés mais pas définitivement placés pos est la position courante du trou recherche de la bonne place ALGORITHMIQUE (c) Ch. PAUL

Tri insertion Programme void triInsertion(int t[], int maxSaisi) { int i, pos, temp; for(i = 1; i< maxSaisi; i++) { temp = t[i]; pos= i; while((pos > 0) && (t[pos-1] > temp)) { t[pos]= t[pos-1]; pos= pos -1; } t[pos] = temp; les éléments de 1 à i-1 sont triés mais pas définitivement placés pos est la position courante du trou recherche de la bonne place ALGORITHMIQUE (c) Ch. PAUL

ALGORITHMIQUE (c) Ch. PAUL Tri shell - Principe C'est une amélioration du tri insertion. Il est basé sur le constat que le tri insertion est coûteux lorsqu'il faut faire de grands déplacements. On pratique donc un tri insertion en déplaçant les valeurs d'un pas donné. On raffine ce pas jusqu'à la valeur 1. Lorsque le pas vaut 1 c'est le tri insertion. Le choix du pas est important pour les performances la série : 1, 4, 13, 40, 121 (pas = 3.pas+1) est souvent utilisée ALGORITHMIQUE (c) Ch. PAUL

ALGORITHMIQUE (c) Ch. PAUL Tri shell - Exemple Boucle de tri avec un "pas" de 4 53 31 10 87 13 59 62 26 8 38 A remarquer que le nombre 8 est déplacé de deux "pas" ALGORITHMIQUE (c) Ch. PAUL

ALGORITHMIQUE (c) Ch. PAUL Tri shell Programme void triShell(int tab[], int maxSaisi) { int pas, i, j, temp; pas = 0; while ( pas < maxSaisi) // Calcul du pas pas = 3*pas+1; } ALGORITHMIQUE (c) Ch. PAUL

ALGORITHMIQUE (c) Ch. PAUL Tri shell Programme void triShell(int tab[], int maxSaisi) { int pas, i, j, temp; pas = 0; while ( pas < maxSaisi) // Calcul du pas pas = 3*pas+1; while (pas != 0) // tant que le pas est > 0 { pas = pas/3; for(i= pas; i < maxSaisi; i++) { temp = tab[i]; // valeur à décaler éventuellement tab[j] = temp; } ALGORITHMIQUE (c) Ch. PAUL

ALGORITHMIQUE (c) Ch. PAUL Tri shell Programme void triShell(int tab[], int maxSaisi) { int pas, i, j, temp; pas = 0; while ( pas < maxSaisi) // Calcul du pas pas = 3*pas+1; while (pas != 0) // tant que le pas est > 0 { pas = pas/3; for(i= pas; i < maxSaisi; i++) { temp = tab[i]; // valeur à décaler éventuellement j = i; while((j>(pas-1)) && (tab[j-pas]> temp)) { tab[j] = tab[j-pas]; // échange des valeurs j = j-pas; } tab[j] = temp; ALGORITHMIQUE (c) Ch. PAUL

ALGORITHMIQUE (c) Ch. PAUL Tris - Complexité Le tri à bulle O(n2) Le tri sélection O(n2) Le tr insertion O(n2) Ces tris sont considérés comme inefficaces pour des problèmes de grande taille. Le tri rapide (quicksort) O(n2) au pire, O(n.log(n)) en moyenne. ALGORITHMIQUE (c) Ch. PAUL