Vous êtes sur la page 1sur 5

COMMISSION LMD-UL

Domaine : Sciences et Technologies


Etablissement : Ecole Nationale
Supérieure d’Ingénieurs (ENSI)
___________________________________________________________________
_

Algorithmes et structures de données (INF200)

SEANCE N° 11
Algorithmes de recherche et de tri
Durée : 3 Heures
Responsable : Adekunlé Akim SALAMI

Parfois, on peut éprouver le besoin de rechercher une information parmi d’autres ou de trier ces
informations en les rangeant dans un certain ordre. Par exemple, si ces informations sont de type
entier, on peut être amené à les ranger dans l’ordre croissant ou dans l’ordre décroissant. Pour
cela, il existe des algorithmes de recherche ou de tri qui peuvent être appliqués aux structures de
données contenant ces informations. Dans ce cours, nous allons présenter quelques uns de ces
algorithmes en donnant leurs principes de fonctionnement.
Cette activité concerne l’étude des algorithmes de tri ou de recherche d’un élément dans un
ensemble. Le résultat d’une recherche est la présence ou l’absence de l’élément recherché.
Rechercher un élément revient à le comparer un à un avec les éléments d’un ensemble.Cette
recherche peut se faire avec une approche séquentielle ou une approche dichotomique Quand
aux algorithmes de tri, il en existe plusieurs exemples dont le tri par par sélection et le tri rapide
Objectifs:
À la fin de cette séance, l’apprenant devrait être capable de :

 Décrire le processus de recherche et de tri.


 Concevoir des algorithmes pour la recherche d’information.
 Concevoir des algorithmes pour le tri d’un ensemble d’informations.

Contenu :
1. Introduction
2. La recherche séquentielle ;
3. La recherche dichotomique
4. Le tri par sélection ;
5. Le tri rapide ;
AVRIL 2020
COMMISSION LMD-UL
6. Tests de connaissances acquises au cours de la séance.
Activités :
L’apprenant prendra le soin de lire le texte de chaque activité (objet des activités N°1 au N°3)
dans le but de répondre à des questions qui fera l’objet de l’activité N°4.
Activité N°1 : Introduction
Durée : 25 minutes
Le résultat d’une recherche est la présence ou l’absence de l’élément recherché. Rechercher un
élément revient à le comparer un à un avec les éléments d’un ensemble. Cette recherche peut se
faire avec une approche séquentielle ou une approche dichotomique Quand aux algorithmes de
tri, il en existe plusieurs exemples dont le tri par sélection et le tri rapide.
Activité N°2 : La recherche séquentielle
Durée : 25 minutes
Avec la recherche séquentielle, les éléments sont comparés de manière séquentielle en
commençant par le premier et en terminant éventuellemnt par le dernier si l’élément rechercé est
absent ou se trouve à la fin de l’ensemble.
Ce type de recherche fonctionne pour un ensemble ordonné ou pas.
Activité N°3 : La recherche dichotomique
Durée : 25 minutes
La recherche dichotomique fonctionne seulement avec un ensemble ordonné car elle consiste à
diviser récursive ce dernier en deux parties pour trouver l’élément soit au milieu de l’ensemble
ou dans l’une de ses parties selon le principe suivant:
- Si l’élément cherché est trouvé si sa valeur est égale à la valeur de l’élément au milieu
- Sinon si sa valeur est inférieure à la valeur de l’élément au milieu, alors la recherche se
poursuit avec le sous-ensemble avant le milieu.
- Sinon la recherche se poursuit avec le sous-ensemble situé après le milieu.
Activité N°4 : Le tri par sélection
Durée : 25 minutes
Le principe du tri par sélection consiste à déterminer successivement l’élément devant se
retrouver en première position, en deuxième position, etc., c’est à dire le plus petit des éléments
restants, et ainsi de suite.
Pour cela, on parcourt le tableau de gauche à droite et, à chaque position i, on place le plus petit
élément qui se trouve dans le sous tableau droit (entre les positions i et N-1).

Spécification abstraite
Nous supposons que les données a1, a2, ... , an sont mises sous forme d'une liste (a1, a2, ... ,
an), la liste (a1, a2, ... , an) est décomposée en deux parties : une partie liste (a1, a2, ... , ak) et

AVRIL 2020
COMMISSION LMD-UL
une partie non-triée (ak+1, ak+2, ... , an); l'élément ak+1 est appelé élément frontière (c'est le
premier élément non trié).

Le principe est de parcourir la partie non-triée de la liste (ak+1, ak+2, ... , an) en cherchant
l'élément minimum, puis en l'échangeant avec l'élément frontière ak+1, puis à déplacer la
frontière d'une position. Il s'agit d'une récurrence sur les minima successifs. On suppose que
l'ordre s'écrit de gauche à droite (à gauche le plus petit élément, à droite le plus grand
élément).
On recommence l'opération avec la nouvelle sous-suite (ak+2, ... , an) , et ainsi de suite
jusqu'à ce que la dernière soit vide.

Spécification concrète
La suite (a1, a2, ... , an) est rangée dans un tableau à une dimensionT[...] en mémoire centrale.

