Rechercher dans des listes

Objectif

  • Savoir rechercher efficacement une valeur dans une liste non triée.

Mise en situation

La recherche de valeurs dans une liste est un des problèmes les plus simples et se présentant très souvent dans le quotidien d'un développeur.

Liste non triée

La recherche dans une liste non triée ne fait aucune hypothèse sur la position des éléments. Par exemple, la valeur maximale peut se trouver n'importe où dans la liste. Ainsi, pour trouver une valeur il faudra toujours parcourir les éléments un à un.

MéthodeRecherche de la position d'une valeur

Ce problème consiste à renvoyer l'indice (la position) d'une valeur donnée si elle est présente dans une liste. Dans ce cas aussi, nous travaillons sur une liste non triée. Il sera nécessaire de parcourir toutes les cases une à une. Le programme ci-dessous renvoie toutes les position de la valeur est celle recherchée. Si elle est présente plusieurs fois, le programme affichera chacun des indices correspondant.

1
/** JavaScript : cherche une valeur dans une liste de températures. */
2
const temperatures = [12, 5, 29, -3]
3
const val = 5 // La valeur à trouver
4
5
for (let i = 0; i < temperatures.length; i++) {
6
  if (val === temperatures[i]) {
7
    console.log(i)
8
  }
9
}
10
1
"""Python : cherche une valeur dans une liste de températures. """
2
temperatures = [12, 5, 29, -3]
3
val = 5  # Valeur à trouver
4
5
for i in range(len(temperatures)):
6
  if val == temperatures[i]:
7
    print(i)

MéthodeRecherche du maximum

Voici un algorithme qui retourne la valeur maximale d'une liste non triée. L'algorithme teste les éléments un à un et possède une variable qui stocke le maximum.

Cette variable est initialisée avec le premier élément de la liste et est mise à jour dès qu'une valeur plus grande que le maximum actuel est trouvée.

À noter que la recherche du minimum est identique. Il faudra simplement inverser la condition du if à l'intérieur de la boucle..

1
/** JavaScript : cherche le maximum d'une liste de températures. */
2
const temperatures = [12, 5, 29, -3]
3
let max = temperatures[0]
4
for (let i = 1; i < temperatures.length; i = i + 1) {
5
  if (max < temperatures[i]) {
6
    max = temperatures[i]
7
  }
8
}
9
10
console.log(max)
11
1
"""Python : cherche le maximum d'une liste de températures. """
2
temperatures = [12, 5, 29, -3]
3
max = temperatures[0]
4
for i in range(1, len(temperatures)):
5
  if max < temperatures[i]:
6
    max = temperatures[i]
7
8
print(max)

ExempleDéroulement pas à pas

Pour mieux comprendre cet algorithme, il est intéressant de le faire tourner à la main avec l'exemple temperatures = [12, 5, 29, -3] :

  • Avant la boucle : max stocker la valeur 12.

  • Première itération, i = 1 : max est plus grand que 5 donc l'algorithme passe à l'itération suivante.

  • Deuxième itération, i = 2 : max est plus petit que 29 donc max prend la valeur 29.

  • Troisième itération, i = 3 : max est plus grand que -3 donc l'algorithme passe à l'itération suivante.

  • i = 4 donc la boucle se termine et le programme affiche le résultat, c'est-à-dire 29.

ComplémentComplexité de ces recherches

La complexité en temps de ces deux algorithmes est O(n) car il est nécessaire de parcourir tous les éléments de la liste pour trouver ce que l'on cherche.

À retenir

  • Lorsque l'on cherche un élément dans une liste non-triée, il est nécessaire de parcourir un à un les éléments de celle-ci.