La recherche dichotomique, également appelée recherche binaire, est un algorithme de recherche efficace qui permet de trouver rapidement un élément dans un tableau trié en divisant à chaque étape la plage de recherche en deux et en éliminant la moitié inutile.
L'algorithme de recherche dichotomique fonctionne comme suit :
A faire dans le cahier.
On considère la liste suivante : [3, 5, 8, 12, 15, 19, 23, 35, 42, 56, 60, 67, 70, 78, 91]
En faisant une recherche dichotomique :
Compléter la fonction ci-dessous qui implémente une recherche dichotomique :
Une liste est donnée afin de tester la fonction.
Tests :
# Tests
Affichage :
Console:
On considère la boucle qui manipule les indices gauche et droite.
Invariant : À chaque itération, si l’élément recherché est présent dans le tableau, alors il se trouve dans l’intervalle d’indices \( [gauche, droite] \).
Au début de l’algorithme, on a :
\( gauche = 0 \) et \( droite = n - 1 \).
L’intervalle \( [gauche, droite] \) contient donc tout le tableau. L’invariant est vrai avant la première itération.
À chaque itération, on calcule l’indice milieu et on compare la valeur recherchée avec tab[milieu].
tab[milieu] est égal à la valeur recherchée, l’algorithme renvoie immédiatement True.droite = milieu - 1.gauche = milieu + 1.Dans chaque cas, on élimine une moitié du tableau qui ne peut pas contenir la valeur recherchée. L’invariant reste donc vrai après chaque itération.
La boucle s’arrête lorsque gauche > droite.
Dans ce cas, l’intervalle \( [gauche, droite] \) est vide. D’après l’invariant, la valeur recherchée ne peut donc pas être présente dans le tableau.
Si l’algorithme renvoie True, la valeur est bien dans le tableau.
S’il termine sans la trouver, alors elle n’y est pas.
La recherche dichotomique est donc un algorithme correct, à condition que le tableau soit trié.