Le tableau contient une partie triée (en foncé à gauche) et une partie non triée (en blanc à
droite).

On cherche le minimum de la partie non-triée du tableau et on le recopie dans la cellule


frontière (le premier élément de la partie non triée).
Donc pour tout ap de la partie non triée on effectue l'action suivante :

si ak+1 > ap alors ak+1  ap Fsi

et l'on obtient ainsi à la fin de l'examen de la sous-liste (ak+1, ak+2, ... , an) la valeur min (ak+1,
ak+2, ... , an) stockée dans la cellule ak+1.

La sous-suite (a1, a2, ... , ak, ak+1) est maintenant triée :

AVRIL 2020
COMMISSION LMD-UL

Et l'on recommence la boucle de recherche du minimum sur la nouvelle sous-liste (ak+2, ak+3,
... , an) etc...

Tant que la partie non triée n'est pas vide, on range le minimum de la partie non-triée dans
l’élément frontière.

Algorithme Tri_Selection
local: m, i , j , n, temp : Entiers naturels
Entrée : Tab : Tableau d'Entiers naturels de 1 à n éléments
Sortie : Tab : Tableau d'Entiers naturels de 1 à n éléments début
pour i de 1 jusquà n-1 faire // recommence une sous-suite
m = i ; // i est l'indice de l'élément frontière ai = Tab[ i ] pour j de i+1 jusquà n
faire// (ai+1 , ai+2 , ... , an )
si Tab[ j ] < Tab[ m ] alors // aj est le nouveau minimum partiel
m = j ; // indice mémorisé
Fsi fpour;
temp = Tab[ m ] ;
Tab[ m ] =Tab[ i ] ;
Tab[ i ] = temp //on échange les positions de ai et de aj fpour
Fin Tri_Selection

Complexité
Choix d’opération : Comparaison de 2 cellules.
Le nombre de comparaisons "si Tab[ j ] < Tab[ m ] alors" est une valeur qui ne dépend que
de la longueur n de la liste (n est le nombre d'éléments du tableau), ce nombre est égal au
nombre de fois que les itérations s'exécutent, le comptage montre que la boucle "pour i de 1
jusquà n-1 faire" s'exécute n-1 fois (donc une somme de n-1 termes) et qu'à chaque fois la
boucle "pour j de i+1 jusquà n faire" exécute (n-(i+1)+1 fois la comparaison "si Tab[ j ] <
Tab[ m ] alors".

La complexité en nombre de comparaison est égale à la somme des n-1 termes suivants (i = 1,
...i = n-1)
C = (n-2)+1 + (n-3)+1 +.....+1+0 = (n-1)+(n-2)+...+1 = n.(n-1)/2 (c'est la somme des n-1
premiers entiers).

La complexité du tri par sélection en nombre de comparaison est de de l'ordre de n2,


que l'on écrit O(n2).

Activité N°5 : Le tri rapide

AVRIL 2020
COMMISSION LMD-UL
Durée : 25 minutes
Le principe du tri rapide est basé sur le modèle “diviser pour régner”. Pour trier un tableau tab
d’indice de début deb et d’indice de fin fin, le principe est le suivant :
- Diviser: On choisit arbitrairement un élément du tableau que l’on appellera pivot. On
partitionne le tableau en deux sous-tableaux en le réarrangeant de telle façon que tous les
éléments inférieurs ou égaux au pivot soient placés avant lui, et que tous les éléments strictement
supérieurs au pivot soient placés après lui.
- Régner: Le pivot étant à sa place définitive, il reste à trier (de la même façon) les deux
soustableaux placés avant et après lui.
- Combiner: Les sous-tableaux étant triés sur place, on peut alors affirmer que le tableau est
trié en totalité.
Activité N°6 : Tests de connaissances acquises au cours de la séance
Durée : 2 Heures
Cette activité consiste à vérifier si cette séance est bien assimilée par l’apprenant.
Les réponses aux questions doivent être envoyées dans les 24H à l’adresse asalami@univ-lome.tg
Il est demandé à l’apprenant pour une durée totale de deux (02) Heures.
de répondre aux questions suivantes:
1. Donnez une brève description de l’algorithme de recherche dichotomique. (2pts)
2. Quelle est la différence entre la recherche séquentielle et la recherche dichotomique?
(2pts)
3. Donnez une brève description de l’algorithme de tri par sélection ; (2pts)
4. Donnez une description de l’algorithme de tri par insertion ; (4pts)
5. Implémenter en langage C l’algorithme de tri par insertion. (10pts)

Les lectures et ressources de ce cours sont les suivantes :


 Flajolet, P. (1981). Analyse d'algorithmes de manipulation d'arbres et de fichiers. Cahiers
du Bureau universitaire de recherche opérationnelle Série Recherche, 34, 5-208.
 Divay, M. (1999). Algorithmes et structures de données génériques. Edition Dunod.
 Algorithmique en C, Jean-Michel Léry, Pearson Education, 2e édition, 2010
 Algorithmes en Pascal et en langage C, Granjon, Dunod, 2004.
 Djamal Abdoul Nasser Seck, Structures de données et algorithmes.

AVRIL 2020

Vous aimerez peut-être aussi