Vous êtes sur la page 1sur 23

Cours d’Algorithmique

2ème année de licence SMP


2023-2024
Plan du cours

• Chapitre 1: Introduction à l’algorithmique

• Chapitre 2: Tableaux et Fonctions

• Chapitre 3: Algorithmes de tri et de recherche

11/10/2023 2
Chapitre 3
Algorithmes de tri et de recherche
1) Méthodes de tri dans un tableau
 Tri par sélection
 Tri à bulles
 Tri par insertion
2) Méthodes de recherche dans un tableau
 La recherche séquentielle
 La recherche dichotomique
3) Complexité d’un algorithme
11/10/2023 3
1. Méthodes de tri dans un tableau
Tri par sélection (par minimum)
Principe :
Le principe de cette méthode est simple. Elle consiste à :

 Chercher l’indice du plus petit élément du tableau T[1..n] et


permuter l’élément correspondant avec l’élément d’indice 1;

 Chercher l’indice du plus petit élément du tableau T[2..n] et


permuter l’élément correspondant avec l’élément d’indice 2 ;

 ……..

 Chercher l’indice du plus petit élément du tableau T[n-1..n] et


permuter l’élément correspondant avec l’élément d’indice n-1;

11/10/2023 Chapitre 3 5
1. Méthodes de tri dans un tableau
Tri par sélection (par minimum)

11/10/2023 Chapitre 3 6
1. Méthodes de tri dans un tableau
Tri par sélection (par minimum)
Procédure TRISELECTION (T Tableau : entier , N : entier)
Variables i, j, X, pmin : entier
Début
Pour i de 1 à n-1 pas 1 faire
Début
pmin  i
Pour j de i à n pas 1 faire
Début
Si (T[pmin] > T[j]) Alors
pmin  j
Finsi
Fin
X T[i]
T[i] T[pmin]
T[pmin] X
Fin
Fin
11/10/2023 Chapitre 1 7
1. Méthodes de tri dans un tableau
Tri à bulles
Principe :
Cet algorithme porte le nom de tri à bulle car, petit à petit, les plus
grands éléments du tableau remontent, par le jeu des permutations,
enfin de tableau.
La méthode de tri à bulles consiste à répéter le traitement suivant :
 Parcourir les éléments du tableau de 1 à (n-1); si l'élément i
est supérieur à l'élément (i+1) , alors on les permute.
 Le programme s'arrête lorsqu’aucune permutation n'est
réalisable après un parcours complet du tableau.

11/10/2023 Chapitre 3 8
1. Méthodes de tri dans un tableau
Tri à bulles

11/10/2023 Chapitre 3 9
1. Méthodes de tri dans un tableau
Tri à bulles
Procédure TRISBULLE (T Tableau : entier , N : entier)
Variable i, j, X : entier
Début
Faire
Pour i de 1 à N-1 faire
Début
Si T[i]> T[i+1] alors
XT[i]
T[i]T[i + 1]
T[i + 1]X
Finsi
Fin
N N – 1
Fin
Tantque(N >= 1)
FIN
11/10/2023 Chapitre 3 10
1. Méthodes de tri dans un tableau
Tri par insertion
Principe :
Trier le tableau de gauche à droite en insérant à chaque fois l'élément
i+1 dans le tableau (déjà trié) des i premiers éléments.
 Comparer et permuter si nécessaire T[1] et T[2] de façon à
placer le plus petit dans la case d’indice 1
 Comparer et permuter si nécessaire l’élément T[3] avec ceux
qui le précèdent dans l’ordre ( T[2] puis T[1]) afin de former
une sous-tableau triée T[1..3]
 …….
 Comparer et permuter si nécessaire l’élément T[n] avec ceux
qui le précèdent dans l’ordre ( T[n-1] puis T[n-2]) afin de
former un tableau trié .

11/10/2023 Chapitre 3 11
1. Méthodes de tri dans un tableau
Tri par insertion

