Algorithmes de recherche

Recherche dichotomique

Si la liste sur laquelle est appliquée la recherche d'un élément est triée, le temps de recherche peut être singulièrement diminué en recourant à une méthode permettant d'éliminer la moitié des éléments de la liste à chaque nouvelle itération. Cet algorithme, appelé recherche dichotomique, consiste à comparer l'élément cherché avec l'élément central de la liste. Si l'élément cherché lui est inférieur, il doit se trouver dans la première moitié de la liste; si l'élément cherché lui est supérieur, il doit se trouver dans la deuxième moitié de la liste. En appliquant récursivement cette technique à la moitié choisie, l'algorithme aboutira soit à la position de l'élément cherché, soit à aucune position auquel cas l'élément n'appartient pas à la liste, comme l'illustre la figure ci-dessous:

algo2.jpg

Déroulement de la recherche dichotomique de l'élément 54 sur une liste d'entiers

Cette méthode utilise deux pointeurs g et d pour délimiter la sous-liste sur laquelle porte la recherche courante. Si la sous-liste devient vide, c'est-à-dire que les pointeurs g et d se croisent, la recherche est infructueuse et l'algorithme s'arrête. Dans tout autre cas, l'indice m est positionné au milieu de l'intervalle et trois possibilités se présentent: l'élément cherché est trouvé à l'aide de l'indice m ou bien l'élément cherché est plus grand que l'élément situé à la position m et alors le pointeur g est repositionné à en m+1 ou finalement l'élément cherché est plus petit que l'élément situé à la position m auquel cas le pointeur d est repositionné en m-1.

A vous de jouer !

En vous basant sur l'exemple présenté ci-dessus, répondez à chacun des points suivants:

  1. Décrivez chacune des étapes de progression de la recherche dichotomique des éléments 35 et 50 appliquée à la liste ordonnée [2, 12, 17, 25, 33, 35, 44, 54, 77, 91] puis indiquez le nombre de comparaisons nécessaires à chacune des recherches.
  2. Déterminez le nombre maximal de comparaisons nécessaires à la recherche d'un élément dans une liste, si celle-ci comporte 100 ou n éléments.
  3. Implémentez la recherche dichotomique en Python de manière itérative et récursive en vous basant sur le squelette téléchargeable ici.

|