Chapitre 4 : Algorithmes de recherche et de tri

Documents pareils
Architecture des Systèmes d Information Architecture des Systèmes d Information

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : hivert

1 Recherche en table par balayage

ARBRES BINAIRES DE RECHERCHE

introduction Chapitre 5 Récursivité Exemples mathématiques Fonction factorielle ø est un arbre (vide) Images récursives

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Quelques Algorithmes simples

Recherche dans un tableau

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Les arbres binaires de recherche

Algorithmes récursifs

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

4. Les structures de données statiques

Bases de données documentaires et distribuées Cours NFE04

Algorithmique I. Algorithmique I p.1/??

ALGORITHMIQUE II NOTION DE COMPLEXITE. SMI AlgoII

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

SUPPORT DE COURS. Dr. Omari Mohammed Maître de Conférences Classe A Université d Adrar Courriel : omarinmt@gmail.com

Algorithmique et structures de données I

Quelques algorithmes simples dont l analyse n est pas si simple

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

Algorithmique, Structures de données et langage C

Résolution de systèmes linéaires par des méthodes directes

Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation.

Groupe symétrique. Chapitre II. 1 Définitions et généralités

Jean-Philippe Préaux

Introduction à MATLAB R

CCP PSI Mathématiques 1 : un corrigé

Chapitre 5 : Flot maximal dans un graphe

Continuité et dérivabilité d une fonction

Algorithme. Table des matières

Chapitre 7. Récurrences

Les deux points les plus proches

Définitions. Numéro à préciser. (Durée : )

Algorithmique et Programmation

Dérivation : Résumé de cours et méthodes

Algorithmique, graphes et programmation dynamique Notes de Cours Rapport de Travaux Pratiques. Laurent Canet

Encryptions, compression et partitionnement des données

Algorithmique et Programmation, IMA

Cours d Analyse. Fonctions de plusieurs variables

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Contexte. Pour cela, elles doivent être très compliquées, c est-à-dire elles doivent être très différentes des fonctions simples,

CHAPITRE V. Recherche et tri

Initiation à la programmation en Python

Résolution d équations non linéaires

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Limites finies en un point

Souad EL Bernoussi. Groupe d Analyse Numérique et Optimisation Rabat http ://

ONe Key ID Compte InfoCentre pour les entreprises Compte auprès du ministère de l Environnement (MEO)

La classification automatique de données quantitatives

Organigramme / Algorigramme Dossier élève 1 SI

Rappels sur les suites - Algorithme

Construction d un fichier de zone Déboguage et dépannage

Une nouvelle approche de détection de communautés dans les réseaux sociaux

4D v11 SQL Release 5 (11.5) ADDENDUM

CORRECTION EXERCICES ALGORITHME 1

Décision Markovienne appliquée à un jeu de stop ou encore : Pickomino (Heckmeck Am Bratwurmeck)

Cours de Probabilités et de Statistique

Bases de programmation. Cours 5. Structurer les données

SPECIFICATION DES ECHANGES DE DONNEES INFORMATISES (E.D.I.)

INFORMATIONS DIVERSES

Licence Sciences et Technologies Examen janvier 2010

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Exo7. Calculs de déterminants. Fiche corrigée par Arnaud Bodin. Exercice 1 Calculer les déterminants des matrices suivantes : Exercice 2.

Travaux Dirigés n 1 : chaînes de caractères

Équations non linéaires

Arithmétique binaire. Chapitre. 5.1 Notions Bit Mot

Ensimag 1ère année Algorithmique 1 Examen 2ième session 24 juin Algorithmique 1

* très facile ** facile *** difficulté moyenne **** difficile ***** très difficile I : Incontournable T : pour travailler et mémoriser le cours

La NP-complétude. Johanne Cohen. PRISM/CNRS, Versailles, France.

CARTE DE VOEUX À L ASSOCIAEDRE

LES REGLEMENTS AVEC SOCIEL.NET DERNIERE MISE A JOUR : le 14 juin 2010

Etude d Algorithmes Parallèles de Data Mining

FONCTION DE DEMANDE : REVENU ET PRIX

Nouvelles propositions pour la résolution exacte du sac à dos multi-objectif unidimensionnel en variables binaires

Cours d Informatique

Propagation sur réseau statique et dynamique

Adama MBODJI MBODJ.SYSTEM

Systèmes d Exploitation - ENSIN6U3. Aix-Marseille Université

Nouvelles propositions pour la résolution exacte du problème de sac à dos bi-objectif unidimensionnel en variables binaires

