Professional Documents
Culture Documents
Cours d'Algorithmique-CHAPITRE 3
Cours d'Algorithmique-CHAPITRE 3
Cours d'Algorithmique-CHAPITRE 3
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 à :
……..
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
XT[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]
ji
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.
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; i1
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; pinf1; psupN
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
pinfmil + 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.
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 i1 à 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