Lycée   >   Premiere   >   NSI   >   Algorithmes de recherche : rechercher un extremum

Algorithmes de recherche : rechercher un extremum

  • Fiche de cours
  • Quiz
  • Profs en ligne
Objectifs
  • Écrire un algorithme d’un extremum dans un tableau.
  • Prouver que cet algorithme se termine et est correct, c’est-à-dire qu’il fait bien ce que l’on veut.
Points clés
  • Il est nécessaire de prouver qu’un algorithme se termine et qu’il est correct.
  • Le cout d’une recherche d’un extremum dans un tableau est linéaire en n la taille du tableau.
Pour bien comprendre

Algorithmes de recherche : parcourir un tableau

1. L'algorithme de recherche d'un extremum
a. Algorithme
Dans un tableau de nombres (entiers ou flottants), un extremum est son plus grand élément ou son plus petit élément, selon que l’on recherche le maximum ou le minimum du tableau.

Par la suite, nous étudierons la recherche du maximum d’un tableau.

Voici ci-dessous un algorithme classique de recherche du maximum dans un tableau Tab (non vide et non trié) de taille n.

maxi ← Tab[0] Tab[0] est affecté à la variable maxi.
Pour i allant de 0 à n−1 i = 0, puis i = 1, puis i = 2, puis… = n − 1.
   Si Tab[i] > maxi, alors Si Tab[i] est supérieur à maxi, alors
      maxi ← Tab[i] on affecte Tab[i] à la variable maxi.
   FinSi Fin de l’instruction « Si ».
FinPour Fin de l’instruction « Pour ».

Cet algorithme affecte le maximum du tableau Tab à la variable maxi en parcourant le tableau Tab et en « sauvegardant » au fur et à mesure le maximum des éléments parcourus.

Remarque
Si le maximum est présent plusieurs fois dans le tableau, seule la première occurrence sera affectée à la variable maxi.
Exemple
Si Tab = [1,9,2,9,1,4], alors le maximum sera affecté pour i = 1. Ce sera Tab[1] = 9.
b. Programmation en Python
En Python 3, l’instruction for permet de parcourir un tableau Tab de deux façons différentes : avec len() et range() ou en contrôle de flux (sans utiliser les indices de ses éléments).
Exemple avec len() et range()

En Python, on définit par exemple la fonction maximum1(Tab) suivante, qui implémente l’algorithme de recherche du maximum de Tab : elle retourne la première occurrence du maximum.

def maximum1(Tab): On définit la fonction maximum1.
   maxi = Tab[0] Tab[0] est affecté à la variable maxi.
      for i in range(len(Tab)): i = 0, puis i = 1, puis i = 2, puis… i = n − 1.
         if Tab[i] > maxi: Si Tab[i] est supérieur à maxi, alors
            maxi = Tab[i] on affecte Tab[i] à la variable maxi.
      return maxi On retourne la variable maxi.
Exemple en contrôle de flux

En Python, on définit par exemple la fonction maximum2(Tab) suivante, qui implémente l’algorithme de recherche du maximum de Tab en contrôle de flux.

def maximum2(Tab): On définit la fonction maximum2.
   maxi = Tab[0] Tab[0] est affecté à la variable maxi.
      for elt in Tab: elt prend successivement les valeurs de Tab.
         if elt > maxi: Si elt est supérieur à maxi, alors
            maxi = elt on affecte elt à la variable maxi.
      return maxi On retourne la variable maxi.

L’étude et la programmation de la recherche du minimum est similaire. Il suffit de remplacer > par <.

Remarque
Des fonctions qui implémentent la recherche du maximum ou du minimum d’un tableau existent déjà en Python ; ce sont les fonctions min et max.
Exemple
Si Tab = [1,9,2,9,1,4], alors min(Tab) renvoie 1 et max(Tab) renvoie 9.
2. Terminaison, correction et cout de l'algorithme de recherche d'un extremum
a. Terminaison
Étudier la terminaison d’un algorithme revient à déterminer s’il s’arrêtera (quelles que soient les données utilisées).
Il est important qu’un algorithme se termine pour que son exécution se passe sans problème.
Exemple
Une instruction pour se termine toujours puisque l’on en connait le nombre de répétitions.

L’algorithme de recherche du maximum se termine puisqu’une instruction pour se termine toujours.

b. Correction
Démontrer la correction d’un algorithme revient à déterminer s’il retourne bien ce que l’on veut.
On utilise pour cela un invariant de boucle. Il s’agit d’une proposition qui doit être vraie à chaque itération de l’algorithme.

Pour l’algorithme de recherche du maximum de la partie précédente, un invariant de boucle peut être :
P(i) : « Après la i-ème itération de l’instruction pour, maxi référence le maximum de Tab[0], Tab[1], …, Tab[i]. »

