Comment utiliser cette page

Cette page suit toujours le même plan : le principe en une phrase, les étapes dans l'ordre exact, une démonstration interactive, le code Python, puis le nombre de comparaisons et la complexité.

Utilisation de la démonstration
La démonstration avance uniquement quand vous cliquez sur « Suivant » ou « Précédent » : rien ne bouge tout seul. Un bouton « Lecture automatique » est disponible si vous préférez laisser les étapes défiler seules, à une vitesse que vous choisissez.

1. Vocabulaire à connaître avant de commencer

Chaque mot ci-dessous est utilisé exactement dans ce sens dans toute la page.

MotDéfinition précise
Tableau triéUn tableau dont les valeurs sont rangées par ordre croissant. La recherche dichotomique ne fonctionne que sur un tableau trié.
IndiceLe numéro qui repère une case du tableau. Le premier indice est 0, pas 1.
Intervalle de rechercheLa portion du tableau, entre les indices gauche et droite, où la valeur cherchée peut encore se trouver.
Borne gauche / borne droiteLes indices gauche et droite qui délimitent l'intervalle de recherche actuel.
MilieuL'indice au centre de l'intervalle de recherche, calculé par (gauche + droite) // 2.
Division entière (//)La division dont on ne garde que la partie entière : 5 // 2 = 2 (et non 2,5).
ComplexitéUne estimation du nombre d'opérations faites par l'algorithme, en fonction du nombre n de valeurs du tableau.

2. Le tableau d'exemple utilisé dans cette page

On utilise le tableau T, de 6 valeurs, déjà trié :

Indice012345
Valeur T[i]123589

C'est justement le tableau obtenu à la fin des fiches sur le tri par sélection et le tri par insertion. La recherche dichotomique a besoin d'un tableau déjà trié pour fonctionner.

But de l'algorithme : chercher la valeur x = 2 dans ce tableau, et renvoyer son indice si elle s'y trouve (ou -1 si elle n'y est pas).

3. Recherche dichotomique

3.1 — Principe, en une phrase

Principe
On compare x à la valeur du milieu de l'intervalle de recherche : si ce n'est pas elle, on élimine la moitié de l'intervalle qui ne peut pas contenir x, et on recommence sur la moitié restante.

3.2 — Les étapes, dans l'ordre exact

  1. On part avec gauche = 0 et droite = n - 1 (tout le tableau est encore possible).
  2. Tant que gauche est inférieur ou égal à droite, on calcule milieu = (gauche + droite) // 2.
  3. Si T[milieu] est égal à x, on a trouvé : on renvoie milieu.
  4. Si T[milieu] est plus petit que x, alors x ne peut être qu'à droite de milieu (si x est présent) : on met gauche = milieu + 1.
  5. Si T[milieu] est plus grand que x, alors x ne peut être qu'à gauche de milieu (si x est présent) : on met droite = milieu - 1.
  6. On répète les étapes 2 à 5. Si on arrive à gauche supérieur à droite sans avoir trouvé x, c'est que x n'est pas dans le tableau : on renvoie -1.

3.3 — Démonstration interactive

intervalle de recherche actuel indices déjà exclus indice milieu en cours de test valeur trouvée
Étape 1 / 1
On cherche x = 2. La ligne de code correspondant à l'étape en cours est surlignée ci-dessous.

3.4 — Code Python

def recherche_dichotomique(T, x):    """Cherche x dans le tableau trié T. Renvoie l'indice de x, ou -1 si absent."""    gauche = 0    droite = len(T) - 1    while gauche <= droite:        milieu = (gauche + droite) // 2        if T[milieu] == x:            return milieu        elif T[milieu] < x:            gauche = milieu + 1        else:            droite = milieu - 1    return -1# Jeu de données : le même tableau trié que les fiches précédentesT = [1, 2, 3, 5, 8, 9]print(recherche_dichotomique(T, 2))# Résultat affiché : 1

3.5 — Nombre de comparaisons et complexité

Prêt(e) pour la suite ? → Retour à l'accueil