Compter les tours d'une dichotomie
Exercice · niveau 1 (application) · mathématiques appliquées (ECG 1re année), chapitre 11 — Informatique et algorithmique · Dichotomie et approximation numérique
Énoncé
Modifier recherche_dichotomique pour qu'elle renvoie le nombre de tours effectués. Vérifier sur une liste de éléments qu'il est de l'ordre de .
Corrigé
def dichotomie_comptee(L, x):
a, b, tours = 0, len(L) - 1, 0
while a <= b:
tours = tours + 1
m = (a + b) // 2
if L[m] == x:
return m, tours
elif L[m] < x:
a = m + 1
else:
b = m - 1
return -1, tours
Sur L = list(range(1000)), on observe au plus tours, et exactement pour une valeur absente (le pire cas). Pour , la réponse tombe au premier tour.
Pourquoi . Chaque tour divise par deux le nombre de candidats : après tours il en reste au plus . La boucle s'arrête quand ce nombre atteint , donc quand , soit . Ici , d'où .
L'ordre de grandeur. Sur un million d'éléments, tours ; sur un milliard, . La recherche séquentielle en demanderait respectivement un million et un milliard. C'est la différence entre et — et elle est achetée par une hypothèse, la liste triée.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.