11/10/2023 Chapitre 3 12
1. Méthodes de tri dans un tableau
Tri par insertion
Procédure TRISINSERTION (T Tableau : entier , N : entier)
Variable i, j, X : entier
Début
Pour i de 2 à N faire
Début
X T[i]
ji
Tant que (T[j – 1] > X ) ET (j > 1) Faire
Début
T[j] T[j-1]
j j-1
Fin
T[j]X
Fin
Fin

11/10/2023 Chapitre 3 13
2. Méthodes de recherche dans un tableau
Structurer les données est indispensable pour les manipuler dans les
programmes. Il faut cependant savoir retrouver les données dans ces
structures, c'est le but des algorithmes de recherche et de tri.

La recherche séquentielle
Principe
L’algorithme consiste à balayer le tableau du début vers la fin jusqu’à
trouver l’élément recherché ou arriver à la fin du tableau.

on parcourt la structure dans l'ordre « naturel » - on s'arrête au bout, ou


quand on trouve l'élément - parfois on peut s'arrêter plus tôt

 Plus simple et le plus utilisé pour les tableaux de faible taille (1000).

11/10/2023 Chapitre 3 14
2. Méthodes de recherche dans un tableau
La recherche séquentielle
Fonction RECH_SEQ ( T Tableau: entier, N:entier, val :entier) : entier
Variables i, pos : entier
Début
pos-1; i1
Tant que (i <= N et pos == -1 ) Faire
Début
Si (T[i] == val ) alors
pos i
Sinon
i i+1
Finsi
Fin
Retourner (pos)
Fin

11/10/2023 Chapitre 3 15
2. Méthodes de recherche dans un tableau
La recherche dichotomique
Principe
Cette méthode ne s’applique qu’à des tableaux déjà triés.
Le principe est de décomposer le tableau T en deux sous tableaux. Trois
cas peuvent se produire :
 Si val == T[milieu] alors val est trouvé et la recherche est
terminée.
 Si val < T[milieu] alors on va chercher val dans la partie gauche
du tableau T.
 Si val > T[milieu] alors on va chercher val dans la partie droite du
tableau T.
 On poursuit la recherche tant que T[milieu] est différent de val est
tant que la dimension de sous tableau reste valide.

11/10/2023 Chapitre 3 16
2. Méthodes de recherche dans un tableau
La recherche dichotomique
Fonction RECH_DICH ( T Tableau : entier , N :entier , val :entier) : entier
Variables i, pos, mil, pinf, psup : entier
Début
pos-1; pinf1; psupN
Tant que ( pinf <= psup et pos == -1 ) Faire
Début
mil ENT(pinf + psup) /2
Si (T[mil]= = val ) alors
pos mil
Sinon
Si (val<T[mil] ) alors
psup mil - 1
Sinon
pinfmil + 1
Finsi
Finsi
Fin
Retourner (pos)
Fin
11/10/2023 Chapitre 3 17
3. Complexité d’un algorithme
La question la plus fréquente que se pose à chaque programmeur est la
suivante: Comment choisir parmi les différentes approches pour résoudre
un problème?
1. La correction: résout il bien le problème donné? Trouver une méthode
de résolution (exacte ou approchée) du problème.
2. L’efficacité: en combien de temps et avec quelles ressources? Il est
souhaitable que nos solutions ne soient pas lentes, ne prennent pas de
l’espace mémoire considérable.

L’efficacité d’un algorithme peut être évaluée par:


1. Rapidité (en terme de temps d’exécution)
2. Consommation de ressources (espace de stockage, mémoire
utilisée)

La théorie de la complexité étudie l’efficacité des algorithmes


11/10/2023 Chapitre 3 18
3. Complexité d’un algorithme
La complexité d’un algorithme quantifie le temps nécessaire à un algorithme pour
s’exécuter en fonction de la taille de l’entrée.

 Quand on calcule la complexité d’un algorithme, on ne calcule généralement


pas sa complexité exacte, mais son ordre de grandeur.

 C’est une approximation du temps de calcul de l’algorithme.