Démonstration de la correction
  • Initialisation : P(0) est vraie car maxi référence Tab[0] avant la boucle.
  • Hypothèse : Supposons P(i) vraie (pour i < n1).
  • Montrons que P(i+1) est vraie.
    Si P(i) est vraie, alors maxi référence le maximum de Tab[0], Tab[1], …, Tab[i].
    À la (i+1)-ième itération, Tab[i+1] et maxi sont comparés.
    • Si Tab[i+1] > maxi, alors maxi référence Tab[i+1].
      Ainsi maxi référence le maximum de Tab[0], Tab[1], …, Tab[i], Tab[i+1].
      Donc P(i+1) est vraie.
    • Si Tab[i+1] < maxi, alors Tab[i+1] est plus petit que le maximum de Tab[0], Tab[1], …, Tab[i].
      C’est pourquoi, là encore, maxi référence le maximum de Tab[0], Tab[1], …, Tab[i], Tab[i+1].
      Donc P(i+1) est vraie.
  • Finalement, P(i) est vraie pour i entre 0 et n−1. Comme P(n−1) est vraie, alors maxi référence le maximum de Tab[0], Tab[1], …, Tab[n−1]. C’est pourquoi maxi référence le maximum de Tab.
    L’algorithme fait bien ce que l’on veut.
c. Cout
Dans le cas où le cout d’un algorithme (estimation du temps d’exécution de cette recherche) dépend de la variable mise en entrée, on préfèrera étudier le cout dans le pire des cas.

Pour l’algorithme de recherche du maximum de la partie précédente, le cas où les éléments de Tab sont classés dans l’ordre croissant est le pire des cas puisque toutes les affectations maxi ← Tab[i] vont être faites.

Donc, dans le pire des cas, l’algorithme appliqué à un tableau comportant n éléments nécessite :

  • 2n + 1 affectations : une affectation avant l’instruction pour, n affectations pendant celle-ci, et au plus n affectations après les n comparaisons (si les éléments de Tab sont classés dans l’ordre croissant).
  • n comparaisons : dans l’instruction pour.
Rappel
  • Une affectation est une procédure qui permet d’attribuer une valeur à une variable.
  • Une comparaison est une instruction qui met en jeu deux variables et qui renvoie True ou False (vrai ou faux).
Si le cout d’une affectation et celui d’une comparaison sont respectivement notés a et c, alors le cout de l’algorithme est égal à :
a × (2n + 1c × n = (2a + c)n + a
(car a × (2n + 1) c × n = 2an + a + cn).

On obtient une fonction affine en n. On dit alors que le cout d’une recherche du maximum dans un tableau est linéaire en n la taille du tableau.

Comment as-tu trouvé ce cours ?

Évalue ce cours !

 

Question 1/5

La médiane de 6 notes est 13. Cela signifie que :

Question 2/5

On a obtenu la série statistique suivante :

Combien vaut la médiane ?

Question 3/5

On a obtenu la série ci-dessous :

Quelle est la médiane de cette série ?

Question 4/5

On a relevé les tailles en cm des élèves d’une classe :

 

Parmi les propositions suivantes, laquelle est vraie ?

Question 5/5

Les notes en français de deux classes littéraires sont données dans le tableau suivant :

Quelle est la note médiane ?

Vous avez obtenu75%de bonnes réponses !

Recevez l'intégralité des bonnes réponses ainsi que les rappels de cours associés :

Votre adresse e-mail sera exclusivement utilisée pour vous envoyer notre newsletter. Vous pourrez vous désinscrire à tout moment, à travers le lien de désinscription présent dans chaque newsletter. Pour en savoir plus sur la gestion de vos données personnelles et pour exercer vos droits, vous pouvez consulter notre charte.

Une erreur s'est produite, veuillez ré-essayer

Consultez votre boite email, vous y trouverez vos résultats de quiz!

Découvrez le soutien scolaire en ligne avec myMaxicours

Le service propose une plateforme de contenus interactifs, ludiques et variés pour les élèves du CP à la Terminale. Nous proposons des univers adaptés aux tranches d'âge afin de favoriser la concentration, encourager et motiver quel que soit le niveau. Nous souhaitons que chacun se sente bien pour apprendre et progresser en toute sérénité ! 

Fiches de cours les plus recherchées

NSI

Algorithmes de recherche : obtenir une moyenne, une médiane

NSI

Trier par insertion

NSI

Trier par sélection

NSI

Utiliser les invariants pour corriger un algorithme

NSI

Comprendre et utiliser l'algorithme des k plus proches voisins

NSI

L'algorithme de recherche dichotomique dans un tableau trié

NSI

Résoudre un problème avec un algorithme glouton

NSI

Écrire un entier positif dans une base donnée

NSI

Passer de la représentation d'une base à une autre

NSI

Comprendre les bases de la représentation binaire

NSI

Effectuer des opérations en binaire

NSI

Utiliser la méthode du complément à 2 en binaire

NSI

Représenter les nombres réels en binaire

NSI

Comprendre les booléens

NSI

Utiliser les opérateurs booléens élémentaires

NSI

Obtenir une table de vérité d'une expression booléenne complexe

NSI

Représenter un texte en utilisant différents encodages