Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Recherche séquentielle et recherche dichotomique

La leçon entière est à lire ici. Créez un compte gratuit pour lancer ses commandes dans un laboratoire et passer ses quiz et ses exercices.

Leçon de 50 minAucune commande

La facture 193, vite

Une cliente appelle la comptabilité au sujet de sa facture numéro 193. Le logiciel en contient des milliers.

On peut les lire une par une depuis le début. Mais si les factures sont rangées par numéro, il existe une méthode bien plus rapide.

Cette leçon montre les deux méthodes, et quand utiliser chacune.

À la fin de cette leçon

Remarque

Je peux trouver un élément par recherche séquentielle et par recherche dichotomique.

Mots-clés

MotCe que ça veut dire
Algorithmeune suite d’étapes qui résout un problème
Recherche séquentielleregarder chaque élément dans l’ordre
Triérangé du plus petit au plus grand
Recherche dichotomiqueregarder le milieu et écarter une moitié
Étapeune comparaison avec un élément
-1la réponse convenue pour « absent »

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

La recherche séquentielle lit chaque élément

La recherche séquentielle part du premier élément. Elle le compare à ce qu’on cherche, puis passe au suivant.

Elle s’arrête quand elle trouve, ou quand la liste est finie. Elle marche sur n’importe quelle liste, triée ou non.

Au pire, elle regarde tous les éléments. Pour 1 000 colis, cela peut faire 1 000 étapes.

À vous : chercher un colis

Code: python
# Numéros de suivi des colis, dans l'ordre d'expédition.
colis = [58213, 58190, 58277, 58204, 58251, 58236]
cherche = 58251

etapes = 0
position = -1
for i in range(len(colis)):
    etapes = etapes + 1
    if colis[i] == cherche:
        position = i
        break

print("Trouvé à l'indice", position, "en", etapes, "étapes")

# Cherchez 99999, un numéro absent, puis exécutez.

La recherche dichotomique coupe en deux

La recherche dichotomique ne marche que sur une liste triée. Elle regarde l’élément du milieu.

Si c’est le bon, elle s’arrête. Si on cherche plus grand, elle écarte toute la moitié gauche. Si on cherche plus petit, elle écarte la moitié droite.

Puis elle recommence avec ce qui reste. Chaque étape divise la liste par deux.

À vous : chercher une facture

Code: python
# Numéros de facture, triés du plus petit au plus grand.
factures = [102, 115, 123, 138, 141, 156, 162, 177, 185, 193, 204, 218, 226, 231, 249]
cherche = 193

bas = 0
haut = len(factures) - 1
etapes = 0
while bas <= haut:
    etapes = etapes + 1
    milieu = (bas + haut) // 2
    print("Étape", etapes, ": indice", milieu, "contient", factures[milieu])
    if factures[milieu] == cherche:
        print("Trouvée à l'indice", milieu)
        break
    elif factures[milieu] < cherche:
        bas = milieu + 1     # on écarte la moitié gauche
    else:
        haut = milieu - 1    # on écarte la moitié droite

# Cherchez 102, puis 249, et comptez les étapes.

Exemple travaillé : chercher 193 parmi 15

ÉtapeBasHautMilieuValeur au milieuDécision
10147177193 est plus grand : à droite
281411218193 est plus petit : à gauche
38109193Trouvée

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Une erreur fréquente

Attention

Beaucoup pensent que la recherche dichotomique marche sur n’importe quelle liste. C’est faux. Si la liste n’est pas triée, écarter une moitié peut écarter l’élément cherché. Le programme répond alors « absent » alors qu’il est là.

Exemple travaillé : le pire cas

Nombre d’élémentsSéquentielle, au pireDichotomique, au pire
1515 étapes4 étapes
1 0001 000 étapes10 étapes
1 000 0001 000 000 étapes20 étapes

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.