CREATION D UNE EVALUATION AVEC JADE par Patrick RUER (

Chapitre 4 : Édition de fichiers texte - Vi

NOTE SUR LA MODELISATION DU RISQUE D INFLATION

Dérivation : cours. Dérivation dans R

Entraînement au concours ACM-ICPC

Corrigé des TD 1 à 5

Cours Informatique Master STEP

1 CRÉER UN TABLEAU. IADE Outils et Méthodes de gestion de l information

Découverte de Python

Projet Active Object

Gestion de photos avec Picasa

Image d un intervalle par une fonction continue

QUELQUES ACTIVITES RELATIVES A LA PARTIE A Propagation d une onde ; onde progressive. Comment installer le format de compression divx?

MABioVis. Bio-informatique et la

M06/5/COMSC/SP1/FRE/TZ0/XX INFORMATIQUE NIVEAU MOYEN ÉPREUVE 1. Mardi 2 mai 2006 (après-midi) 1 heure 30 minutes INSTRUCTIONS DESTINÉES AUX CANDIDATS

Recherche d Information(RI): Fondements et illustration avec Apache Lucene. par Majirus

TUTORIEL Qualit Eval. Introduction :

UNIVERSITE DE TOULON UFR FACULTE DE DROIT REGLEMENT D EXAMEN ANNEE 2012/2017 LICENCE DROIT MENTION DROIT GENERAL

Techniques de stockage. Techniques de stockage, P. Rigaux p.1/43

Traitement des données avec Microsoft EXCEL 2010

Transcription:

Chapitre 4 : Algorithmes de recherche et de tri Faculté des Sciences, Oujda Master Spécialisé Ingénierie Informatique Université Mohamed Premier Septembre, 2012

Sommaire du chapitre 4

Sommaire du chapitre 4 Algorithmes de recherche

Sommaire du chapitre 4 Algorithmes de recherche Algorithmes de tri

Algorithmes de recherche Problème de recherche Définition 1.1

Algorithmes de recherche Problème de recherche Définition 1.1 Entrée :

Algorithmes de recherche Problème de recherche Définition 1.1 Entrée : 1 Une liste a de taille n.

Algorithmes de recherche Problème de recherche Définition 1.1 Entrée : 1 Une liste a de taille n. 2 Un élément e.

Algorithmes de recherche Problème de recherche Définition 1.1 Entrée : 1 Une liste a de taille n. 2 Un élément e. Sortie :

Algorithmes de recherche Problème de recherche Définition 1.1 Entrée : 1 Une liste a de taille n. 2 Un élément e. Sortie : 1 Indice de l élément e dans a, si e a.

Algorithmes de recherche Problème de recherche Définition 1.1 Entrée : 1 Une liste a de taille n. 2 Un élément e. Sortie : 1 Indice de l élément e dans a, si e a. 2 0, sinon.

Algorithmes de recherche Algorithme de recherche séquentielle

Algorithmes de recherche Algorithme de recherche séquentielle Idée : parcourir la liste a.

Algorithmes de recherche Algorithme de recherche séquentielle Idée : parcourir la liste a. Élément par élément (de gauche à droite, ou de droite à gauche);

Algorithmes de recherche Algorithme de recherche séquentielle Idée : parcourir la liste a. Élément par élément (de gauche à droite, ou de droite à gauche); En commençant du premier (ou dernier) élément;

Algorithmes de recherche Algorithme de recherche séquentielle Idée : parcourir la liste a. Élément par élément (de gauche à droite, ou de droite à gauche); En commençant du premier (ou dernier) élément; Jusqu à trouver l élément e, ou atteindre la fin (ou le début) de la liste.

Algorithmes de recherche Pseudo-code 1.2

Algorithmes de recherche Pseudo-code 1.2 Fonction Rech Séq(a : Liste; n, e : Entier) : Entier Var i : Entier; Début Pour i := 1 à n Faire Si(a[i] = e) Alors Retourner (i); FinSi FinPour Retourner (0); Fin

Algorithmes de recherche Complexité

Algorithmes de recherche Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme.

Algorithmes de recherche Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme. Dans le pire des cas :

Algorithmes de recherche Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme. Dans le pire des cas : L élément e n existe pas dans la liste a, ou bien il existe, mais en dernière position (cas d une recherche orientée de gauche à droite).

Algorithmes de recherche Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme. Dans le pire des cas : L élément e n existe pas dans la liste a, ou bien il existe, mais en dernière position (cas d une recherche orientée de gauche à droite). C(n) = n = O(n).

Algorithmes de recherche Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme. Dans le pire des cas : L élément e n existe pas dans la liste a, ou bien il existe, mais en dernière position (cas d une recherche orientée de gauche à droite). C(n) = n = O(n). Dans le meilleur des cas :

Algorithmes de recherche Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme. Dans le pire des cas : L élément e n existe pas dans la liste a, ou bien il existe, mais en dernière position (cas d une recherche orientée de gauche à droite). C(n) = n = O(n). Dans le meilleur des cas : L élément e existe en première position (cas d une recherche orientée de gauche à droite).

Algorithmes de recherche Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme. Dans le pire des cas : L élément e n existe pas dans la liste a, ou bien il existe, mais en dernière position (cas d une recherche orientée de gauche à droite). C(n) = n = O(n). Dans le meilleur des cas : L élément e existe en première position (cas d une recherche orientée de gauche à droite). C(n) = 1 = Ω(1).

Algorithmes de recherche Algorithme de recherche dichotomique

Algorithmes de recherche Algorithme de recherche dichotomique Hypothèse : la liste a[d...f ] est déjà triée.

Algorithmes de recherche Algorithme de recherche dichotomique Hypothèse : la liste a[d...f ] est déjà triée. Idée :

Algorithmes de recherche Algorithme de recherche dichotomique Hypothèse : la liste a[d...f ] est déjà triée. Idée : 1 Tant que cela est possible, diviser la liste a en 2 sous-listes : a[d...m] et a[m + 1...f ] où m est le milieu de [d...f ].

Algorithmes de recherche Algorithme de recherche dichotomique Hypothèse : la liste a[d...f ] est déjà triée. Idée : 1 Tant que cela est possible, diviser la liste a en 2 sous-listes : a[d...m] et a[m + 1...f ] où m est le milieu de [d...f ]. 2 Comparer e avec l élément a m. Il y a trois cas.

Algorithmes de recherche Algorithme de recherche dichotomique Hypothèse : la liste a[d...f ] est déjà triée. Idée : 1 Tant que cela est possible, diviser la liste a en 2 sous-listes : a[d...m] et a[m + 1...f ] où m est le milieu de [d...f ]. 2 Comparer e avec l élément a m. Il y a trois cas. Si e = a m : on a trouvé l élément e à l indice m.

Algorithmes de recherche Algorithme de recherche dichotomique Hypothèse : la liste a[d...f ] est déjà triée. Idée : 1 Tant que cela est possible, diviser la liste a en 2 sous-listes : a[d...m] et a[m + 1...f ] où m est le milieu de [d...f ]. 2 Comparer e avec l élément a m. Il y a trois cas. Si e = a m : on a trouvé l élément e à l indice m. Si e > a m : lancer la recherche dans le sous-tableau a[m + 1...f ].

Algorithmes de recherche Algorithme de recherche dichotomique Hypothèse : la liste a[d...f ] est déjà triée. Idée : 1 Tant que cela est possible, diviser la liste a en 2 sous-listes : a[d...m] et a[m + 1...f ] où m est le milieu de [d...f ]. 2 Comparer e avec l élément a m. Il y a trois cas. Si e = a m : on a trouvé l élément e à l indice m. Si e > a m : lancer la recherche dans le sous-tableau a[m + 1...f ]. Si e < a m : lancer la recherche dans le sous-tableau a[d...m 1].

Algorithmes de recherche Algorithme de recherche dichotomique Hypothèse : la liste a[d...f ] est déjà triée. Idée : 1 Tant que cela est possible, diviser la liste a en 2 sous-listes : a[d...m] et a[m + 1...f ] où m est le milieu de [d...f ]. 2 Comparer e avec l élément a m. Il y a trois cas. Si e = a m : on a trouvé l élément e à l indice m. Si e > a m : lancer la recherche dans le sous-tableau a[m + 1...f ]. Si e < a m : lancer la recherche dans le sous-tableau a[d...m 1]. Il s agit bien d un algorithme de type Diviser pour régner.

Algorithmes de recherche Pseudo-code 1.3

Algorithmes de recherche Pseudo-code 1.3 Fonction Rech Dicho(a : Liste; d, f, e : Entier) : Entier

Algorithmes de recherche Pseudo-code 1.3 Fonction Rech Dicho(a : Liste; d, f, e : Entier) : Entier Var m : Entier;

Algorithmes de recherche Pseudo-code 1.3 Fonction Rech Dicho(a : Liste; d, f, e : Entier) : Entier Var m : Entier; Début

Algorithmes de recherche Pseudo-code 1.3 Fonction Rech Dicho(a : Liste; d, f, e : Entier) : Entier Var m : Entier; Début Si(d > f ) Alors Retourner (0); FinSi

Algorithmes de recherche Pseudo-code 1.3 Fonction Rech Dicho(a : Liste; d, f, e : Entier) : Entier Var m : Entier; Début Si(d > f ) Alors Retourner (0); FinSi m := d+f 2 ;

Algorithmes de recherche Pseudo-code 1.3 Fonction Rech Dicho(a : Liste; d, f, e : Entier) : Entier Var m : Entier; Début Si(d > f ) Alors Retourner (0); FinSi m := d+f ; 2 Si(a[m] = e) Alors Retourner (m); FinSi

Algorithmes de recherche Pseudo-code 1.3 Fonction Rech Dicho(a : Liste; d, f, e : Entier) : Entier Var m : Entier; Début Si(d > f ) Alors Retourner (0); FinSi m := d+f ; 2 Si(a[m] = e) Alors Retourner (m); FinSi Si(a[m] < e) Alors Retourner Rech Dicho(a, m + 1, f, e);

Algorithmes de recherche Pseudo-code 1.3 Fonction Rech Dicho(a : Liste; d, f, e : Entier) : Entier Var m : Entier; Début Si(d > f ) Alors Retourner (0); FinSi m := d+f ; 2 Si(a[m] = e) Alors Retourner (m); FinSi Si(a[m] < e) Alors Retourner Rech Dicho(a, m + 1, f, e); Sinon Retourner Rech Dicho(a, d, m 1, e);

Algorithmes de recherche Pseudo-code 1.3 Fonction Rech Dicho(a : Liste; d, f, e : Entier) : Entier Var m : Entier; Début Si(d > f ) Alors Retourner (0); FinSi m := d+f ; 2 Si(a[m] = e) Alors Retourner (m); FinSi Si(a[m] < e) Alors Retourner Rech Dicho(a, m + 1, f, e); Sinon Retourner Rech Dicho(a, d, m 1, e); FinSi

Algorithmes de recherche Pseudo-code 1.3 Fonction Rech Dicho(a : Liste; d, f, e : Entier) : Entier Var m : Entier; Début Si(d > f ) Alors Retourner (0); FinSi m := d+f ; 2 Si(a[m] = e) Alors Retourner (m); FinSi Si(a[m] < e) Alors Retourner Rech Dicho(a, m + 1, f, e); Sinon Retourner Rech Dicho(a, d, m 1, e); FinSi Fin

Algorithmes de recherche Complexité

Algorithmes de recherche Complexité Soit n = f d + 1, la taille de la liste a.

Algorithmes de recherche Complexité Soit n = f d + 1, la taille de la liste a. Soit C(n) le nombre de comparaisons effectuées par l algorithme. Dans le pire des cas :

Algorithmes de recherche Complexité Soit n = f d + 1, la taille de la liste a. Soit C(n) le nombre de comparaisons effectuées par l algorithme. Dans le pire des cas : L élément e n existe pas dans la liste a, ou bien il existe en une position extrêmale.

Algorithmes de recherche Complexité Soit n = f d + 1, la taille de la liste a. Soit C(n) le nombre de comparaisons effectuées par l algorithme. Dans le pire des cas : L élément e n existe pas dans la liste a, ou bien il existe en une position extrêmale. { 0 si n = 0 C(n) = C( n 2 ) + 2 si n 1

Algorithmes de recherche Complexité Soit n = f d + 1, la taille de la liste a. Soit C(n) le nombre de comparaisons effectuées par l algorithme. Dans le pire des cas : L élément e n existe pas dans la liste a, ou bien il existe en une position extrêmale. { 0 si n = 0 C(n) = C( n 2 ) + 2 si n 1 Alors : C(n) = Θ(log 2 n).

Problème de tri Définition 1.4

Problème de tri Définition 1.4 Entrée :

Problème de tri Définition 1.4 Entrée : Une liste a de taille n.

Problème de tri Définition 1.4 Entrée : Une liste a de taille n. Sortie :

Problème de tri Définition 1.4 Entrée : Une liste a de taille n. Sortie : Une permutation de la liste a qui soit ordonnée en sens croissant ou décroissant.

Algorithme de tri par sélection

Algorithme de tri par sélection Deux formes de sélection : maximum ou minimum. Idée : À chaque itération i de l algorithme :

Algorithme de tri par sélection Deux formes de sélection : maximum ou minimum. Idée : À chaque itération i de l algorithme : 1 On cherche le minimum du tableau a[i...n] non encore trié.

Algorithme de tri par sélection Deux formes de sélection : maximum ou minimum. Idée : À chaque itération i de l algorithme : 1 On cherche le minimum du tableau a[i...n] non encore trié. 2 On l échange avec a i (le premier élément dans ce tableau).

Pseudo-code 1.5

Pseudo-code 1.5 Fonction Obtenir Min(a : Liste; d, f : Entier) : Entier

Pseudo-code 1.5 Fonction Obtenir Min(a : Liste; d, f : Entier) : Entier { retourne l indice du minimum du tableau a[d...f ] }

Pseudo-code 1.5 Fonction Obtenir Min(a : Liste; d, f : Entier) : Entier { retourne l indice du minimum du tableau a[d...f ] } Var i, j : Entier;

Pseudo-code 1.5 Fonction Obtenir Min(a : Liste; d, f : Entier) : Entier { retourne l indice du minimum du tableau a[d...f ] } Var i, j : Entier; Début

Pseudo-code 1.5 Fonction Obtenir Min(a : Liste; d, f : Entier) : Entier { retourne l indice du minimum du tableau a[d...f ] } Var i, j : Entier; Début j := d;

Pseudo-code 1.5 Fonction Obtenir Min(a : Liste; d, f : Entier) : Entier { retourne l indice du minimum du tableau a[d...f ] } Var i, j : Entier; Début j := d; Pout i := d + 1 à f Faire

Pseudo-code 1.5 Fonction Obtenir Min(a : Liste; d, f : Entier) : Entier { retourne l indice du minimum du tableau a[d...f ] } Var i, j : Entier; Début j := d; Pout i := d + 1 à f Faire Si(a[i] < a[j]) Alors j := i; FinSi

Pseudo-code 1.5 Fonction Obtenir Min(a : Liste; d, f : Entier) : Entier { retourne l indice du minimum du tableau a[d...f ] } Var i, j : Entier; Début j := d; Pout i := d + 1 à f Faire Si(a[i] < a[j]) Alors j := i; FinSi FinPour

Pseudo-code 1.5 Fonction Obtenir Min(a : Liste; d, f : Entier) : Entier { retourne l indice du minimum du tableau a[d...f ] } Var i, j : Entier; Début j := d; Pout i := d + 1 à f Faire Si(a[i] < a[j]) Alors j := i; FinSi FinPour Retourner (j);

Pseudo-code 1.5 Fonction Obtenir Min(a : Liste; d, f : Entier) : Entier { retourne l indice du minimum du tableau a[d...f ] } Var i, j : Entier; Début j := d; Pout i := d + 1 à f Faire Si(a[i] < a[j]) Alors j := i; FinSi FinPour Retourner (j); Fin

Pseudo-code 1.6

Pseudo-code 1.6 Fonction Echanger(a : Liste; i, j : Entier)

Pseudo-code 1.6 Fonction Echanger(a : Liste; i, j : Entier) { échange les deux éléments a[i] et a[j] }

Pseudo-code 1.6 Fonction Echanger(a : Liste; i, j : Entier) { échange les deux éléments a[i] et a[j] } Var t : Entier;

Pseudo-code 1.6 Fonction Echanger(a : Liste; i, j : Entier) { échange les deux éléments a[i] et a[j] } Var t : Entier; Début

Pseudo-code 1.6 Fonction Echanger(a : Liste; i, j : Entier) { échange les deux éléments a[i] et a[j] } Var t : Entier; Début t := a[i];

Pseudo-code 1.6 Fonction Echanger(a : Liste; i, j : Entier) { échange les deux éléments a[i] et a[j] } Var t : Entier; Début t := a[i]; a[i] := a[j];

Pseudo-code 1.6 Fonction Echanger(a : Liste; i, j : Entier) { échange les deux éléments a[i] et a[j] } Var t : Entier; Début t := a[i]; a[i] := a[j]; a[j] := t;

Pseudo-code 1.6 Fonction Echanger(a : Liste; i, j : Entier) { échange les deux éléments a[i] et a[j] } Var t : Entier; Début t := a[i]; a[i] := a[j]; a[j] := t; Fin

Pseudo-code 1.7

Pseudo-code 1.7 Fonction Tri Sélection(a : Liste; n : Entier)

Pseudo-code 1.7 Fonction Tri Sélection(a : Liste; n : Entier) { algorithme de tri par sélection du minimum }

Pseudo-code 1.7 Fonction Tri Sélection(a : Liste; n : Entier) { algorithme de tri par sélection du minimum } Var i, imin : Entier;

Pseudo-code 1.7 Fonction Tri Sélection(a : Liste; n : Entier) { algorithme de tri par sélection du minimum } Var i, imin : Entier; Début

Pseudo-code 1.7 Fonction Tri Sélection(a : Liste; n : Entier) { algorithme de tri par sélection du minimum } Var i, imin : Entier; Début Pour i := 1 à (n 1) Faire

Pseudo-code 1.7 Fonction Tri Sélection(a : Liste; n : Entier) { algorithme de tri par sélection du minimum } Var i, imin : Entier; Début Pour i := 1 à (n 1) Faire imin := Obtenir Min(a, i, n);

Pseudo-code 1.7 Fonction Tri Sélection(a : Liste; n : Entier) { algorithme de tri par sélection du minimum } Var i, imin : Entier; Début Pour i := 1 à (n 1) Faire imin := Obtenir Min(a, i, n); Si(imin i) Alors Echanger(a, i, imin) FinSi

Pseudo-code 1.7 Fonction Tri Sélection(a : Liste; n : Entier) { algorithme de tri par sélection du minimum } Var i, imin : Entier; Début Pour i := 1 à (n 1) Faire imin := Obtenir Min(a, i, n); Si(imin i) Alors Echanger(a, i, imin) FinSi FinPour

Pseudo-code 1.7 Fonction Tri Sélection(a : Liste; n : Entier) { algorithme de tri par sélection du minimum } Var i, imin : Entier; Début Pour i := 1 à (n 1) Faire imin := Obtenir Min(a, i, n); Si(imin i) Alors Echanger(a, i, imin) FinSi FinPour Fin

Complexité

Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme.

Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme. Coût de la procédure Obtenir Min en comparaisons : (f d).

Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme. Coût de la procédure Obtenir Min en comparaisons : (f d). Coût de la procédure Tri Selction en comparaisons :

Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme. Coût de la procédure Obtenir Min en comparaisons : (f d). Coût de la procédure Tri Selction en comparaisons : À chaque itération i, l algorithme effectue (n i) comparaisons.

Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme. Coût de la procédure Obtenir Min en comparaisons : (f d). Coût de la procédure Tri Selction en comparaisons : À chaque itération i, l algorithme effectue (n i) comparaisons. C(n) = n 1 (n 1)n i=1 (n i) = (n 1)+(n 2)+...+1 = 2.

Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme. Coût de la procédure Obtenir Min en comparaisons : (f d). Coût de la procédure Tri Selction en comparaisons : À chaque itération i, l algorithme effectue (n i) comparaisons. C(n) = n 1 (n 1)n i=1 (n i) = (n 1)+(n 2)+...+1 = L algorithme tourne alors en Θ(n 2 ). 2.

Algorithme de tri par insertion

Algorithme de tri par insertion Idée : À chaque itération i de l algorithme :

Algorithme de tri par insertion Idée : À chaque itération i de l algorithme : Placer l élément a[i] dans le tableau a[1...i 1] (déjà trié) dans sa place convenable.

Pseudo-code 1.8

Pseudo-code 1.8 Fonction Tri Insertion(a : Liste; n : Entier)

Pseudo-code 1.8 Fonction Tri Insertion(a : Liste; n : Entier) { algorithme de tri par insertion }

Pseudo-code 1.8 Fonction Tri Insertion(a : Liste; n : Entier) { algorithme de tri par insertion } Var i, j, key : Entier;

Pseudo-code 1.8 Fonction Tri Insertion(a : Liste; n : Entier) { algorithme de tri par insertion } Var i, j, key : Entier; Début

Pseudo-code 1.8 Fonction Tri Insertion(a : Liste; n : Entier) { algorithme de tri par insertion } Var i, j, key : Entier; Début Pour i := 2 à n Faire

Pseudo-code 1.8 Fonction Tri Insertion(a : Liste; n : Entier) { algorithme de tri par insertion } Var i, j, key : Entier; Début Pour i := 2 à n Faire key := a[i]; j := i 1;

Pseudo-code 1.8 Fonction Tri Insertion(a : Liste; n : Entier) { algorithme de tri par insertion } Var i, j, key : Entier; Début Pour i := 2 à n Faire key := a[i]; j := i 1; Tant Que((j > 0) et (a[j] > key)) Faire

Pseudo-code 1.8 Fonction Tri Insertion(a : Liste; n : Entier) { algorithme de tri par insertion } Var i, j, key : Entier; Début Pour i := 2 à n Faire key := a[i]; j := i 1; Tant Que((j > 0) et (a[j] > key)) Faire a[j + 1] := a[j]; j := j 1;

Pseudo-code 1.8 Fonction Tri Insertion(a : Liste; n : Entier) { algorithme de tri par insertion } Var i, j, key : Entier; Début Pour i := 2 à n Faire key := a[i]; j := i 1; Tant Que((j > 0) et (a[j] > key)) Faire a[j + 1] := a[j]; j := j 1; FinTQ

Pseudo-code 1.8 Fonction Tri Insertion(a : Liste; n : Entier) { algorithme de tri par insertion } Var i, j, key : Entier; Début Pour i := 2 à n Faire key := a[i]; j := i 1; Tant Que((j > 0) et (a[j] > key)) Faire a[j + 1] := a[j]; j := j 1; FinTQ a[j + 1] := key;

Pseudo-code 1.8 Fonction Tri Insertion(a : Liste; n : Entier) { algorithme de tri par insertion } Var i, j, key : Entier; Début Pour i := 2 à n Faire key := a[i]; j := i 1; Tant Que((j > 0) et (a[j] > key)) Faire a[j + 1] := a[j]; j := j 1; FinTQ a[j + 1] := key; FinPour

Pseudo-code 1.8 Fonction Tri Insertion(a : Liste; n : Entier) { algorithme de tri par insertion } Var i, j, key : Entier; Début Pour i := 2 à n Faire key := a[i]; j := i 1; Tant Que((j > 0) et (a[j] > key)) Faire a[j + 1] := a[j]; j := j 1; FinTQ a[j + 1] := key; FinPour Fin

Complexité

Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme.

Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme. Dans le pire des cas :

Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme. Dans le pire des cas : Configuration : un tableau trié dans l ordre décroissant (le tableau est trié dans l ordre inverse).

Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme. Dans le pire des cas : Configuration : un tableau trié dans l ordre décroissant (le tableau est trié dans l ordre inverse). Placer l élément a[i] dans le tableau a[1...i 1] nécessite (i 1) comparaisons.

Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme. Dans le pire des cas : Configuration : un tableau trié dans l ordre décroissant (le tableau est trié dans l ordre inverse). Placer l élément a[i] dans le tableau a[1...i 1] nécessite (i 1) comparaisons. C(n) = n i=2 (i 1) = 1 + 2 +... + (n 1) = (n 1)n 2.

Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme. Dans le pire des cas : Configuration : un tableau trié dans l ordre décroissant (le tableau est trié dans l ordre inverse). Placer l élément a[i] dans le tableau a[1...i 1] nécessite (i 1) comparaisons. C(n) = n (n 1)n i=2 (i 1) = 1 + 2 +... + (n 1) = 2. Par suite : C(n) = O(n 2 ).

Complexité

Complexité Dans le meilleur des cas :

Complexité Dans le meilleur des cas : Configuration : un tableau trié dans l ordre croissant (le tableau est déjà trié).

Complexité Dans le meilleur des cas : Configuration : un tableau trié dans l ordre croissant (le tableau est déjà trié). Placer l élément a[i] dans le tableau a[1...i 1] nécessite une seule comparaison.

Complexité Dans le meilleur des cas : Configuration : un tableau trié dans l ordre croissant (le tableau est déjà trié). Placer l élément a[i] dans le tableau a[1...i 1] nécessite une seule comparaison. C(n) = n i=2 (1) = 1 + 1 +... + 1 = (n 1).

Complexité Dans le meilleur des cas : Configuration : un tableau trié dans l ordre croissant (le tableau est déjà trié). Placer l élément a[i] dans le tableau a[1...i 1] nécessite une seule comparaison. C(n) = n i=2 (1) = 1 + 1 +... + 1 = (n 1). Par suite : C(n) = Ω(n).

Algorithme de tri à bulles

Algorithme de tri à bulles Idée :

Algorithme de tri à bulles Idée : Consiste à permuter les éléments adjacents s ils ne sont pas ordonnés.

Algorithme de tri à bulles Idée : Consiste à permuter les éléments adjacents s ils ne sont pas ordonnés. Continuer ce processus jusqu à ce que le tableau soit entièrement trié.

Algorithme de tri à bulles Idée : Consiste à permuter les éléments adjacents s ils ne sont pas ordonnés. Continuer ce processus jusqu à ce que le tableau soit entièrement trié. À chaque itération i, on parcourt le tableau de droite à gauche pour placer le minimum dans la position i par une suite d échange d éléments adjacents.

Pseudo-code 1.9

Pseudo-code 1.9 Fonction Tri Bulles(a : Liste; n : Entier)

Pseudo-code 1.9 Fonction Tri Bulles(a : Liste; n : Entier) { algorithme de tri à bulles }

Pseudo-code 1.9 Fonction Tri Bulles(a : Liste; n : Entier) { algorithme de tri à bulles } Var i, j : Entier;

Pseudo-code 1.9 Fonction Tri Bulles(a : Liste; n : Entier) { algorithme de tri à bulles } Var i, j : Entier; Début

Pseudo-code 1.9 Fonction Tri Bulles(a : Liste; n : Entier) { algorithme de tri à bulles } Var i, j : Entier; Début Pour i := 1 à (n 1) Faire

Pseudo-code 1.9 Fonction Tri Bulles(a : Liste; n : Entier) { algorithme de tri à bulles } Var i, j : Entier; Début Pour i := 1 à (n 1) Faire Pour j := n à (i + 1) Par Pas de ( 1) Faire

Pseudo-code 1.9 Fonction Tri Bulles(a : Liste; n : Entier) { algorithme de tri à bulles } Var i, j : Entier; Début Pour i := 1 à (n 1) Faire Pour j := n à (i + 1) Par Pas de ( 1) Faire Si(a[j] < a[j 1]) Alors

Pseudo-code 1.9 Fonction Tri Bulles(a : Liste; n : Entier) { algorithme de tri à bulles } Var i, j : Entier; Début Pour i := 1 à (n 1) Faire Pour j := n à (i + 1) Par Pas de ( 1) Faire Si(a[j] < a[j 1]) Alors Echanger(a, j 1, j);

Pseudo-code 1.9 Fonction Tri Bulles(a : Liste; n : Entier) { algorithme de tri à bulles } Var i, j : Entier; Début Pour i := 1 à (n 1) Faire Pour j := n à (i + 1) Par Pas de ( 1) Faire Si(a[j] < a[j 1]) Alors Echanger(a, j 1, j); FinSi

Pseudo-code 1.9 Fonction Tri Bulles(a : Liste; n : Entier) { algorithme de tri à bulles } Var i, j : Entier; Début Pour i := 1 à (n 1) Faire Pour j := n à (i + 1) Par Pas de ( 1) Faire Si(a[j] < a[j 1]) Alors Echanger(a, j 1, j); FinSi FinPour

Pseudo-code 1.9 Fonction Tri Bulles(a : Liste; n : Entier) { algorithme de tri à bulles } Var i, j : Entier; Début Pour i := 1 à (n 1) Faire Pour j := n à (i + 1) Par Pas de ( 1) Faire Si(a[j] < a[j 1]) Alors Echanger(a, j 1, j); FinSi FinPour FinPour

Pseudo-code 1.9 Fonction Tri Bulles(a : Liste; n : Entier) { algorithme de tri à bulles } Var i, j : Entier; Début Pour i := 1 à (n 1) Faire Pour j := n à (i + 1) Par Pas de ( 1) Faire Si(a[j] < a[j 1]) Alors Echanger(a, j 1, j); FinSi FinPour FinPour Fin

Complexité

Complexité Soit C(n) le nombre de comparaisons effectuées par le tri à bulles.

Complexité Soit C(n) le nombre de comparaisons effectuées par le tri à bulles. À chaque itération i, on effectue (n i) comparaisons.

Complexité Soit C(n) le nombre de comparaisons effectuées par le tri à bulles. À chaque itération i, on effectue (n i) comparaisons. C(n) = n 1 (n 1)n i=1 (n i) = (n 1) + (n 2) +... + 1 =. 2

Complexité Soit C(n) le nombre de comparaisons effectuées par le tri à bulles. À chaque itération i, on effectue (n i) comparaisons. C(n) = n 1 (n 1)n i=1 (n i) = (n 1) + (n 2) +... + 1 =. 2 L algorithme est alors en Θ(n 2 )

Algorithme de tri par fusion

Algorithme de tri par fusion Il s agit d un algorithme de type Diviser pour régner.

Algorithme de tri par fusion Il s agit d un algorithme de type Diviser pour régner. Idée :

Algorithme de tri par fusion Il s agit d un algorithme de type Diviser pour régner. Idée : Diviser le tableau de taille n, en 2 sous-tableaux de taille n 2 chacun.

Algorithme de tri par fusion Il s agit d un algorithme de type Diviser pour régner. Idée : Diviser le tableau de taille n, en 2 sous-tableaux de taille n 2 chacun. Trier chacun de ces 2 sous-tableaux séparément (par appel récursif).

Algorithme de tri par fusion Il s agit d un algorithme de type Diviser pour régner. Idée : Diviser le tableau de taille n, en 2 sous-tableaux de taille n 2 chacun. Trier chacun de ces 2 sous-tableaux séparément (par appel récursif). Interclasser les deux sous-tableaux triés pour obtenir un seul tableau trié.

Pseudo-code 1.10

Pseudo-code 1.10 Fonction Tri Fusion(a : Liste; d, f : Entier)

Pseudo-code 1.10 Fonction Tri Fusion(a : Liste; d, f : Entier) { algorithme de tri par fusion }

Pseudo-code 1.10 Fonction Tri Fusion(a : Liste; d, f : Entier) { algorithme de tri par fusion } Var m : Entier;

Pseudo-code 1.10 Fonction Tri Fusion(a : Liste; d, f : Entier) { algorithme de tri par fusion } Var m : Entier; Début

Pseudo-code 1.10 Fonction Tri Fusion(a : Liste; d, f : Entier) { algorithme de tri par fusion } Var m : Entier; Début Si(d < f ) Alors

Pseudo-code 1.10 Fonction Tri Fusion(a : Liste; d, f : Entier) { algorithme de tri par fusion } Var m : Entier; Début Si(d < f ) Alors m := d+f 2 ;

Pseudo-code 1.10 Fonction Tri Fusion(a : Liste; d, f : Entier) { algorithme de tri par fusion } Var m : Entier; Début Si(d < f ) Alors m := d+f ; 2 Tri Fusion(a, d, m);

Pseudo-code 1.10 Fonction Tri Fusion(a : Liste; d, f : Entier) { algorithme de tri par fusion } Var m : Entier; Début Si(d < f ) Alors m := d+f ; 2 Tri Fusion(a, d, m); Tri Fusion(a, m + 1, f );

Pseudo-code 1.10 Fonction Tri Fusion(a : Liste; d, f : Entier) { algorithme de tri par fusion } Var m : Entier; Début Si(d < f ) Alors m := d+f ; 2 Tri Fusion(a, d, m); Tri Fusion(a, m + 1, f ); InterClasser(a, d, f, m);

Pseudo-code 1.10 Fonction Tri Fusion(a : Liste; d, f : Entier) { algorithme de tri par fusion } Var m : Entier; Début Si(d < f ) Alors m := d+f ; 2 Tri Fusion(a, d, m); Tri Fusion(a, m + 1, f ); InterClasser(a, d, f, m); FinSi

Pseudo-code 1.10 Fonction Tri Fusion(a : Liste; d, f : Entier) { algorithme de tri par fusion } Var m : Entier; Début Si(d < f ) Alors m := d+f ; 2 Tri Fusion(a, d, m); Tri Fusion(a, m + 1, f ); InterClasser(a, d, f, m); FinSi Fin

Pseudo-code 1.11

Pseudo-code 1.11 Fonction InterClasser(a : Liste; d, f, m : Entier)

Pseudo-code 1.11 Fonction InterClasser(a : Liste; d, f, m : Entier) { procédure d interclassement des deux sous-tableaux triés }

Pseudo-code 1.11 Fonction InterClasser(a : Liste; d, f, m : Entier) { procédure d interclassement des deux sous-tableaux triés } Var i, j, k : Entier;

Pseudo-code 1.11 Fonction InterClasser(a : Liste; d, f, m : Entier) { procédure d interclassement des deux sous-tableaux triés } Var i, j, k : Entier; b : Liste;

Pseudo-code 1.11 Fonction InterClasser(a : Liste; d, f, m : Entier) { procédure d interclassement des deux sous-tableaux triés } Var i, j, k : Entier; b : Liste; Début

Pseudo-code 1.11 Fonction InterClasser(a : Liste; d, f, m : Entier) { procédure d interclassement des deux sous-tableaux triés } Var i, j, k : Entier; b : Liste; Début Pour i := d à m Faire

Pseudo-code 1.11 Fonction InterClasser(a : Liste; d, f, m : Entier) { procédure d interclassement des deux sous-tableaux triés } Var i, j, k : Entier; b : Liste; Début Pour i := d à m Faire b[i] := a[i];

Pseudo-code 1.11 Fonction InterClasser(a : Liste; d, f, m : Entier) { procédure d interclassement des deux sous-tableaux triés } Var i, j, k : Entier; b : Liste; Début Pour i := d à m Faire b[i] := a[i]; FinPour

Pseudo-code 1.11 Fonction InterClasser(a : Liste; d, f, m : Entier) { procédure d interclassement des deux sous-tableaux triés } Var i, j, k : Entier; b : Liste; Début Pour i := d à m Faire b[i] := a[i]; FinPour Pour i := m + 1 à f Faire

Pseudo-code 1.11 Fonction InterClasser(a : Liste; d, f, m : Entier) { procédure d interclassement des deux sous-tableaux triés } Var i, j, k : Entier; b : Liste; Début Pour i := d à m Faire b[i] := a[i]; FinPour Pour i := m + 1 à f Faire b[i] := a[f i + m + 1];

Pseudo-code 1.11 Fonction InterClasser(a : Liste; d, f, m : Entier) { procédure d interclassement des deux sous-tableaux triés } Var i, j, k : Entier; b : Liste; Début Pour i := d à m Faire b[i] := a[i]; FinPour Pour i := m + 1 à f Faire b[i] := a[f i + m + 1]; FinPour

Pseudo-code 1.11 Fonction InterClasser(a : Liste; d, f, m : Entier) { procédure d interclassement des deux sous-tableaux triés } Var i, j, k : Entier; b : Liste; Début Pour i := d à m Faire b[i] := a[i]; FinPour Pour i := m + 1 à f Faire b[i] := a[f i + m + 1]; FinPour

Pseudo-code 1.12

Pseudo-code 1.12 { suite de la procédure d interclassement }

Pseudo-code 1.12 { suite de la procédure d interclassement } i := d; j := f ; k := d;

Pseudo-code 1.12 { suite de la procédure d interclassement } i := d; j := f ; k := d; Tant Que(i j) Faire

Pseudo-code 1.12 { suite de la procédure d interclassement } i := d; j := f ; k := d; Tant Que(i j) Faire Si(b[i] < b[j]) Alors

Pseudo-code 1.12 { suite de la procédure d interclassement } i := d; j := f ; k := d; Tant Que(i j) Faire Si(b[i] < b[j]) Alors {a[k] := b[i]; i := i + 1; }

Pseudo-code 1.12 { suite de la procédure d interclassement } i := d; j := f ; k := d; Tant Que(i j) Faire Si(b[i] < b[j]) Alors {a[k] := b[i]; i := i + 1; } Sinon

Pseudo-code 1.12 { suite de la procédure d interclassement } i := d; j := f ; k := d; Tant Que(i j) Faire Si(b[i] < b[j]) Alors {a[k] := b[i]; i := i + 1; } Sinon {a[k] := b[j]; j := j 1; }

Pseudo-code 1.12 { suite de la procédure d interclassement } i := d; j := f ; k := d; Tant Que(i j) Faire Si(b[i] < b[j]) Alors {a[k] := b[i]; i := i + 1; } Sinon {a[k] := b[j]; j := j 1; } FinSi

Pseudo-code 1.12 { suite de la procédure d interclassement } i := d; j := f ; k := d; Tant Que(i j) Faire Si(b[i] < b[j]) Alors {a[k] := b[i]; i := i + 1; } Sinon {a[k] := b[j]; j := j 1; } FinSi k := k + 1;

Pseudo-code 1.12 { suite de la procédure d interclassement } i := d; j := f ; k := d; Tant Que(i j) Faire Si(b[i] < b[j]) Alors {a[k] := b[i]; i := i + 1; } Sinon {a[k] := b[j]; j := j 1; } FinSi k := k + 1; FinTQ

Pseudo-code 1.12 { suite de la procédure d interclassement } i := d; j := f ; k := d; Tant Que(i j) Faire Si(b[i] < b[j]) Alors {a[k] := b[i]; i := i + 1; } Sinon {a[k] := b[j]; j := j 1; } FinSi k := k + 1; FinTQ Fin

Complexité

Complexité Soit n = f d + 1, la taille du tableau a[d...f ].

Complexité Soit n = f d + 1, la taille du tableau a[d...f ]. Soit C(n) le nombre de comparaisons effectuées par le tri par fusion.

Complexité Soit n = f d + 1, la taille du tableau a[d...f ]. Soit C(n) le nombre de comparaisons effectuées par le tri par fusion. La procédure InterClasser effectue n comparaisons.

Complexité Soit n = f d + 1, la taille du tableau a[d...f ]. Soit C(n) le nombre de comparaisons effectuées par le tri par fusion. La procédure InterClasser effectue n comparaisons. Par conséquent, un coût en Θ(n).

Complexité Soit n = f d + 1, la taille du tableau a[d...f ]. Soit C(n) le nombre de comparaisons effectuées par le tri par fusion. La procédure InterClasser effectue n comparaisons. Par conséquent, un coût en Θ(n). D autre part, C(n) = 2C( n 2 ) + Θ(n).

Complexité Soit n = f d + 1, la taille du tableau a[d...f ]. Soit C(n) le nombre de comparaisons effectuées par le tri par fusion. La procédure InterClasser effectue n comparaisons. Par conséquent, un coût en Θ(n). D autre part, C(n) = 2C( n 2 ) + Θ(n). Ce qui donne : C(n) = Θ(n log 2 n).