Recherche dichotomique dans un tableau trié
Principe
Cet algorithme compare la valeur recherchée à la valeur du milieu du tableau.
Si c’est la valeur recherchée, on s’arrête et on retourne sa position. Si cette valeur est plus petite, alors la valeur recherchée est située dans la partie gauche du tableau, sinon elle est dans la partie droite. On répète le procédé de comparaison jusqu’à ce que l’on obtienne la valeur recherchée, ou jusqu’à ce que l’on ait réduit l’intervalle de recherche à un intervalle vide : cela signifie que la valeur recherchée n’est pas présente dans le tableau.
À chaque étape, la zone de recherche de la valeur est divisée par deux.
Algorithme
Text Only
//déclarations
indice_gauche, indice_droite, elmt, indice_centre: Entiers
liste : liste de N entiers triés
retour : Booléen
//initialisation
indice_gauche ← 0
indice_droite ← N-1
retour ← faux
//Boucle de recherche
// La condition début inférieur ou égal à fin permet d'éviter de faire
// une boucle infinie si 'val' n'existe pas dans le tableau.
TANT QUE retour != vrai et indice_gauche <= indice_droite:
indice_centre ← partie_entière((indice_gauche + indice_droite)/2)
SI liste[indice_centre] == val:
retour ← vrai
SINON:
SI val > liste[indice_centre]:
début ← indice_centre+1
SINON:
fin ← indice_centre-1
FIN SI
FIN SI
FIN TANT QUE
//Affichage du résultat
SI retour == vrai:
Afficher "La valeur ", val , " est au rang ", indice_centre
SINON:
Afficher "La valeur ", val , " n'est pas dans le tableau."
FIN SI
Implémentation en Python
🐍 Script Python
def dichotomie(liste, val):
indice_gauche = 0
indice_droite = len(liste -1)
retour = False
while retour != true and indice_gauche <= indice_droite:
indice_centre = (indice_gauche + indice_droite)//2
if liste[indice_centre] == val:
retour = true
else:
if val > liste[indice_centre]:
debut = indice_centre + 1
else:
fin = indice_centre - 1
if retour == vrai:
print("La valeur ", val , " est au rang ", indice_centre)
else:
print("La valeur ", val , " n'est pas dans le tableau.")
Complexité
Logarithmique | $$ O(log(n)) $$ |