Bonjour ! Dans la leçon précédente, nous avons vu comment utiliser une boucle et une variable "accumulateur" pour calculer la somme et la moyenne des éléments d'un tableau. Cette technique de parcours est fondamentale, et nous allons aujourd'hui l'adapter pour un autre usage tout aussi important.
Introduction
L'objectif de cette leçon est d'apprendre à trouver la valeur minimale et la valeur maximale dans un tableau.
Savoir identifier les extrêmes dans un ensemble de données est une opération courante : pensez à trouver la note la plus haute et la plus basse dans une classe, le produit le moins cher et le plus cher dans un catalogue, ou le jour le plus froid et le plus chaud du mois à partir de relevés de température.
La méthode que nous allons découvrir est un classique de l'algorithmique. Comme pour le calcul de la somme, elle repose sur un parcours complet du tableau, mais la logique à l'intérieur de la boucle sera différente. Au lieu d'accumuler, nous allons comparer et mettre à jour.

1. La logique de la recherche d'un extrêmum
Imaginons que vous ayez une liste de nombres sur une feuille de papier et que vous deviez trouver le plus grand. Comment feriez-vous intuitivement ?
Vous liriez probablement le premier nombre et le garderiez en tête comme étant "le plus grand pour l'instant". Ensuite, vous liriez le deuxième nombre. S'il est plus grand que celui que vous avez en tête, vous l'oubliez et mémorisez ce nouveau nombre. Sinon, vous continuez avec le nombre que vous aviez déjà. Vous répétez ce processus jusqu'à la fin de la liste.
L'algorithme pour trouver le maximum (ou le minimum) fonctionne exactement de la même manière.
La stratégie est la suivante :
-
Initialisation (l'hypothèse de départ) : On suppose que le premier élément du tableau est le maximum. On stocke cette valeur dans une variable, par exemple
valeur_max.- Pourquoi le premier élément ? C'est la méthode la plus sûre. Si on initialisait
valeur_maxà 0, par exemple, l'algorithme échouerait si toutes les valeurs du tableau sont négatives (ex:[-10, -5, -2]). En prenant le premier élément, on est sûr de partir avec une valeur qui existe réellement dans le tableau.
- Pourquoi le premier élément ? C'est la méthode la plus sûre. Si on initialisait
-
Parcours et comparaison : On parcourt le reste du tableau, du deuxième élément jusqu'à la fin.
-
Mise à jour : Pour chaque élément rencontré, on le compare à notre
valeur_maxactuelle.- Si l'élément est plus grand que
valeur_max, alors notre hypothèse de départ était fausse. Cet élément devient le nouveau maximum. On met doncvaleur_maxà jour avec la valeur de cet élément. - Sinon, on ne fait rien et on passe à l'élément suivant.
- Si l'élément est plus grand que
-
Résultat : Une fois la boucle terminée, la variable
valeur_maxcontient nécessairement la plus grande valeur de tout le tableau.
La logique pour trouver le minimum est identique, il suffit d'inverser la comparaison (< au lieu de >).
2. Algorithme pour trouver le Minimum et le Maximum
Il est très efficace de chercher le minimum et le maximum en même temps, en un seul parcours de tableau.
L'algorithme est une simple extension de la logique précédente :
Algorithme TrouverMinMax
Variables
Tableau T[...] : Entier // ou Reel
valeur_min : Entier
valeur_max : Entier
i : Entier
N : Entier // Taille du tableau
Début
// On suppose que le tableau T est rempli et que N > 0.
// 1. Initialisation
valeur_min ← T[0]
valeur_max ← T[0]
// 2. Parcours à partir du DEUXIÈME élément
Pour i allant de 1 à N - 1 Faire
// 3. Mise à jour du maximum
Si T[i] > valeur_max Alors
valeur_max ← T[i]
// 4. Mise à jour du minimum
Sinon Si T[i] < valeur_min Alors
valeur_min ← T[i]
FinSi
FinPour
// 5. Affichage des résultats
Ecrire("La valeur minimale est : ", valeur_min)
Ecrire("La valeur maximale est : ", valeur_max)
Fin
Note sur l'efficacité : remarquez l'utilisation de Sinon Si. C'est une petite optimisation. Si un nombre est plus grand que le maximum actuel (valeur_max), il ne peut pas être plus petit que le minimum actuel (valeur_min), donc il est inutile de faire la deuxième comparaison. Cela rejoint votre objectif d'écrire du code performant !
Pour une description très claire de cette méthode, vous pouvez consulter la ressource suivante. Bien qu'elle soit en anglais, le pseudo-code est universel et illustre parfaitement notre algorithme.
Find Minimum and Maximum Element in an Array - EnjoyAlgorithms
Cette page du site EnjoyAlgorithms décrit la méthode la plus directe pour trouver le min/max. Elle est qualifiée de 'Brute force', non pas parce qu'elle est mauvaise, mais parce qu'elle est la plus simple et la plus intuitive.
Concentrez-vous sur la section 'Brute force solution using single loop: Increment by 1'. Lisez les étapes ('Solution idea and steps') et examinez le pseudo-code ('Solution pseudocode'). Vous reconnaîtrez exactement la structure que nous venons de décrire, avec l'initialisation et la boucle de comparaison.
3. Analyse d'un exemple en français
Voyons maintenant un exemple concret dans un document d'exercices. L'algorithme est légèrement différent mais la logique de base reste la même.
[PDF] Exercices avec Solutions
Ce PDF contient un exercice corrigé qui met en œuvre la recherche du minimum et du maximum dans un tableau.
Dans le document, trouvez la section 'Les Tableaux (Vecteurs – Matrices)'. Lisez le premier exercice (1-) et son corrigé 'Algorithme MinMax'. Identifiez les étapes clés : la lecture de la taille N, la boucle de lecture des éléments, l'initialisation de Min et Max, et enfin la boucle de traitement qui trouve les extrêmes.
En analysant l'algorithme MinMax du document, vous remarquerez deux choses :
- L'indexation du tableau commence à 1 (
T[1]), ce qui est une convention possible. Nous continuerons à utiliser l'indexation à partir de 0, plus courante en Java. - L'initialisation se fait bien avec
Min←T[1]etMax←T[1]. Cependant, la boucle de traitementPour I←1 à N Faireinclut le premier élément, qui est comparé à lui-même. C'est une petite redondance. Un algorithme légèrement plus optimisé commencerait la boucle au deuxième élément, comme nous l'avons fait dans notre pseudo-code.
4. À vous de jouer !
Votre goût pour la pratique va être satisfait ! Voici un problème à résoudre.
Problème :
Un capteur a enregistré les températures (en degrés Celsius) à chaque heure pendant 10 heures. Ces températures sont stockées dans un tableau.
Écrivez un algorithme nommé AnalyseTemperatures qui :
- Déclare un tableau
Temperaturesde 10 nombres réels. Vous pouvez imaginer qu'il est pré-rempli avec les valeurs :[12.5, 13.0, 11.8, 11.5, 12.0, 14.2, 15.1, 14.8, 13.5, 12.9]. - Trouve la température la plus basse enregistrée.
- Trouve la température la plus haute enregistrée.
- Affiche ces deux températures avec un message clair.
Prenez le temps de rédiger l'algorithme sur papier en appliquant la logique que nous avons étudiée.
Cliquez ici pour voir une solution possible
Algorithme AnalyseTemperatures
Variables
Tableau Temperatures[10] : Reel // Supposons rempli avec [12.5, 13.0, 11.8, 11.5, 12.0, 14.2, 15.1, 14.8, 13.5, 12.9]
temp_min : Reel
temp_max : Reel
i : Entier
Début
// On considère que le tableau n'est pas vide.
// Initialisation avec le premier élément
temp_min ← Temperatures[0]
temp_max ← Temperatures[0]
// Parcours du reste du tableau (de l'index 1 à 9)
Pour i allant de 1 à 9 Faire
Si Temperatures[i] > temp_max Alors
temp_max ← Temperatures[i]
Sinon Si Temperatures[i] < temp_min Alors
temp_min ← Temperatures[i]
FinSi
FinPour
// Affichage des résultats
Ecrire("La température la plus haute enregistrée est : ", temp_max, "°C")
Ecrire("La température la plus basse enregistrée est : ", temp_min, "°C")
Fin
Résultats attendus :
Température la plus haute : 15.1 °C
Température la plus basse : 11.5 °C
Conclusion
Félicitations ! Vous maîtrisez maintenant un autre algorithme de parcours de tableau essentiel. Cette méthode pour trouver le minimum et le maximum est un pilier que vous retrouverez partout.
Les points clés à retenir sont :
- La stratégie consiste à poser une hypothèse (le premier élément est le min/max) et à la challenger en parcourant le reste des données.
- L'initialisation des variables
minetmaxavec le premier élément du tableau est la technique la plus robuste. - Le parcours peut se faire en une seule boucle pour trouver les deux extrêmes simultanément.
- De petites optimisations, comme utiliser
Sinon Si, peuvent rendre l'algorithme plus performant.
Et après ?
Nous avons exploré le traitement des tableaux de nombres. Mais un tableau peut aussi contenir d'autres types de données, comme des caractères. Dans la prochaine leçon, nous verrons comment manipuler une chaîne de caractères comme un tableau de caractères, ce qui nous ouvrira la porte à de nombreux nouveaux problèmes intéressants, comme compter les voyelles dans un mot ou vérifier si un texte est un palindrome.