Par exemple, si on fait 𝑛2 + 2𝑛 opérations, on retiendra juste que l’ordre de


grandeur est 𝑛2 . On utilisera donc la notation classique sur les ordres de grandeur.

La notation asymptotique O(..)

Signification: Pour toutes les grandes entrées (i.e., n >>>), on est


assuré que l’algorithme ne prend pas plus de K*𝑛2 étapes. Borne
supérieure.
11/10/2023 Chapitre 3 19
3. Complexité d’un algorithme
Règles:
 Chaque instruction basique consomme une unité de temps (affectation d’une
variable, lecture, écriture, comparaison,…).
 Chaque itération d’une boucle rajoute le nombre d’unités de temps
consommés dans le corps de cette boucle.
 Chaque appel de fonction rajoute le nombre d’unités de temps consommées
dans cette fonction.
Pour avoir le nombre d’opération effectuées par l’algorithme, on additionne le
tout.
 Les constantes multiplicatives sont remplacées par 1.
 Les constantes additives sont annulées.
 Le terme le plus élevé est conservé.
Un algorithme est dit « optimal » si sa complexité est la complexité minimale
parmi les algorithmes de sa classe.
11/10/2023 Chapitre 3 20
3. Complexité d’un algorithme
Exemples :
O(1) O(1)
Variable n: entier Variable n, i : entier
Début Début
Ecrire ("n=") Ecrire ("n=")
Lire (n) Lire (n)
Si (n>0) alors pour i1+n à n+10 pas 1 faire
Ecrire ("positif") Début
Sinon Ecrire ( i )
Ecrire ("négaif") Fin
Finsi Fin
Fin

12/10/2023 Chapitre 3 21
3. Complexité d’un algorithme
Exemples :
O(𝑛2 )
Variable n, i, Min : entier O(n) Variable n, i, j : entier
Tableau T[20] : entier Tableau T[20] [20] : entier
Début Début
Ecrire ("n=") Ecrire ("n=")
Lire (n) Lire (n)
Pour i  1 à n pas 1 faire Pour i  1 à n pas 1 faire
Début Début
Pour j  1 à n pas 1 faire
Ecrire ("Entrer la valeur ", i)
Début
Lire (T[i])
Ecrire ("Entrer "T["i "] [" j "] ")
Fin Lire (T[i] [j])
Min T[1] Fin
Pour i  2 à n pas 1 faire Fin
Début
si (Min > T[i]) alors Pour i  1 à n pas 1 faire
Min T[i] Début
Finsi Pour j  1 à n pas 1 faire
Fin Début
Ecrire ("min= ", Min) Ecrire (T[i] [j])
Fin Fin
Fin
12/10/2023
FinChapitre 1 22
3. Complexité d’un algorithme
Exemples :
O(Log(n))
Variable n, i : entier
Début
Ecrire ("n=")
Lire (n)
pour i1 à n pas î*2 faire
Début
Ecrire ( i )
Fin
Fin

12/10/2023 Chapitre 3 23
3. Complexité d’un algorithme
Classes de complexité
O(1) complexité constante, pas d'augmentation du temps d'exécution quand
le paramètre croit
O(log(n)) complexité logarithmique, augmentation très faible du temps
d'exécution quand le paramètre croit.
O(n) complexité linéaire, augmentation linéaire du temps d'exécution
quand le paramètre croit (si le paramètre double, le temps double).
O(n.log(n)) complexité quasi-linéaire, augmentation un peu supérieure à O(n).
O(𝒏𝟐 ) complexité quadratique, quand le paramètre double, le temps
d'exécution est multiplié par 4.
O(𝒏𝒊 ) complexité polynomiale quand le paramètre double, le temps
d'exécution est multiplié par 2𝑖 .
O(n!) complexité factorielle, asymptotiquement équivalente à 𝑛𝑛 .
O(𝟐𝒏 ) complexité exponentielle, quand le paramètre double, le temps
d'exécution est élevé à la puissance 2.
11/10/2023 Chapitre 3 24

Vous aimerez peut-être aussi